Почему тормозит печать на oled экран то, что приходит на приемник 433Мгц?

7am
7am аватар
Offline
Зарегистрирован: 09.09.2015

Всем привет знатоки. Собрал простую схемку чтобы перехватывать 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();  
  }
}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А функция getReceivedValue() очищает буфер?

А то создается впечатление, что Вы, если в буфере обнаружен один символ, пытаетесь считать из него сразу два.

7am
7am аватар
Offline
Зарегистрирован: 09.09.2015

andriano пишет:

А функция getReceivedValue() очищает буфер?

А то создается впечатление, что Вы, если в буфере обнаружен один символ, пытаетесь считать из него сразу два.

нужно очищать?

b707
Offline
Зарегистрирован: 26.05.2017

7am пишет:

нужно очищать?

вы не поняли.

Функцию getReceivedValue() можно использовать только раз. Как только вы ее запустили в строке 24 - она берет значение из буфера и чистит его. Поэтому когда вы пытаетесь прочитать это значение вторично в строке 25 - там уже ничего нет.

Не печатайте данные непосредственно из функции getReceivedValue(), вместо этого сохраните их в переменную и печатайте сколько угодно раз.

 

7am
7am аватар
Offline
Зарегистрирован: 09.09.2015

b707 пишет:

7am пишет:

нужно очищать?

вы не поняли.

Функцию getReceivedValue() можно использовать только раз. Как только вы ее запустили в строке 24 - она берет значение из буфера и чистит его. Поэтому когда вы пытаетесь прочитать это значение вторично в строке 25 - там уже ничего нет.

Не печатайте данные непосредственно из функции getReceivedValue(), вместо этого сохраните их в переменную и печатайте сколько угодно раз.

Вы немножко не поняли. Когда я вывожу данные просто в монитор и нажимаю на кнопки пульта то данные сразу появляются и при нажатии разных кнопок меняются но стоит мне задействовать 25 строчку, нажимаю на пульте кнопку , вывожу пойманный код, потом уже приходится чуть ли не в плотную подносить пульт к приемнику чтобы поймать что то. Я к тому что может ли что то мешать? если это стандартный код rcswitch библиотеки, вывод данных от пультов, но стоит сделать вывод на экран и все, надо уже танцевать у приемника чтоб он словил. без использования строки кода 25, он сразу видит что я нажал на пульт даже если отошел на несколько метров. 

7am
7am аватар
Offline
Зарегистрирован: 09.09.2015

b707 пишет:

7am пишет:

нужно очищать?

вы не поняли.

Функцию getReceivedValue() можно использовать только раз. Как только вы ее запустили в строке 24 - она берет значение из буфера и чистит его. Поэтому когда вы пытаетесь прочитать это значение вторично в строке 25 - там уже ничего нет.

Не печатайте данные непосредственно из функции getReceivedValue(), вместо этого сохраните их в переменную и печатайте сколько угодно раз.


Вы немножко не поняли. Когда я вывожу данные просто в монитор и нажимаю на кнопки пульта то данные сразу появляются и при нажатии разных кнопок меняются но стоит мне задействовать 25 строчку, нажимаю на пульте кнопку , вывожу пойманный код, потом уже приходится чуть ли не в плотную подносить пульт к приемнику чтобы поймать что то. Я к тому что может ли что то мешать? если это стандартный код rcswitch библиотеки, вывод данных от пультов, но стоит сделать вывод на экран и все, надо уже танцевать у приемника чтоб он словил. без использования строки кода 25, он сразу видит что я нажал на пульт даже если отошел на несколько метров. 

 

b707
Offline
Зарегистрирован: 26.05.2017

7am пишет:

Вы немножко не поняли. Когда я вывожу данные просто в монитор и нажимаю на кнопки пульта то данные сразу появляются и при нажатии разных кнопок меняются но стоит мне задействовать 25 строчку, нажимаю на пульте кнопку , вывожу пойманный код, потом уже приходится чуть ли не в плотную подносить пульт к приемнику чтобы поймать что то. Я к тому что может ли что то мешать? если это стандартный код rcswitch библиотеки, вывод данных от пультов, но стоит сделать вывод на экран и все, надо уже танцевать у приемника чтоб он словил. без использования строки кода 25, он сразу видит что я нажал на пульт даже если отошел на несколько метров. 

давайте проверим, кто не понял. Закомментируйте вывод в Сериал (24 строчку), а вывод на экран (строку 25) оставьте.

 

 

7am
7am аватар
Offline
Зарегистрирован: 09.09.2015

b707 пишет:

7am пишет:

Вы немножко не поняли. Когда я вывожу данные просто в монитор и нажимаю на кнопки пульта то данные сразу появляются и при нажатии разных кнопок меняются но стоит мне задействовать 25 строчку, нажимаю на пульте кнопку , вывожу пойманный код, потом уже приходится чуть ли не в плотную подносить пульт к приемнику чтобы поймать что то. Я к тому что может ли что то мешать? если это стандартный код rcswitch библиотеки, вывод данных от пультов, но стоит сделать вывод на экран и все, надо уже танцевать у приемника чтоб он словил. без использования строки кода 25, он сразу видит что я нажал на пульт даже если отошел на несколько метров. 

давайте проверим, кто не понял. Закомментируйте вывод в Сериал (24 строчку), а вывод на экран (строку 25) оставьте.

сейчас

 

7am
7am аватар
Offline
Зарегистрирован: 09.09.2015

b707 пишет:

7am пишет:

Вы немножко не поняли. Когда я вывожу данные просто в монитор и нажимаю на кнопки пульта то данные сразу появляются и при нажатии разных кнопок меняются но стоит мне задействовать 25 строчку, нажимаю на пульте кнопку , вывожу пойманный код, потом уже приходится чуть ли не в плотную подносить пульт к приемнику чтобы поймать что то. Я к тому что может ли что то мешать? если это стандартный код rcswitch библиотеки, вывод данных от пультов, но стоит сделать вывод на экран и все, надо уже танцевать у приемника чтоб он словил. без использования строки кода 25, он сразу видит что я нажал на пульт даже если отошел на несколько метров. 

давайте проверим, кто не понял. Закомментируйте вывод в Сериал (24 строчку), а вывод на экран (строку 25) оставьте.

все так же. если отсавить 24 то в мониторе коды от пульта прям так и летят даже с расстояния
но стоит включить 25 даже убрав 24, я ловлю 1 нажатие сразу, дальше нужно уже в притык модуля нажимать на кнопки чтоб перехватывать значения и выводить на экран

 

 

b707
Offline
Зарегистрирован: 26.05.2017

а строчки 15 и 16 в сетапе, которые выводят подписи на экран - не мешают приему? Или когда вы принимаете в Сериал. вы их тоже убираете?

7am
7am аватар
Offline
Зарегистрирован: 09.09.2015

b707 пишет:

7am пишет:

Вы немножко не поняли. Когда я вывожу данные просто в монитор и нажимаю на кнопки пульта то данные сразу появляются и при нажатии разных кнопок меняются но стоит мне задействовать 25 строчку, нажимаю на пульте кнопку , вывожу пойманный код, потом уже приходится чуть ли не в плотную подносить пульт к приемнику чтобы поймать что то. Я к тому что может ли что то мешать? если это стандартный код rcswitch библиотеки, вывод данных от пультов, но стоит сделать вывод на экран и все, надо уже танцевать у приемника чтоб он словил. без использования строки кода 25, он сразу видит что я нажал на пульт даже если отошел на несколько метров. 

давайте проверим, кто не понял. Закомментируйте вывод в Сериал (24 строчку), а вывод на экран (строку 25) оставьте.

Видео

https://yadi.sk/d/Ug_Y5eXNDqFT3g

 

 

7am
7am аватар
Offline
Зарегистрирован: 09.09.2015

b707 пишет:

а строчки 15 и 16 в сетапе, которые выводят подписи на экран - не мешают приему? Или когда вы принимаете в Сериал. вы их тоже убираете?

убирал тоже но все равно 

b707
Offline
Зарегистрирован: 26.05.2017

а если луп записать так:

void loop() {
    if (mySwitch.available()) {
    unsigned long r_val = mySwitch.getReceivedValue();
    Serial.println( r_val );
    myOLED.print( r_val,0,4 );
    mySwitch.resetAvailable();  
  }
}

 

7am
7am аватар
Offline
Зарегистрирован: 09.09.2015

b707 пишет:

а если луп записать так:

void loop() {
    if (mySwitch.available()) {
    unsigned long r_val = mySwitch.getReceivedValue();
    Serial.println( r_val );
    myOLED.print( r_val,0,4 );
    mySwitch.resetAvailable();  
  }
}

 

тоже самое, пока пульт впритык к антене не поднести он будто не видит ничего. выше видео залил

b707
Offline
Зарегистрирован: 26.05.2017

7am пишет:

b707 пишет:

а строчки 15 и 16 в сетапе, которые выводят подписи на экран - не мешают приему? Или когда вы принимаете в Сериал. вы их тоже убираете?

убирал тоже но все равно 

Отвечайте, пожалуйста, четче.  Убирате или нет?

Вот Вы пишете, что когда 25 строка убрана,  "в Сериал коды прям так и летят". - В этом случае строки 15 и 16 есть или убраны?

7am
7am аватар
Offline
Зарегистрирован: 09.09.2015

b707 пишет:

7am пишет:

b707 пишет:

а строчки 15 и 16 в сетапе, которые выводят подписи на экран - не мешают приему? Или когда вы принимаете в Сериал. вы их тоже убираете?

убирал тоже но все равно 

Отвечайте, пожалуйста, четче.  Убирате или нет?

Вот Вы пишете, что когда 25 строка убрана,  "в Сериал коды прям так и летят". - В этом случае строки 15 и 16 есть или убраны?

15 и 16 есть, не убирал и в монитор так и летят коды, стоит 25 вернуть (даже если уберу или оставлю 24) происходит вот этот тупняк, первый код сразу ловит а дальше надо впритык к антене пульт нести

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Паузу поставьте между 25 и 26 строкой.

7am
7am аватар
Offline
Зарегистрирован: 09.09.2015

mykaida пишет:

Паузу поставьте между 25 и 26 строкой.

безрезультатно 

b707
Offline
Зарегистрирован: 26.05.2017

да... тогда не знаю.

Попробуйте поэкспериментировать с 25 строчкой сами - поменять положение на экране, выводить в нее не принятый код, а какие-то иные данные...

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Еще приемник подальше от экрана поместите. Первый прием у Вас идет с чистым экраном, а как на него выводится - приемник помирает. Возможно где-то фонит на близких частотах. Возможно в гармониках.

7am
7am аватар
Offline
Зарегистрирован: 09.09.2015

mykaida пишет:

Еще приемник подальше от экрана поместите. Первый прием у Вас идет с чистым экраном, а как на него выводится - приемник помирает. Возможно где-то фонит на близких частотах. Возможно в гармониках.

просто если все в один корпус потом собирать как далеко ставить то, я думал про гармоники но все равно как то странно получается стоит только вывести в экран прием с пультов, первый прием норм и все потом глохнет, надо к антене подносить даже при большом куске провода антены

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

7am пишет:

просто если все в один корпус потом собирать как далеко ставить то, я думал про гармоники но все равно как то странно получается стоит только вывести в экран прием с пультов, первый прием норм и все потом глохнет, надо к антене подносить даже при большом куске провода антены

Просто, если в один корпус собирать, то надо будет продумать вопрос защиты от электромагнитных помех. Про это книги написаны - читайте. А первая проверка - подальше приёмник от OLED экрана и экранированные провода.

7am
7am аватар
Offline
Зарегистрирован: 09.09.2015

mykaida пишет:

Еще приемник подальше от экрана поместите. Первый прием у Вас идет с чистым экраном, а как на него выводится - приемник помирает. Возможно где-то фонит на близких частотах. Возможно в гармониках.

эх.. отдалил но так и не помогло

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

7am пишет:

эх.. отдалил но так и не помогло

"Защита от электромагнитных помех." Надо выучить назубок. А иначе только мультивибратор можно сделать, да и то максимум на звуковой частоте.

7am
7am аватар
Offline
Зарегистрирован: 09.09.2015

mykaida пишет:

7am пишет:

эх.. отдалил но так и не помогло

"Защита от электромагнитных помех." Надо выучить назубок. А иначе только мультивибратор можно сделать, да и то максимум на звуковой частоте.

 

Короче говоря кажись что то было не то с arduino не пойму что правда) вроде рабочая, перенес все на другую и все норм работает)