RGB LED שמחליף צבעים באופן רנדומלי
נשלח: ו' דצמבר 30, 2011 11:28 am
שלום לכולם!
פיתחתי קוד שמבצע את הנ"ל ע"ג UNO. הרעיון מאוד פשוט: לקבוע וקטור רפרנס אליו הלד חוזר אחרי כל איטרציה ובין לבין ליצור עוד מספר וקטורים אקראיים שהלד מתביית עליהם כחלק מהתוכנית. מצורף הקוד למעוניינים:
סליחה שיצא מחורבש, אם תתעניינו פנו אלי בפרטי ואשלח לכם למייל גרסה מסודרת.
נ.ב. אני יודע שזה כתוב בצורה חובבנית, אז אל תרדו עלי יותר מדי
פיתחתי קוד שמבצע את הנ"ל ע"ג UNO. הרעיון מאוד פשוט: לקבוע וקטור רפרנס אליו הלד חוזר אחרי כל איטרציה ובין לבין ליצור עוד מספר וקטורים אקראיים שהלד מתביית עליהם כחלק מהתוכנית. מצורף הקוד למעוניינים:
קוד: בחירת הכל
/* RANDOM CONTINOUS MOVMENT BETWEEN RGB LED COLORS*/
/* the circuit: GND of led to GND of uno
r leg throught 330 ohm resistor to PWM 3 leg of uno
g leg throught 330 ohm resistor to PWM 5 leg of uno
b leg throught 330 ohm resistor to PWM 6 leg of uno
*/
void setup() {
// no setup is needed
}
void loop() {
int vec2[3]={random(255),random(148),random(40)};//random vec2
int vec1[3]={random(255),random(148),random(40)};//random vec1
int vec3[3]={234,126,56};//reff vector-random, but constant
int vec4[3]={random(255),random(148),random(40)};//random vec4
int vec5[3]={random(255),random(148),random(40)};//random vec5
int vec6[3]={random(255),random(148),random(40)};//random vec6
int r=vec3[0];
int g=vec3[1];
int b=vec3[2];//initiation of the RGB to reff vec
while (1) {
if (r>vec1[0]) {r--;} else
if (r<vec1[0]) {r++;} else { r=r;}
if (g>vec1[1]) {g--;} else
if (g<vec1[1]) {g++;} else { g=g;}
if (b>vec1[2]) {b--;} else
if (b<vec1[2]) {b++;} else { b=b;}
analogWrite(6,b);
analogWrite(5,g);
analogWrite(3,r);
delay (15);
if (r==vec1[0] && g==vec1[1] && b==vec1[2]) break;//this loop zooms the RGB integers to the target vector &output the change with delay
//(repeats for all vectors one after the other)
}
while (1) {
if (r>vec2[0]) {r--;} else
if (r<vec2[0]) {r++;} else { r=r;}
if (g>vec2[1]) {g--;} else
if (g<vec2[1]) {g++;} else { g=g;}
if (b>vec2[2]) {b--;} else
if (b<vec2[2]) {b++;} else { b=b;}
analogWrite(6,b);
analogWrite(5,g);
analogWrite(3,r);
delay (15);
if (r==vec2[0] && g==vec2[1] && b==vec2[2]) break;
}
while (1) {
if (r>vec4[0]) {r--;} else
if (r<vec4[0]) {r++;} else { r=r;}
if (g>vec4[1]) {g--;} else
if (g<vec4[1]) {g++;} else { g=g;}
if (b>vec4[2]) {b--;} else
if (b<vec4[2]) {b++;} else { b=b;}
analogWrite(6,b);
analogWrite(5,g);
analogWrite(3,r);
delay (15);
if (r==vec4[0] && g==vec4[1] && b==vec4[2]) break;
}
while (1) {
if (r>vec5[0]) {r--;} else
if (r<vec5[0]) {r++;} else { r=r;}
if (g>vec5[1]) {g--;} else
if (g<vec5[1]) {g++;} else { g=g;}
if (b>vec5[2]) {b--;} else
if (b<vec5[2]) {b++;} else { b=b;}
analogWrite(6,b);
analogWrite(5,g);
analogWrite(3,r);
delay (15);
if (r==vec5[0] && g==vec5[1] && b==vec5[2]) break;
}
while (1) {
if (r>vec6[0]) {r--;} else
if (r<vec6[0]) {r++;} else { r=r;}
if (g>vec6[1]) {g--;} else
if (g<vec6[1]) {g++;} else { g=g;}
if (b>vec6[2]) {b--;} else
if (b<vec6[2]) {b++;} else { b=b;}
analogWrite(6,b);
analogWrite(5,g);
analogWrite(3,r);
delay (15);
if (r==vec6[0] && g==vec6[1] && b==vec6[2]) break;
}
while (1) {
if (r>vec3[0]) {r--;} else
if (r<vec3[0]) {r++;} else { r=r;}
if (g>vec3[1]) {g--;} else
if (g<vec3[1]) {g++;} else { g=g;}
if (b>vec3[2]) {b--;} else
if (b<vec3[2]) {b++;} else { b=b;}
analogWrite(6,b);
analogWrite(5,g);
analogWrite(3,r);
delay (15);
if (r==vec3[0] && g==vec3[1] && b==vec3[2]) break;//the last loop returns the RGB integers to the refference vector-this is critical
// so their won't be any "jumps" in colors
}
}
נ.ב. אני יודע שזה כתוב בצורה חובבנית, אז אל תרדו עלי יותר מדי
