ساعة 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); // أعد الرسم عشر مرات في الثانية
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المشاريع
3مستشعر ركن السيارة
مستشعر ركن السيارة: المسافةمستشعر ركن السيارة: الأضواءمستشعر ركن السيارة: التنبيهات الصوتيةمستشعر ركن السيارة: الشاشة6ساعة NeoPixel
ساعة NeoPixel: الثوانيساعة NeoPixel: الدقائقساعة NeoPixel: مزج العقاربساعة NeoPixel: ضبط الوقتتدرّب بنفسك: Playground لـ Arduino