Первый раз всегда стесняется, радиомодуль на 433 мГц.
- Войдите на сайт для отправки комментариев
Всем привет. Делаю включение электро котла по радио каналу на 433 мГц с обратной связью. Компьютер+ардуино уно+приемник и передатчик радиомодуля 433 мГц это будет 1 код. Ардуино+приемник и передатчик+ реле это 2 код. Принцип работы: при подачи с компьютера 1 (включить котел), 1 ард. выдает (q) на радио модуль. 2 ардуино принимает через приемник радио модуля, если котел выключен , то включает его и отправляет (X) через передатчик радио модуля. 1 ардуино принимает (Х) и отправляет в КОМ порт (х) (включаю котел). Если котел был включен и на 2 ардуино пришло (q), 2 ардуино отправит (Z), 1 ардуино примет(Z) и выдаст в КОМ порт (Z) (котел уже включен). Тоже самое произойдет с отключением котла только сигналы будут другие.
Проблема возникает при первой подачи сигнала с компьютера (1) (включить котел), реле включается, а вот в КОМ порт обратный сигнал не приходит (СТЕСНЯЕТСЯ ЧТО ЛИ), опять отправляю (1) приходит в КОМ порт (Z), опять отправляю (1) поиходит (Z) , теперь отправлю (0) (отключить котел) в ком порт не чего не приходит реле отключается, отправляю опять (0) в ком порт приходит (А), опять (0) приходит (S), если опять отправить (0) придет (S) и дальше все будет нормально приходить (S) пока буду отправлять (0). Но как стоит мне поменять команду с (0) на (1) или с (1) на (0) первый раз идет пропуск принятия сигнала в КОМ порт. Почему не пойму. В интернете везде только 1 ардуино передатчик, 2 ардуино приемник, а что бы приемопередатчики одна и другая не где не нашел. В чем проблема? Что я делаю не так?
Код 1
#include <VirtualWire.h> byte message[VW_MAX_MESSAGE_LEN]; // Буфер для хранения принимаемых данных byte messageLength = VW_MAX_MESSAGE_LEN; // Размер сообщения const int led_pin = 13; // Пин светодиода const int receiver_pin = 9; // Пин подключения приемника const int transmit_pin = 10; // Пин подключения передатчика int val = 0; void setup() { vw_set_rx_pin(receiver_pin); // Пин подключения приемника vw_set_tx_pin(transmit_pin); // Пин подключения передатчика vw_setup(2000); // Скорость передачи данных (бит в секунду) vw_rx_start(); // Активация применика pinMode(8, OUTPUT); //инициируем как выход Serial.begin(115200); } void loop() { if(Serial.available() > 0) { val = Serial.read(); { if (val=='1'){ // const char *msg = "q"; // Передаваемое сообщение digitalWrite(led_pin, HIGH); // Зажигаем светодиод в начале передачи vw_send((uint8_t *)msg, strlen(msg)); // Отправка сообщения vw_wait_tx(); // Ожидаем окончания отправки сообщения digitalWrite(led_pin, LOW); // Гасим светодиод в конце передачи if (vw_get_message(message, &messageLength)){ // Если есть данные.. if(message[0]=='X'){ Serial.println("x"); // delay(50); // Пауза } if(message[0]=='Z'){ Serial.println("Z"); // delay(50); // Пауза } } } if (val=='0'){ // const char *msg = "w"; // Передаваемое сообщение digitalWrite(led_pin, HIGH); // Зажигаем светодиод в начале передачи vw_send((uint8_t *)msg, strlen(msg)); // Отправка сообщения vw_wait_tx(); // Ожидаем окончания отправки сообщения digitalWrite(led_pin, LOW); // Гасим светодиод в конце передачи if (vw_get_message(message, &messageLength)){ // Если есть данные.. if(message[0]=='A'){ Serial.println("A"); // delay(50); // Пауза } if(message[0]=='S'){ Serial.println("S"); // delay(50); // Пауза } } } } Serial.flush(); // Очищаем буфер } }
Код 2
#include <VirtualWire.h> byte message[VW_MAX_MESSAGE_LEN]; // Буфер для хранения принимаемых данных byte messageLength = VW_MAX_MESSAGE_LEN; // Размер сообщения const int led_pin = 13; // Пин светодиода const int rele_pin = 8; // Пин реле const int receiver_pin = 9; // Пин подключения приемника const int transmit_pin = 10; // Пин подключения передатчика void setup() { vw_set_rx_pin(receiver_pin); // Пин подключения приемника vw_set_tx_pin(transmit_pin); // Пин подключения передатчика vw_setup(2000); // Скорость передачи данных (бит в секунду) vw_rx_start(); // Активация применика pinMode(8, OUTPUT); //инициируем как выход } void loop(){ if (vw_get_message(message, &messageLength)){ // Если есть данные.. if(message[0]=='q') if(digitalRead(8)==LOW) { const char *msg = "X"; // Передаваемое сообщение digitalWrite(led_pin, HIGH); // Зажигаем светодиод в начале передачи digitalWrite(rele_pin, HIGH); // включаем реле vw_send((uint8_t *)msg, strlen(msg)); // Отправка сообщения vw_wait_tx(); // Ожидаем окончания отправки сообщения digitalWrite(led_pin, LOW); // Гасим светодиод в конце передачи //delay(50); // Пауза } else { const char *msg = "Z"; // Передаваемое сообщение digitalWrite(led_pin, HIGH); // Зажигаем светодиод в начале передачи vw_send((uint8_t *)msg, strlen(msg)); // Отправка сообщения vw_wait_tx(); // Ожидаем окончания отправки сообщения digitalWrite(led_pin, LOW); // Гасим светодиод в конце передачи //delay(50); // Пауза } if(message[0]=='w') if(digitalRead(8)==HIGH) { const char *msg = "A"; // Передаваемое сообщение digitalWrite(led_pin, HIGH); // Зажигаем светодиод в начале передачи digitalWrite(rele_pin, LOW); // выключаем реле vw_send((uint8_t *)msg, strlen(msg)); // Отправка сообщения vw_wait_tx(); // Ожидаем окончания отправки сообщения digitalWrite(led_pin, LOW); // Гасим светодиод в конце передачи //delay(50); // Пауза } else { const char *msg = "S"; // Передаваемое сообщение digitalWrite(led_pin, HIGH); // Зажигаем светодиод в начале передачи vw_send((uint8_t *)msg, strlen(msg)); // Отправка сообщения vw_wait_tx(); // Ожидаем окончания отправки сообщения digitalWrite(led_pin, LOW); // Гасим светодиод в конце передачи //delay(50); // Пауза } } }
Отправленные команды Принятые команды
1 -
1 X
1 Z
1 Z
1 Z
0 -
0 A
0 S
0 S
0 S
Опять Всем привет. Поставил задержку по времени 50 мил. сек. между строками 27-28 и 46-47 в 1 коде. Сейчас работает как надо.
СПАСИБО ЗА СОВМЕСТНУЮ РАБОТУ.