البرمجة
بالبداية ستحتاج إلى تحميل مكتبة (VirtualWire) و من ثم تثبيتها على بيئة تطوير الاردوينو (Arduino IDE) يمكنك الاطلاع على الدرس الأول -تنصيب برنامج اردوينو (IDE) على جهازك من سلسة تعلم الاردوينو لمعرفة كيف يتم تثبيت المكتبات
برمجة المرسل
#include <VirtualWire.h> #define size 1 int pot = A0; byte TX_buffer[size]={0}; byte i; void setup() { vw_set_tx_pin(3); // pin vw_setup(2000); // bps for(i=0;i<size;i++) { TX_buffer[i]=i; } } void loop() { int val = map(analogRead(pot),0,1024,0,255); TX_buffer[0] = val; vw_send(TX_buffer, size); vw_wait_tx(); delay(10); }
برمجة المستقبل
#include <VirtualWire.h> byte message[VW_MAX_MESSAGE_LEN]; // a buffer to store the incoming messages byte messageLength = VW_MAX_MESSAGE_LEN; // the size of the message int received_number = 0; int LED = 5; void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); Serial.println("Ready..."); vw_set_rx_pin(3); // pin vw_setup(2000); // bps vw_rx_start(); } void loop() { if (vw_get_message(message, &messageLength)) // non-blocking { Serial.print("Potentiometer: "); for (int i = 0; i < messageLength; i++) { //Serial.print(message[i]); received_number = message[i]; } Serial.println(received_number); analogWrite(LED, received_number); } }
شرح الكود البرمجي
أولا المرسل
في البداية سنقوم باستدعاء مكتبة (VirtualWire) والتي تتضمن دوال تساعدنا على برمجة الوحدة، ونعرف منفذ المقاومة المتغيرة
#include <VirtualWire.h> #define size 1 int pot = A0; byte TX_buffer[size]={0}; byte i;
في دالة void setup() نهيئ منفذ الارسال
void setup() { vw_set_tx_pin(3); // pin vw_setup(2000); // bps for(i=0;i<size;i++) { TX_buffer[i]=i; } }
في دالة void loop() نأخذ قراءة من المقاومة المتغيرة ضمن مدى من 0 إلى 255 والتي تمثل شدة الإضاءة المطلوبة، و نرسل الإشارة
void loop() { int val = map(analogRead(pot),0,1024,0,255); TX_buffer[0] = val; vw_send(TX_buffer, size); vw_wait_tx(); delay(10); }
ثانيا المستقبل
نقوم باستدعاء مكتبة VirtualWire وتعريف الإشارة المستقبلة وحجم الرسالة، وتعريف منفذ الثنائي المشع للضوء (LED)
#include <VirtualWire.h> byte message[VW_MAX_MESSAGE_LEN]; byte messageLength = VW_MAX_MESSAGE_LEN; int received_number = 0; int LED = 5;
في دالة void setup() نقوم بتهيئة منفذ الاتصال التسلسلي حتى نتمكن من طباعة القيم المستقبلة على شاشة الاتصال وكمت سيتم تعريف منافذ الخرج
void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); Serial.println("Ready..."); vw_set_rx_pin(3); // pin vw_setup(2000); // bps vw_rx_start(); }
في دالة void loop() نستقبل الرسالة و نعكس قيمتها ليتم تحديد شدة اضاءة الثنائي المشع للضوء (LED)
void loop() { if (vw_get_message(message, &messageLength)) // non-blocking { Serial.print("Potentiometer: "); for (int i = 0; i < messageLength; i++) { //Serial.print(message[i]); received_number = message[i]; } Serial.println(received_number); analogWrite(LED, received_number); } }