Dorazila zásilka z Číny, která nejenom že obsahovala Arduino Nano na které se můžete těšit v některém z příštích příspěvků, ale i několik RGB LED diod. Následovala tedy rychlovka, takový pokus, příprava pro další miniprojekt a to bude FakeAmbilightTV.

V prvním pěti vteřinách každého loopu se postupně změní barva všech barevných kanálů z původní barvy na novou, náhodně generovanou. Poté počkáme (zde vteřinu, později předpokládám vteřin 30+) a vše se opakuje.

Kód je neoptimalizovaný, ale funkční. Níže videoukázka.

int red = 6;
int green = 5;
int blue = 3;
int randRold = 0;
int randGold = 0;
int randBold = 0;
boolean minusR = false;
boolean minusG = false;
boolean minusB = false;
float krokR = 0;
float krokG = 0;
float krokB = 0;
int jumpR = 0;
int jumpG = 0;
int jumpB = 0;
int rozdilR = 0;
int rozdilG = 0;
int rozdilB = 0;

// the setup routine runs once when you press reset:
void setup() {
// declare pin 9 to be an output:
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
int randRnew = random(255);
int randGnew = random(255);
int randBnew = random(255);

if (randRnew > randRold){
rozdilR = randRnew - randRold;
krokR = (float)rozdilR / 250;
minusR = false;
}else{
rozdilR = randRold - randRnew;
krokR = (float)rozdilR / 250;
minusR = true;
}

if (randGnew > randGold){
rozdilG = randGnew - randGold;
krokG = (float)rozdilG / 250;
minusG = false;
}else{
rozdilG = randGold - randGnew;
krokG = (float)rozdilG / 250;
minusG = true;
}

if (randBnew > randBold){
rozdilB = randBnew - randBold;
krokB = (float)rozdilB / 250;
minusB = false;
}else{
rozdilB = randBold - randBnew;
krokB = (float)rozdilB / 250;
minusB = true;
}

for (int i=1; i <= 250; i++){
int pridelR = krokR * i;
int pridelG = krokG * i;
int pridelB = krokB * i;
if (minusR == false){jumpR = randRold + pridelR;}else{jumpR = randRold - pridelR;}
analogWrite(red, jumpR);
if (minusG == false){jumpG = randGold + pridelG;}else{jumpG = randGold - pridelG;}
analogWrite(green, jumpG);
if (minusB == false){jumpB = randBold + pridelB;}else{jumpB = randBold - pridelB;}
analogWrite(blue, jumpB);
delay(20);}

delay(1000);

randRold = randRnew;
randGold = randGnew;
randBold = randBnew;
}

Be Sociable, Share!

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *