تمرين 8: عمل ساعة ضوئية في اردوينو
Digital Hour Glass
يضيء اول ليد بعد 10 دقائق وكل 10 دقائق يضيء التالي حتي يضيئوا جميعا بعد مرور ساعة وهكذا
قم بتغيير الكود ليضيئ كل ليد بعد 10 ثواني وهكذا...
القطع المطلوبة:
tilt switch
led
10k ohm resistor
220 ohm resistor
tilt switch: حساس استشعار الميل
حساس أستشعار الميل يستخدم للكشف عن الميلان او عن الاتجاه, يتميز حساس استشعار الميل بأنه سهل الاستخدام والبرمجة و لا يستهلك الكثير من الطاقة ، لهذا الحساس استخدامات مختلفة في حياتنا إلىومية فهي تستخدم غالبا في الالعاب او الأجهزة الحركية للكشف عن مقدار ميلان الجهاز ويمكن استخدامه بعدة تطبيقات في البيت الذكي.
غالبا ما يكون هذا الحساس مصنوع من اسطوانة مجوفة من الداخل ويوجد بداخلها جسم موصل للكهرباء ( غالبا ما يكون فقافة من الزئبق او كرة متدحرجة), وفي نهاية التجويف يوجد قطبان موصلان للكهرباء وعندما يتم تحريك الحساس بحيث تكون القاعدة الموصول بها الاسلاك إلى الاعلى فإن الكرة تتجه إلى الاسفل وتوصل بين القطبين الموصلان للطاقة ، وبذلك فانه يعطي اشارة إلكترونية إلى المتحكم الأصغر او إلى الاردوينو وبذلك تستطيع ان تستفيد من هذه إشارة كا إشارة إدخل.
شكل التوصيل:
الكود جاهز هنا:
// named constant for the switch pin
const int switchPin = 8;
unsigned long previousTime = 0; // store the last time an LED was updated
int switchState = 0; // the current switch state
int prevSwitchState = 0; // the previous switch state
int led = 2; // a variable to refer to the LEDs
// 600000 = 10 minutes in milliseconds
long interval = 600000; // interval at which to light the next LED
void setup() {
// set the LED pins as outputs
for (int x = 2; x < 8; x++) {
pinMode(x, OUTPUT);
}
// set the tilt switch pin as input
pinMode(switchPin, INPUT);
}
void loop() {
// store the time since the Arduino started running in a variable
unsigned long currentTime = millis();
// compare the current time to the previous time an LED turned on
// if it is greater than your interval, run the if statement
if (currentTime - previousTime > interval) {
// save the current time as the last time you changed an LED
previousTime = currentTime;
// Turn the LED on
digitalWrite(led, HIGH);
// increment the led variable
// in 10 minutes the next LED will light up
led++;
if (led == 7) {
// the hour is up
}
}
// read the switch value
switchState = digitalRead(switchPin);
// if the switch has changed
if (switchState != prevSwitchState) {
// turn all the LEDs low
for (int x = 2; x < 8; x++) {
digitalWrite(x, LOW);
}
// reset the LED variable to the first one
led = 2;
//reset the timer
previousTime = currentTime;
}
// set the previous switch state to the current state
prevSwitchState = switchState;
}
No comments:
Post a Comment