• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Приемники 315 и 433 МГц и ESP8266. Ошибка сообщения в Serial

saharesp

New member
Написал скетч для получения сигнала с пультов частотой 315 и 433 МГц. Собрал схему с двумя отдельными модулями (приемниками) 315 и 433 МГц. Все работает. Но как говорится, есть нюанс. Я хочу получить в монитор порта Arduino IDE сообщение, с какого пина приходит сигнал. А в результате я получаю сообщение, что сигнал получаю с одного и того же пина, на который идет сигнал с модуля с частотой 433 МГц. При этом код сигнала с пульта приходит правильный и без проблем. Отключил модуль 433 МГц, сообщение все равно приходит, что получен сигнал с пина, с которого должен приходить сигнал от модуля. Получается, что ошибка в коде. Прошу помочь разобраться в чем причина. Код ниже.
/*
Example for receiving
https://github.com/sui77/rc-switch/
If you want to visualize a telegram copy the raw data and
paste it into http://test.sui.li/oszi/
*/

#include <RCSwitch.h>

RCSwitch mySwitch_1 = RCSwitch();
RCSwitch mySwitch_2 = RCSwitch();

void setup() {
Serial.begin(115200);
mySwitch_1.enableReceive(15); // Receiver 433
mySwitch_2.enableReceive(13); // Receiver 315
Serial.println ("Подключились!");
}

void loop() {
if (mySwitch_1.available()) {
Serial.println ("Переключил пин № 15");
output(mySwitch_1.getReceivedValue(), mySwitch_1.getReceivedBitlength(), mySwitch_1.getReceivedDelay(), mySwitch_1.getReceivedRawdata(),mySwitch_1.getReceivedProtocol());
mySwitch_1.resetAvailable();
}
else if (mySwitch_2.available()) {
Serial.println ("Переключил пин № 13");
output(mySwitch_2.getReceivedValue(), mySwitch_2.getReceivedBitlength(), mySwitch_2.getReceivedDelay(), mySwitch_2.getReceivedRawdata(),mySwitch_2.getReceivedProtocol());
mySwitch_2.resetAvailable();
}
}
 

aZholtikov

Active member
Могу предложить такой вариант выяснения возможной причины.
Во время работы программы (при отсоединенном модуле 433) соедините ножку 15 с GND.
 

aZholtikov

Active member
Как второй вариант - замените else if (mySwitch_2.available()) на if (mySwitch_2.available()).
 

saharesp

New member
aZholtikov
Как второй вариант - замените else if (mySwitch_2.available()) на if (mySwitch_2.available()).
Я первоначально так и сделал: хотел написать else if, а написал if. Компилятор выдал ошибку.
 

saharesp

New member
@aZholtikov
Могу предложить такой вариант выяснения возможной причины.
Во время работы программы (при отсоединенном модуле 433) соедините ножку 15 с GND.
Я хочу чтобы оба модуля работали одновременно, а serial мне покажет, какой именно модуль отработал. Если я соединю на GND, я что определю? То что модуль не рабочий?
 

saharesp

New member
@aZholtikov, попробую стянуть сопротивлением ножку 15. Когда определюсь с номиналом сопротивлением. Потом доложу результат.
 

aZholtikov

Active member
Постараюсь пояснить свои мысли (возможно ошибаюсь)...
Прерывание на ножках (13 и 15) срабатывает при изменении уровня с 1 на 0 и обратно. Ножка, отключенная от чего-либо находится в "подвешенном" состоянии и прерывание постоянно и хаотично срабатывает (чего не происходит когда она подключена). В конструкции if - else if всегда в данном случае будет срабатывать if. Чтобы ее "изолировать" (при отключенном 433) нужно ее заземлить через резистор 10К. И тогда сработает else if.
В любом случае 2 if должны работать. Это аксиома.
 

saharesp

New member
aZholtikov
Этого не может быть. Какая ошибка?
Действительно работает. Но проблема такая же: пин № 15. Иногда выскакивает: пин 13. Но очень редко.315-433.png
 

saharesp

New member
Разобрался в чем проблема. Неправильно было задано условие: if. Сейчас, опуская подробности, выглядит так: if (mySwitch_1.available() & signalState_433 == 1)
Если кого-то интересуют подробности, напишите. Пока при памяти, отвечу.
315-433(new).png
 

saharesp

New member
CodeNameHawk, возможно, что с этим примером проще решить мою задачу. Попробую проверить. Переменная signalState_433 получает изменение состояние с LOW на HIGH с пина, на который приходит сигнал с модуля приемника 433 МГц. А приемника - два.
Использовал как основу пример: https://github.com/sui77/rc-switch/tree/master/examples/ReceiveDemo_Advanced
 
Сверху Снизу