• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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
 
Сверху Снизу