ממשיכים להגיע אליכם עד הבית!
משלוח חינם

עמעום אורות בעזרת ארדואינו

ערכה: הרחבת צעד ראשון

הפעם נוספה לנו דרישה לשלוט על עוצמת התאורה של המנורה.

אנו יכולים למנוע קליטה של לחיצות נוספות בשלב העמעום, כלומר ניתן להשתמש ב-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);
}


  

 

<< תרגיל 4 - עמעום אורות

תגובות גולשים