Первый раз всегда стесняется, радиомодуль на 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 коде. Сейчас работает как надо.
СПАСИБО ЗА СОВМЕСТНУЮ РАБОТУ.