4. RGB värvid

Kollase värvi sisselülitamise kood:

int punaneLed = 5;
int rohelineLed = 0;
int sinineLed = 1;

void setup() {
  pinMode(punaneLed, OUTPUT);
  pinMode(sinineLed, OUTPUT);
  pinMode(rohelineLed, OUTPUT);

  analogWrite(sinineLed, 255);
  analogWrite(punaneLed, 127);
  analogWrite(rohelineLed, 127);
}

void loop() {
 
}

 

ÜLESANNE 1: Muuda koodi, et saada mingi muu värv omal valikul.

ÜLESANNE 2: Muuda koodi nii, et toimuks vilkumine, aga mitte punasega nagu esimeses näidiskoodis vaid muu värviga, mida tuleb mitmest värvist segada.

 

Vikerkaarevärvide järjestiku vahetamise kood:

int punaneLed = 5;
int rohelineLed = 0;
int sinineLed = 1;

void setup() {
  pinMode(punaneLed, OUTPUT);
  pinMode(sinineLed, OUTPUT);
  pinMode(rohelineLed, OUTPUT);
}

void loop() {
  analogWrite(sinineLed, 255);
  analogWrite(punaneLed, 0);
  analogWrite(rohelineLed, 255);
  
  delay(500);

  analogWrite(sinineLed, 127);
  analogWrite(punaneLed, 127);
  analogWrite(rohelineLed, 255);
  
  delay(500);

  analogWrite(sinineLed, 0);
  analogWrite(punaneLed, 255);
  analogWrite(rohelineLed, 255);
  
  delay(500);

  analogWrite(sinineLed, 255);
  analogWrite(punaneLed, 255);
  analogWrite(rohelineLed, 0);
  
  delay(500);

  analogWrite(sinineLed, 255);
  analogWrite(punaneLed, 127);
  analogWrite(rohelineLed, 127);
  
  delay(500);

  analogWrite(sinineLed, 255);
  analogWrite(punaneLed, 170);
  analogWrite(rohelineLed, 85);
  
  delay(500);
}

Tähelepanu: peale video valmimist avastasin, et punase LEDiga ühendatud pin ei oska tegelikult üldse pulsilaiusmodulatsiooni teha – ehk siis seda, mida analogWrite käsklus temalt palub. Punane kas põleb või on kustus, vahepealseid variante pole. analogWrite käsklusi ta täidab osalt õigesti – sisse ja välja lülitab. Aga näidiskoodi värvid ei kuku päris sellised välja, nagu plaanitud. Korrektne oleks punase jaoks vaid digitalWrite kasutamine. Järgneb vastavalt parandatud kood, kus näiteks kollane saadakse punase ja rohelise täisvõimsusel sisselülitamisel – algses näites proovisin lülitada 50%, aga tegelikkuses seade käitus nõnda, et punane oli 100% ja roheline 50%.

int punaneLed = 5;
int rohelineLed = 0;
int sinineLed = 1;

void setup() {
  pinMode(punaneLed, OUTPUT);
  pinMode(sinineLed, OUTPUT);
  pinMode(rohelineLed, OUTPUT);

  analogWrite(sinineLed, 255);
  digitalWrite(punaneLed, LOW);
  analogWrite(rohelineLed, 0);
}

void loop() {
 
}

 

int punaneLed = 5;
int rohelineLed = 0;
int sinineLed = 1;

void setup() {
  pinMode(punaneLed, OUTPUT);
  pinMode(sinineLed, OUTPUT);
  pinMode(rohelineLed, OUTPUT);
}

void loop() {
  analogWrite(sinineLed, 255);
  digitalWrite(punaneLed, LOW);
  analogWrite(rohelineLed, 255);
  
  delay(500);

  analogWrite(sinineLed, 127);
  digitalWrite(punaneLed, LOW);
  analogWrite(rohelineLed, 255);
  
  delay(500);

  analogWrite(sinineLed, 0);
  digitalWrite(punaneLed, HIGH);
  analogWrite(rohelineLed, 255);
  
  delay(500);

  analogWrite(sinineLed, 255);
  digitalWrite(punaneLed, HIGH);
  analogWrite(rohelineLed, 0);
  
  delay(500);

  analogWrite(sinineLed, 255);
  digitalWrite(punaneLed, LOW);
  analogWrite(rohelineLed, 0);
  
  delay(500);

  analogWrite(sinineLed, 255);
  digitalWrite(punaneLed, LOW);
  analogWrite(rohelineLed, 150);
  
  delay(500);
}

Järgmine: 5. Sisend

Lisa kommentaar

Sinu e-postiaadressi ei avaldata. Nõutavad väljad on tähistatud *-ga