יום שבת, 12 במאי 2012

מונה חד- ספרתי

בפוסט הבא אני הולך לתאר את הפרויקט הראשון שאני אציג כאן:
המונה החד- ספרתי.

החומרה:


מסך חד- ספרתי
כפתור קטן
נגד 10 קילואום

                                     
                                                                      תיאור החלקים

דרישות התוכנה:

בתחילת התוכנה המסך יראה 0. כאשר הכפתור ילחץ יתווסף 1 למשתנה שייצג את המספר המוצג.
כאשר המספר יעבור את 9 הוא יתאפס עוד לפני שנציג את התוצאה. לפני כל הצגת מספר המסך יתרוקן לגמרי.

פונקציות


מי שכבר מכיר פונקציות ב- c יכול לדלג על הסבר זה. הסבר זה מיועד לאלו ששפת התכנות חדשה בשבילם.

מהי פונקציה?


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

מבנה הפונקציה

void שם הפונקציה() {
      רשימת תהליכים
}

זימון פונקציה

שם הפונקציה() ;

דוגמה לפונקציה מחיי היום יום

void קפיצה() {
  קיפול ברכים ;
  תפיסת תעוצה ;
  הרמה מהירה ;
  שהיה באוויר ;
}

 

שימוש בפונקציות בתכנית שלנו

בתכנית שלנו אנו נשתמש בהמון פונקציות. מאחר ונעשה שימוש בעשרה מספרים (0-9) נזדקק לעשרה פונקציות
של מספרים. בנוסף, נרצה להגדיר פונקציה שתאפס את המסך. והפונקציה החשובה והמשמעותית ביותר, הינה הפונקציה
המקבלת כפרמטר את המונה שלנו ומפעילה באופן מתאים את פונקציית המספר הרצויה. בסך הכל אנו זקוקים ליצור 12 פונקציות, אם לא נחשיב את loop או את setup המוכרחות להימצא בכל תוכנה.



                                                                  מס' היציאה בכל נורה במסך

פונקציה המאפסת את המספרים

void black() {
  digitalWrite(5, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(12, LOW);
  digitalWrite(6, LOW);
}

 


פונקציה המפעילה את המספר 8

 void eight() {
  black() ;
  digitalWrite(5, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite(6, HIGH);
}

 פונקצית ההפעלה

void do_it() {
  switch (x) {
  case 0:
  zireo() ;
  break;
  case 1:
  one() ;
  break;
  case 2:
  two() ;
  break;
  case 3:
  three() ;
  break;
  case 4:
  four() ;
  break;
  case 5:
  five() ;
  break;
  case 6:
  six() ;
  break;
  case 7:
  seven() ;
  break;
  case 8:
  eight();
  break;
  case 9:
  nine() ;
  break;
  }
}

הקוד המלא 

את הקוד המלא אפשר להוריד מכאן.

סרטון

 

סרטוט מלא
















5 תגובות:

  1. יופי של פוסט ופרויקט!

    אחרי שתלמד לעבוד עם ביטים, תוכל לצמצם את הקוד שלך לשלוש פונקציות קצרות בלבד - setup, loop ו-do_it או איך שתרצה לקרוא לה :-)

    אני אמשיך לעקוב אחרי הבלוג. בהצלחה!

    השבמחק
  2. אנונימי30/5/12 22:59

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

    השבמחק
    תשובות
    1. הכיוון של החומרה? למה הכוונה?

      הוספתי כרגע (לפי בקשתך) סרטוט מפורט של החיבורים.
      הכניסה האנלוגית A0 מנסה לקבל קקלט מקור מתח.
      הכפתור מחובר מצד אחד לחיבור ה- 5V ומהצד השני אל
      A0. כאשר הכפתור נלחץ שני אלו מתחברים.

      הכל בתאורתי טוב ויפה, אך במציאות התוצאה המתקבלת
      ב- A0 אקראית לכל דבר. כדי לאפס אותה מוסיפים נגד בעל
      ערך גבוהה (במקרה שלי 10KΩ). בסוף הפונקציה loop בתוכנית שלי מוצגת הפקודה (delay(500 ופעולתה היא לחכות
      500 מילי- שניות (1000 מילי- שניות = שנייה אחת) לפני
      שממשיכים לפקודה הבאה, או במקרה שלנו, לפני שהפונקציה מתחילה מחדש. תפקידה הוא לתת זמן לאדם אשר לוחץ על הכפתור זמן לעזוב אותו לפני שהתוכנה עוברת למספר הבא.

      התוצאה של כל הגורמים האלו, יוצרת מצב מגניב בהחלט.
      כאשר הנגד לא מחובר, הקלט של A0 גבוהה מ- 0 גם אם
      הכפתור לא לחוץ, מה שגורם לעלייה במספר, הדפסתו, המתנה
      קלה, עלייה במספר... כך בעצם מתקבלת מין "פצצה".

      אני מקווה שהצלחתי לעזור לך, עוד על איפוס כניסות
      בארדואינו אפשר לקרוא בפוסט (המצויין) של עידו גנדל:
      http://www.idogendel.com/whitebyte/archives/354
      הנקרא "ארדואינו: סודות המשיכה".

      אם משהו עדיין לא ברור אפשר לפנות אלי באימייל:
      arduino.uss@gmail.com


      תומר

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

    השבמחק