עמעום אורות בעזרת ארדואינו
ערכה: הרחבת צעד ראשון
הפעם נוספה לנו דרישה לשלוט על עוצמת התאורה של המנורה.
אנו יכולים למנוע קליטה של לחיצות נוספות בשלב העמעום, כלומר ניתן להשתמש ב-delay בתהליך.
כדי לשלוט על עוצמת התאורה, אנו משתמשים בפקודה analogWrite
פקודה זו מקבלת שני ערכים - הפין אליו מוציאים את המתח, וערך בין 0 ל-255 שמתאר את עוצמת המוצא.
למעשה, המוצא הוא בשיטת PWM, אבל ניתן להתייחס אליו כאן כאל מתח חלקי, אשר נותן הארה חלקית במנורה.
הערה: לא כל הפינים של הארדואינו תומכים ב-PWM, ולכן יש לחבר את הכרטיס אל פינים שתומכים בכך (כמו הפינים 9+10 בהם השתמשנו)
כדי לעמעם את האור האדום, מתאורה מלאה עד כיבוי, אנו רוצים לכתוב אליו את כל הערכים האפשריים מ-255 ועד 0.
לשם כך נשתמש בלולאה
for(i=255;i>=0;i--){
analogWrite(pinRed,i);
delay(4);
}
וכדי לבנות את התאורה, נשתמש גם כן בלולאה, אך קצת שונה
for(i=0;i<=255;i++){
analogWrite(pinGreen,i);
delay(4);
}
כמו כן, כיוון שיש 4 מצבים לכפתור, עדיף לטפל בהם בעזרת פקודת switch ואת המונה לאפס כאשר הוא מגיע אל 4
וכל הקוד של התוכנית:
#define pinBtn 11
#define pinGreen 10
#define pinRed 9
short cnt;
int btn_d;
int btn;
void setup() {
pinMode(pinBtn,INPUT_PULLUP);
pinMode(pinGreen,OUTPUT);
pinMode(pinRed,OUTPUT);
btn_d=HIGH;
cnt=0;
digitalWrite(pinRed,HIGH);
delay(100);
digitalWrite(pinRed,LOW);
}
void loop() {
int i;
btn=digitalRead(pinBtn);
if((btn==LOW)&&(btn_d==HIGH)){
switch (cnt) {
case 0:
digitalWrite(pinGreen,HIGH);
digitalWrite(pinRed,LOW);
break;
case 1:
digitalWrite(pinGreen,LOW);
digitalWrite(pinRed,HIGH);
break;
case 2:
for(i=255;i>=0;i--){
analogWrite(pinRed,i);
delay(4);
}
for(i=0;i<=255;i++){
analogWrite(pinGreen,i);
delay(4);
}
break;
case 3:
for(i=255;i>=0;i--){
analogWrite(pinGreen,i);
delay(4);
}
for(i=0;i<=255;i++){
analogWrite(pinRed,i);
delay(4);
}
break;
}
cnt++;
cnt=cnt%4;
}
btn_d=btn;
delay(100);
}