Menu
CoddyTech
flag Ar iconالعربيةdown icon

ساعة 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اختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المشاريع

تدرّب بنفسك: Playground لـ Arduino