שעון 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, ומצויר בירוק.
אתגר
בינוניהוסיפו את מחוג הדקות:
- השעון מתחיל ב־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); // לצייר מחדש עשר פעמים בשנייה
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה פרויקטים
6שעון NeoPixel
שעון NeoPixel: שניותשעון NeoPixel: דקותשעון NeoPixel: שילוב המחוגיםשעון NeoPixel: קביעת השעהתרגלו בעצמכם: Arduino אונליין