Menu
CoddyTech

שעון NeoPixel: דקות

חלק מהיחידה פרויקטים במסלול ה-Arduino של Coddy. שיעור 22 מתוך 24.

לוח Uno אינו יודע מה השעה ביום: millis() סופר רק מאז הפעלת החשמל. לכן הסקץ׳ מתחיל את השעון בשעה שנכתבה בו ומוסיף את השניות שחלפו מאז הפעלת החשמל. בשלב האחרון מוסיפים כפתורים לכיוונו.

שמרו את השעה כמספר אחד: מספר השניות מאז חצות. 10:24:50 הן 10 שעות, 24 דקות ו־50 שניות:

const unsigned long startTime = 10 * 3600UL + 24 * 60 + 50;
unsigned long now = startTime + millis() / 1000;

ה־UL שאחרי 3600 גורם לכך שהסכום יהיה מטיפוס unsigned long. בלעדיו הלוח מבצע את הכפל בטיפוס int, שערכו נעצר ב־32767, ולכן 10 כפול 3600 לא נכנס בו.

השניות והדקות הן שאריות, ולכן כל אחת מהן מתחילה שוב מ־0 כשהיא מגיעה ל־60:

int seconds = now % 60;
int minutes = (now / 60) % 60;

מחוג הדקות זז גם פיקסל אחד בכל 5 דקות, minutes / 5, ומצויר בירוק.

challenge icon

אתגר

בינוני

הוסיפו את מחוג הדקות:

  • השעון מתחיל ב־10:24:50: startTime בשניות מאז חצות
  • now הוא startTime ועוד מספר השניות מאז הפעלת החשמל
  • מחוג השניות: (now % 60) / 5, כחול
  • מחוג הדקות: ((now / 60) % 60) / 5, ירוק ring.Color(0, 255, 0)

לחצו על Run: בשעה 10:25 מחוג הדקות מתקדם צעד. לאחר מכן לחצו על Check.

נסו בעצמכם

#include <Adafruit_NeoPixel.h>

const int ringPin = 6;
const int pixelCount = 12;
Adafruit_NeoPixel ring(pixelCount, ringPin, NEO_GRB + NEO_KHZ800);

void setup() {
  ring.begin();
}

void loop() {
  unsigned long seconds = millis() / 1000;  // שניות מאז ההפעלה
  int secondPixel = (seconds % 60) / 5;     // פיקסל אחד לכל 5 שניות

  ring.clear();
  ring.setPixelColor(secondPixel, ring.Color(0, 0, 255));
  ring.show();
  delay(100);  // לצייר מחדש עשר פעמים בשנייה
}
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה פרויקטים

תרגלו בעצמכם: Arduino אונליין