הקוד של הקודן
ערכה: גלאי כניסות לחדר
במערכת שלנו יש מנגנון של קודן - הזנת קוד בעזרת שני כפתורים כדי לוודא שרק אנחנו מפעילים את המכשיר ומאפסים את רישום הכניסות.
אז יש לנו את הקוד שמקבל את הקלט מהכפתורים:
הגדרת הפינים
const int kodan_pbtn_Red=5; const int kodan_pbtn_Green=6;
בדיקת קליטת לחיצה בהם:
if(digitalRead(kodan_pbtn_Red) == HIGH){ ok=kodan_pressed('R'); } if(digitalRead(kodan_pbtn_Green) == HIGH){ ok=kodan_pressed('G'); }
ויש לנו את הקוד שמשתמש ברמקול האקטיבי כדי לתת חיווי על לחיצה ועל הזנת רצף שגוי או נכון
const int kodan_pinSpkr=2; pinMode(kodan_pinSpkr, OUTPUT); digitalWrite(kodan_pinSpkr, LOW); void kodan_beep_ok(){ digitalWrite(kodan_pinSpkr, HIGH); delay(100); digitalWrite(kodan_pinSpkr, LOW); delay(100); digitalWrite(kodan_pinSpkr, HIGH); delay(100); digitalWrite(kodan_pinSpkr, LOW); } void kodan_beep_wrong(){ digitalWrite(kodan_pinSpkr, HIGH); delay(200); digitalWrite(kodan_pinSpkr, LOW); } void kodan_beep(){ digitalWrite(kodan_pinSpkr, HIGH); delay(50); digitalWrite(kodan_pinSpkr, LOW); }
בדיקת רצף הקוד
החלק המעניין יותר הוא כמובן בדיקת הקוד ויצירתו.
אנו צריכים לסמן לנו את הלחיצות שהיו, וכן את הסדר שלהן.
הדרך הנוחה לעשות זאת היא מערך, שבו נרשום את הלחיצות שהיו לפי הסדר
#define KODAN_LEN 4 were made char kodan_hist[KODAN_LEN]=""; char kodan_code[KODAN_LEN]="RRGR"; byte kodan_index=0;
השורה הראשונה מגדירה את אורך הרצף (כמה לחיצות יש ברצף)
השניה היא המשתנה שיאגור את הלחיצות
השלישי הוא הרצף עצמו. כרגע הרצף הוא שתי לחיצות על אדום, לחיצה על ירוק ועוד לחיצה על אדום
והשורה הרביעית זה המשתנה שאומר באיזה תו אנחנו עכשיו מתוך הרצף.
כאשר נלחץ כפתור אנחנו מפעילים את הפונקציה
bool kodan_pressed(char btn_id){ bool ret=false; kodan_beep(); kodan_hist[kodan_index]=btn_id; kodan_index++; if(kodan_index >= KODAN_LEN){ ret=kodan_check(); for(byte k=0;kשמוסיפה את הלחיצה האחרונה אל המערך של היסטוריית הלחיצות, ואם כמות הלחיצות שווה לאורך הקוד, בודקת אם הקוד נכון, ומאפסת את ההיסטוריה כהכנה להזנה הבאה של הקוד
הבדיקה של נכונות הקוד נראית כך:
bool kodan_check(){ bool ret=false; bool flag=true; for(byte k=0;kכלומר עוברים על כל אחד מתווי ההיסטוריה ומשווים אותו אל התו המקביל בקוד הנכון. אם כולם זהים - יוצא חיווי של קוד נכון, אחרת חיווי של שגיאה.
שימו לב שהבדיקה נעצרת בתו הראשון השונה ביניהם (פקודת break) שהרי אין טעם להמשיך לבדוק אחרי תו אחד שגוי.