Первый раз всегда стесняется, радиомодуль на 433 мГц.

IVAN222
Offline
Зарегистрирован: 19.04.2017

Всем привет. Делаю включение электро котла по радио каналу на 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); // Пауза                 
            }   
  } 
}

 

IVAN222
Offline
Зарегистрирован: 19.04.2017

Отправленные команды               Принятые команды

          1                                        -

          1                                         X

           1                                         Z

            1                                        Z

            1                                        Z

             0                                       -

             0                                        A

             0                                        S

              0                                       S

              0                                       S

        

IVAN222
Offline
Зарегистрирован: 19.04.2017

Опять Всем привет. Поставил задержку по времени 50 мил. сек. между строками 27-28 и 46-47 в 1 коде. Сейчас работает как надо.

СПАСИБО ЗА СОВМЕСТНУЮ РАБОТУ.