Почему тормозит печать на oled экран то, что приходит на приемник 433Мгц?
- Войдите на сайт для отправки комментариев
Пнд, 18/01/2021 - 16:17
Всем привет знатоки. Собрал простую схемку чтобы перехватывать 433 сигналы и выводить их на oled. Но вот проблема, почему то когда я не указываю в коде myOLED.print( mySwitch.getReceivedValue()); В мониторе порта нажатия на кнопки пульта 433мгц сразу видны, сразу отображаются коды кнопок, а стоит добавить myOLED.print( mySwitch.getReceivedValue()); то один раз стабильно получает и выводит на экран а дальше надо чуть ли не в притык к антене нажимать кнопки на пульте чтобы поймать что то.
вот код
#include <Adafruit_GFX.h>
#include <RCSwitch.h>
#include <iarduino_OLED_txt.h>
iarduino_OLED_txt myOLED(0x3C); //
extern uint8_t MediumFontRus[];
RCSwitch mySwitch = RCSwitch();
void setup() {
Serial.begin(9600);
myOLED.begin();
myOLED.setFont(MediumFontRus);
myOLED.setCoding(TXT_UTF8);
myOLED.setCursor(25,4);
myOLED.print( "СКАНЕР",OLED_C, 2);
myOLED.print( "433Мгц",OLED_C, 5);
delay(2000);
myOLED.clrScr();
mySwitch.enableReceive(0); // Receiver on interrupt 0 => that is pin #2
}
void loop() {
if (mySwitch.available()) {
Serial.println( mySwitch.getReceivedValue() );
myOLED.print( mySwitch.getReceivedValue(),0,4 );
mySwitch.resetAvailable();
}
}
А функция getReceivedValue() очищает буфер?
А то создается впечатление, что Вы, если в буфере обнаружен один символ, пытаетесь считать из него сразу два.
А функция getReceivedValue() очищает буфер?
А то создается впечатление, что Вы, если в буфере обнаружен один символ, пытаетесь считать из него сразу два.
нужно очищать?
нужно очищать?
вы не поняли.
Функцию getReceivedValue() можно использовать только раз. Как только вы ее запустили в строке 24 - она берет значение из буфера и чистит его. Поэтому когда вы пытаетесь прочитать это значение вторично в строке 25 - там уже ничего нет.
Не печатайте данные непосредственно из функции getReceivedValue(), вместо этого сохраните их в переменную и печатайте сколько угодно раз.
нужно очищать?
вы не поняли.
Функцию getReceivedValue() можно использовать только раз. Как только вы ее запустили в строке 24 - она берет значение из буфера и чистит его. Поэтому когда вы пытаетесь прочитать это значение вторично в строке 25 - там уже ничего нет.
Не печатайте данные непосредственно из функции getReceivedValue(), вместо этого сохраните их в переменную и печатайте сколько угодно раз.
Вы немножко не поняли. Когда я вывожу данные просто в монитор и нажимаю на кнопки пульта то данные сразу появляются и при нажатии разных кнопок меняются но стоит мне задействовать 25 строчку, нажимаю на пульте кнопку , вывожу пойманный код, потом уже приходится чуть ли не в плотную подносить пульт к приемнику чтобы поймать что то. Я к тому что может ли что то мешать? если это стандартный код rcswitch библиотеки, вывод данных от пультов, но стоит сделать вывод на экран и все, надо уже танцевать у приемника чтоб он словил. без использования строки кода 25, он сразу видит что я нажал на пульт даже если отошел на несколько метров.
нужно очищать?
вы не поняли.
Функцию getReceivedValue() можно использовать только раз. Как только вы ее запустили в строке 24 - она берет значение из буфера и чистит его. Поэтому когда вы пытаетесь прочитать это значение вторично в строке 25 - там уже ничего нет.
Не печатайте данные непосредственно из функции getReceivedValue(), вместо этого сохраните их в переменную и печатайте сколько угодно раз.
Вы немножко не поняли. Когда я вывожу данные просто в монитор и нажимаю на кнопки пульта то данные сразу появляются и при нажатии разных кнопок меняются но стоит мне задействовать 25 строчку, нажимаю на пульте кнопку , вывожу пойманный код, потом уже приходится чуть ли не в плотную подносить пульт к приемнику чтобы поймать что то. Я к тому что может ли что то мешать? если это стандартный код rcswitch библиотеки, вывод данных от пультов, но стоит сделать вывод на экран и все, надо уже танцевать у приемника чтоб он словил. без использования строки кода 25, он сразу видит что я нажал на пульт даже если отошел на несколько метров.
Вы немножко не поняли. Когда я вывожу данные просто в монитор и нажимаю на кнопки пульта то данные сразу появляются и при нажатии разных кнопок меняются но стоит мне задействовать 25 строчку, нажимаю на пульте кнопку , вывожу пойманный код, потом уже приходится чуть ли не в плотную подносить пульт к приемнику чтобы поймать что то. Я к тому что может ли что то мешать? если это стандартный код rcswitch библиотеки, вывод данных от пультов, но стоит сделать вывод на экран и все, надо уже танцевать у приемника чтоб он словил. без использования строки кода 25, он сразу видит что я нажал на пульт даже если отошел на несколько метров.
давайте проверим, кто не понял. Закомментируйте вывод в Сериал (24 строчку), а вывод на экран (строку 25) оставьте.
Вы немножко не поняли. Когда я вывожу данные просто в монитор и нажимаю на кнопки пульта то данные сразу появляются и при нажатии разных кнопок меняются но стоит мне задействовать 25 строчку, нажимаю на пульте кнопку , вывожу пойманный код, потом уже приходится чуть ли не в плотную подносить пульт к приемнику чтобы поймать что то. Я к тому что может ли что то мешать? если это стандартный код rcswitch библиотеки, вывод данных от пультов, но стоит сделать вывод на экран и все, надо уже танцевать у приемника чтоб он словил. без использования строки кода 25, он сразу видит что я нажал на пульт даже если отошел на несколько метров.
давайте проверим, кто не понял. Закомментируйте вывод в Сериал (24 строчку), а вывод на экран (строку 25) оставьте.
сейчас
Вы немножко не поняли. Когда я вывожу данные просто в монитор и нажимаю на кнопки пульта то данные сразу появляются и при нажатии разных кнопок меняются но стоит мне задействовать 25 строчку, нажимаю на пульте кнопку , вывожу пойманный код, потом уже приходится чуть ли не в плотную подносить пульт к приемнику чтобы поймать что то. Я к тому что может ли что то мешать? если это стандартный код rcswitch библиотеки, вывод данных от пультов, но стоит сделать вывод на экран и все, надо уже танцевать у приемника чтоб он словил. без использования строки кода 25, он сразу видит что я нажал на пульт даже если отошел на несколько метров.
давайте проверим, кто не понял. Закомментируйте вывод в Сериал (24 строчку), а вывод на экран (строку 25) оставьте.
все так же. если отсавить 24 то в мониторе коды от пульта прям так и летят даже с расстояния
но стоит включить 25 даже убрав 24, я ловлю 1 нажатие сразу, дальше нужно уже в притык модуля нажимать на кнопки чтоб перехватывать значения и выводить на экран
а строчки 15 и 16 в сетапе, которые выводят подписи на экран - не мешают приему? Или когда вы принимаете в Сериал. вы их тоже убираете?
Вы немножко не поняли. Когда я вывожу данные просто в монитор и нажимаю на кнопки пульта то данные сразу появляются и при нажатии разных кнопок меняются но стоит мне задействовать 25 строчку, нажимаю на пульте кнопку , вывожу пойманный код, потом уже приходится чуть ли не в плотную подносить пульт к приемнику чтобы поймать что то. Я к тому что может ли что то мешать? если это стандартный код rcswitch библиотеки, вывод данных от пультов, но стоит сделать вывод на экран и все, надо уже танцевать у приемника чтоб он словил. без использования строки кода 25, он сразу видит что я нажал на пульт даже если отошел на несколько метров.
давайте проверим, кто не понял. Закомментируйте вывод в Сериал (24 строчку), а вывод на экран (строку 25) оставьте.
Видео
https://yadi.sk/d/Ug_Y5eXNDqFT3g
а строчки 15 и 16 в сетапе, которые выводят подписи на экран - не мешают приему? Или когда вы принимаете в Сериал. вы их тоже убираете?
убирал тоже но все равно
а если луп записать так:
void loop() { if (mySwitch.available()) { unsigned long r_val = mySwitch.getReceivedValue(); Serial.println( r_val ); myOLED.print( r_val,0,4 ); mySwitch.resetAvailable(); } }а если луп записать так:
void loop() { if (mySwitch.available()) { unsigned long r_val = mySwitch.getReceivedValue(); Serial.println( r_val ); myOLED.print( r_val,0,4 ); mySwitch.resetAvailable(); } }тоже самое, пока пульт впритык к антене не поднести он будто не видит ничего. выше видео залил
а строчки 15 и 16 в сетапе, которые выводят подписи на экран - не мешают приему? Или когда вы принимаете в Сериал. вы их тоже убираете?
убирал тоже но все равно
Отвечайте, пожалуйста, четче. Убирате или нет?
Вот Вы пишете, что когда 25 строка убрана, "в Сериал коды прям так и летят". - В этом случае строки 15 и 16 есть или убраны?
а строчки 15 и 16 в сетапе, которые выводят подписи на экран - не мешают приему? Или когда вы принимаете в Сериал. вы их тоже убираете?
убирал тоже но все равно
Отвечайте, пожалуйста, четче. Убирате или нет?
Вот Вы пишете, что когда 25 строка убрана, "в Сериал коды прям так и летят". - В этом случае строки 15 и 16 есть или убраны?
15 и 16 есть, не убирал и в монитор так и летят коды, стоит 25 вернуть (даже если уберу или оставлю 24) происходит вот этот тупняк, первый код сразу ловит а дальше надо впритык к антене пульт нести
Паузу поставьте между 25 и 26 строкой.
Паузу поставьте между 25 и 26 строкой.
безрезультатно
да... тогда не знаю.
Попробуйте поэкспериментировать с 25 строчкой сами - поменять положение на экране, выводить в нее не принятый код, а какие-то иные данные...
Еще приемник подальше от экрана поместите. Первый прием у Вас идет с чистым экраном, а как на него выводится - приемник помирает. Возможно где-то фонит на близких частотах. Возможно в гармониках.
Еще приемник подальше от экрана поместите. Первый прием у Вас идет с чистым экраном, а как на него выводится - приемник помирает. Возможно где-то фонит на близких частотах. Возможно в гармониках.
просто если все в один корпус потом собирать как далеко ставить то, я думал про гармоники но все равно как то странно получается стоит только вывести в экран прием с пультов, первый прием норм и все потом глохнет, надо к антене подносить даже при большом куске провода антены
просто если все в один корпус потом собирать как далеко ставить то, я думал про гармоники но все равно как то странно получается стоит только вывести в экран прием с пультов, первый прием норм и все потом глохнет, надо к антене подносить даже при большом куске провода антены
Просто, если в один корпус собирать, то надо будет продумать вопрос защиты от электромагнитных помех. Про это книги написаны - читайте. А первая проверка - подальше приёмник от OLED экрана и экранированные провода.
Еще приемник подальше от экрана поместите. Первый прием у Вас идет с чистым экраном, а как на него выводится - приемник помирает. Возможно где-то фонит на близких частотах. Возможно в гармониках.
эх.. отдалил но так и не помогло
эх.. отдалил но так и не помогло
"Защита от электромагнитных помех." Надо выучить назубок. А иначе только мультивибратор можно сделать, да и то максимум на звуковой частоте.
эх.. отдалил но так и не помогло
"Защита от электромагнитных помех." Надо выучить назубок. А иначе только мультивибратор можно сделать, да и то максимум на звуковой частоте.
Короче говоря кажись что то было не то с arduino не пойму что правда) вроде рабочая, перенес все на другую и все норм работает)