في تدوينة سابقة تحدثت عن طريقة الإسبات و الإيقاض للمتحكم الأصغري عن طريق تغيير حالة المدخل خارجياً External Interrupt و هناك طريقة تندرج معها ألا و هي Serial UART WakeUp .

هذه الطريقة فعّالة جداً و تطبيقاتها كثيرة .
يمكن تفعيل ذلك من خلال البرمجة أو توصيل مقاومة بين ال Rx و المدخل D2 و عمل مقاطعة خارجية External Interrupt .
لن تحتاج سوى لبطاقة أردوينو و و توصيل مقاومة 1k بين D0 و D2 .
و البرنامج تجدونه هنا .
// Written by : Mohannad Rawashdeh // http://www.genotronex.com //this simple code to run arduino on sleep mode . #include <avr/sleep.h> #include <avr/power.h> int SwitchPin=2; // interrupt INT0; void SleepNow(void){ digitalWrite(13,LOW); // use one of those Sleep mode : /* SLEEP_MODE_IDLE SLEEP_MODE_ADC SLEEP_MODE_PWR_SAVE SLEEP_MODE_STANDBY SLEEP_MODE_PWR_DOWN Notice : use SLEEP_MODE_STANDBY with extenal Resonater only */ set_sleep_mode(SLEEP_MODE_PWR_SAVE); sleep_enable(); attachInterrupt(0,WakeUp,LOW); sleep_mode(); sleep_disable(); // The program will continue from here. // you can detach interrup here , uncomment this line detachInterrupt(0); } void WakeUp(void){ } //........................ void setup() { // put your setup code here, to run once: Serial.begin(9600); Serial.setTimeout(500); delay(100); pinMode(13,OUTPUT); pinMode(SwitchPin,INPUT); } void loop() { // put your main code here, to run repeatedly: } void serialEvent(){ digitalWrite(13,HIGH); char str[30]={0}; Serial.readBytesUntil('.',str,30);// read 30 byte or until str[i]='.' Serial.println("Wake up !") ; //Notice that the str doesn't save the first character . delay(50); for(int i=0;i<30;i++){ Serial.print(str[i]); delay(20); } Serial.println(" "); Serial.println("Sleep Now ! "); delay(50); SleepNow(); }
يقوم البرنامج بإيقاظ الأردوينومن حالة الإسبات عندما نرسل لها معلومات عن طريق السيريال فقط , يقوم بعرض النتيجة على الشاشة ثم يدخل في حالة الإسبات مجدداً .
ملاحظة : قد لا يقرأ البرنامج أول قيمة من المدخلات مثلاً اذا كتبنا Mohannad فإن النتيجة المعروضة تكون ohannad يمكن حل المشكلة بترك فراغ قبل كتابة المعلومات .
عند تلقي المعلومات يضيئ ال LED D13 و عند الدخول لوضع الإسبات يطفئ هذا الضوء .
0 التعليقات :
إرسال تعليق