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

תרגיל 3 - הפתרון

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

פתרון תרגיל יצירת אור מתחלף בעזרת ארדואינו

בתרגיל הזה אנחנו צריכים לזכור את כמות הלחיצות שהיו עד כה על הכפתור (או לפחות לדעת אם היו מספר לחיצות זוגי או לא), כדי שנדע איזו נורה צריך להדליק.

לשם כך אנו משתמשים במשתנה, אשר יכיל את מספר הלחיצות, ואשר נגדיל בכל לחיצה

    
short cnt;

  

כמובן שלשם כך אנו צריכים לזהות לחיצה

בתרגיל הקודם השתמשנו ב-digitalRead כדי לזהות כפתור לחוץ.

אבל אם נשתמש בזה גם כאן, כמו בקוד הבא, תהיה לנו בעיה:

    
  btn=digitalRead(pinBtn);
  if(btn==LOW){
    cnt++;
  }


  

כי הקוד הזה סופר כל משך הלחיצה, ולא רק פעם אחת בכל לחיצה.

לכן אנו צריכים לייצר קוד שיודע לזהות את תחילת הלחיצה, ורק בתחילת הלחיצה הוא מגדיל את מונה לחיצות

בתחילת הלחיצה הערך הנוכחי של הפין הוא נמוך (כי הכפתור לחוץ), אבל הקריאה הקודמת של הפין היתה גבוהה (כי הכפתור היה לא לחוץ)

לכן נגדיר משתנה נוסף, אשר ישמור את הערך של הפין בפעם הקודמת שמדדנו, ואת זיהוי הלחיצה נעשה לפי הערכים של שתי המדידות

    
  btn=digitalRead(pinBtn);
  if((btn==LOW)&&(btn_d==HIGH)){
    cnt++;
  }
  btn_d=btn;


  

וכעת נותר רק לזהות את זוגיות הלחיצות.

את זה ניתן לעשות בעזרת הפעולה module המסומנת ב-%

    
  if(cnt % 2 == 0){
    digitalWrite(pinGreen,HIGH);
    digitalWrite(pinRed,LOW);
  } else {
    digitalWrite(pinGreen,LOW);
    digitalWrite(pinRed,HIGH);
  }


  

הערה:

לחיצה על כפתור אינה אירוע מיידי. ברגע הלחיצה המתח משתנה ויכול לעבור במהירות בין ערך גבוה לנמוך מספר פעמים.

 לכן אנו רוצים להאט קצת את קצב הבדיקה של שינוי מצב הכפתור.

את זה עושים עם פקודת delay

 

לסיכום, כל הקוד של התרגיל יהיה:

    
#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;
}

void loop() {
  btn=digitalRead(pinBtn);
  if((btn==LOW)&&(btn_d==HIGH)){
    cnt++;
  }
  btn_d=btn;
  if(cnt % 2 == 0){
    digitalWrite(pinGreen,HIGH);
    digitalWrite(pinRed,LOW);
  } else {
    digitalWrite(pinGreen,LOW);
    digitalWrite(pinRed,HIGH);
  }
  delay(20);
}
  

 

<< תרגיל 3 - אור מתחלף תרגיל 4 - עמעום אורות >>

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