Обновление экрана при изменении

orenius
Offline
Зарегистрирован: 29.07.2017

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

#include <InvertedTM1638.h>
#include <TM1638.h>
#include <TM1638QYF.h>
#include <TM1640.h>
#include <TM16XX.h>
#include <TM16XXFonts.h>
#include <RemoteReceiver.h>

TM1638 module(8, 9, 10);//8-DIO/9-CLK/10-STB подключам пины
/*
* Demo for RF remote switch receiver.
* For details, see RemoteReceiver.h!
*
* This sketch shows the received signals on the serial port.
* Connect the receiver to digital pin 2.
*/



void setup() {
  Serial.begin(115200);

  
  //Initialize receiver on interrupt 0 (= digital pin 2), calls the callback "showCode"
  //after 3 identical codes have been received in a row. (thus, keep the button pressed
  //for a moment)
  //
  //See the interrupt-parameter of attachInterrupt for possible values (and pins)
  //to connect the receiver.
  RemoteReceiver::init(0, 3, showCode);
}

void loop() { 

}

//Callback function is called only when a valid code is received.
void showCode(unsigned long receivedCode, unsigned int period) {
  //Note: interrupts are disabled. You can re-enable them if needed.

   module.setDisplayToDecNumber( receivedCode,0,false);//выводим на табло значение кнопки
 static long receivedCode1;
    if  ((receivedCode) != receivedCode1);

{ 
receivedCode1=receivedCode;
module.clearDisplay();
  
}

  //Print the received code.
  Serial.print("Code: ");
  Serial.print(receivedCode);
  Serial.print(", period duration: ");
  Serial.print(period);
  Serial.println("us.");


}


 

 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

в этом случае? if  ((receivedCode) != receivedCode1);

нафиг там точка с запятой?

orenius
Offline
Зарегистрирован: 29.07.2017

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

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

я вообще не понимаю, как у тебя вообще что-то работает

33 void loop() {
34  
35 }

 

orenius
Offline
Зарегистрирован: 29.07.2017

Подскажите пожалуйста, что не так в коде, как его переписать, заранее благодарен

nik182
Offline
Зарегистрирован: 04.05.2015

Ошибки в строках 43 лишняя ;,49 нужно перенести на 58.

orenius
Offline
Зарегистрирован: 29.07.2017
 Проблема сохранилась, выдает при первом сигнале(моргает и пропадает) потом при повторном нажатии-скетч замыкается и значение выдает на экран, но новые сигналы он уже не обрабатывает
#include <InvertedTM1638.h>
#include <TM1638.h>
#include <TM1638QYF.h>
#include <TM1640.h>
#include <TM16XX.h>
#include <TM16XXFonts.h>
#include <RemoteReceiver.h>

TM1638 module(8, 9, 10);//8-DIO/9-CLK/10-STB подключам пины

int receivedCode11;

void setup() {
  Serial.begin(115200);

  
  //Initialize receiver on interrupt 0 (= digital pin 2), calls the callback "showCode"
  //after 3 identical codes have been received in a row. (thus, keep the button pressed
  //for a moment)
  //
  //See the interrupt-parameter of attachInterrupt for possible values (and pins)
  //to connect the receiver.
  RemoteReceiver::init(0, 3, showCode);
}

void loop() { 
  

}


void showCode(unsigned long receivedCode, unsigned int period) {
  //Note: interrupts are disabled. You can re-enable them if needed.

   module.setDisplayToDecNumber( receivedCode,0,false);//выводим на табло значение кнопки
 static long receivedCode1;
    if  ((receivedCode) != receivedCode1)

{ 
receivedCode1=receivedCode;
module.clearDisplay();
  


  //Print the received code.
  Serial.print("Code: ");
  Serial.print(receivedCode);
  Serial.print(", period duration: ");
  Serial.print(period);
  Serial.println("us.");

}
}


 

 

 
orenius
Offline
Зарегистрирован: 29.07.2017

как возможно мой скетч подружить с луп? ругается,что два раза void

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Что, прямо так и говорит: "два раза void"? Круто!

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

orenius пишет:

как возможно мой скетч подружить с луп? ругается,что два раза void

А надо? По-моему, в Вашем коде луп вообще не нужен.

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

И почему функция showcode описана с параметрами, а вызывается без?

orenius
Offline
Зарегистрирован: 29.07.2017

купил экран i2c, залил скетч из ролика на ютуб https://www.youtube.com/watch?v=TGK3xGisKRI . Не могу понять в чем проблема, помогите пожалуйста


#include <Wire.h>
#include <RemoteReceiver.h> 
#include <LiquidCrystal_I2C.h> 
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup() 
{
RemoteReceiver::init(0, 3, showCode);// Connect the receiver to digital pin 2.-пин 2.это вход для Радиоприёмника
}
void loop() 
{
}
void showCode(unsigned long receivedCode, unsigned int period) 
{
int value = receivedCode;
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Code: ");
lcd.print(receivedCode);
lcd.setCursor(0, 1);
lcd.print("Period: ");
lcd.print(period);
lcd.println("us.  ");
}

 

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

orenius пишет:

Не могу понять в чем проблема, помогите пожалуйста

Ну мы тоже не можем понять, в чем проблема - вы же даже не пишете, что не так.

Хотя бы напишите, что не работает

orenius
Offline
Зарегистрирован: 29.07.2017

Последний вариант скетча, не выводит данных на i2c монитор, никаких

vvadim
Offline
Зарегистрирован: 23.05.2012

ПОСМОТРИТЕ ПРИМЕРЫ ИЗ БИБЛИОТЕКИ ДЛЯ ДИСПЛЕЯ

 

orenius
Offline
Зарегистрирован: 29.07.2017

Посмотрел, вывести не проблема на дисплей значение любое, дисплей работает с пресловутым "Здравствуй Мир", нет понимания как вывести значение с ремоутРесивера на экран

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

orenius пишет:

Посмотрел, вывести не проблема на дисплей значение любое, дисплей работает с пресловутым "Здравствуй Мир", нет понимания как вывести значение с ремоутРесивера на экран

По-моему, проблема не в ресивере. Даже если он правильно принимает код, вряд ли ваша программа выведет его на экран. Повторю мой второй вопрос из сообщения #9 - "Почему функция showcode() описана с параметрами, а вызывается без них?" - таким образом, непонятно -  когда и как присваивается значение переменной ReceivedCode, которую вы выводите на экран?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

"Почему функция showcode() описана с параметрами, а вызывается без них?" 

А где Вы видите, что она вызывается? В строке "RemoteReceiver::init(0, 3, showCode);" просто передаётся её адрес, а вызывается она откуда-то из недр библиотеки.

-----------

ТС помочь невозможно, т.к. человек в принципе не понимает что написано в коде, который он где-то скачал и запустил. Вообще ни строчки. Поэтому вариантнов негусто: написать за него полностью или забить. После фразы ТС

orenius пишет:

как возможно мой скетч подружить с луп? ругается,что два раза void

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

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

ЕвгенийП пишет:

ТС помочь невозможно, т.к. человек в принципе не понимает что написано в коде,

да черт с ним :)

Мне уже самому интересно, почему не работает. Посмотрел исходники библиотеки - все вроде верно вызывается. То есть код в принципе правильный (тот, что приведен). Хотя. конечно, при таком уровне знаний у ТС невозможно предсказать. что он не так собрал, правильно ли посылает сигнал и тд - вариантов может  быть тыща...

orenius
Offline
Зарегистрирован: 29.07.2017

Сам прибор собран верно, так как система работоспособна по отдельности, работает монитор со скетчем "привет мир" , так же работает ремоут рествер в мониторе порта, когда все отдельно, значит физически все собрано верно, при этом, посылаю я сигнал физически с пульта умного дома

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

orenius пишет:

Сам прибор собран верно, так как система работоспособна по отдельности, работает монитор со скетчем "привет мир" , так же работает ремоут рествер в мониторе порта, когда все отдельно, значит физически все собрано верно, при этом, посылаю я сигнал физически с пульта умного дома

скетч из поста #6 выдает в монитор порта правильный код передатчика?

orenius
Offline
Зарегистрирован: 29.07.2017

Могу точно сказать, что одинаковый, есть пульт с 4 кнопками, пока только он, выдает стабильный сигнал(незначительно отличающиеся 4 позиции) 

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

Хорошо, продолжим. Скетч из сообщения №10 что-нибудь на экран выводит? Хотя бы слова "Code:" и "Period:"?

orenius
Offline
Зарегистрирован: 29.07.2017

b707 пишет:

Хорошо, продолжим. Скетч из сообщения №10 что-нибудь на экран выводит? Хотя бы слова "Code:" и "Period:"?

вообще ничего

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

orenius пишет:

b707 пишет:

Хорошо, продолжим. Скетч из сообщения №10 что-нибудь на экран выводит? Хотя бы слова "Code:" и "Period:"?

вообще ничего

Кнопку не забываете жать по 5 раз одну и ту же?

orenius
Offline
Зарегистрирован: 29.07.2017

Все нажимается ровно так, как раньше, когда это выводилось на монитор порта, даже зажимаю, нажимаю много наз..ничего

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

А если добавить вывод в Сериал для второго кода? попробуйте так

#include <RemoteReceiver.h> 
#include <LiquidCrystal_I2C.h> 
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup() 
{
Serial.begin(115200);
RemoteReceiver::init(0, 3, showCode);// Connect the receiver to digital pin 2.-пин 2.это вход для Радиоприёмника
}
void loop() 
{
}
void showCode(unsigned long receivedCode, unsigned int period) 
{
int value = receivedCode;
Serial.print("Code: ");
Serial.println(receivedCode);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Code: ");
lcd.print(receivedCode);
lcd.setCursor(0, 1);
lcd.print("Period: ");
lcd.print(period);
lcd.println("us.  ");
}

 

orenius
Offline
Зарегистрирован: 29.07.2017

Я раньше так оставлял, не помогало, попробую вечером сегодня

kalapanga
Offline
Зарегистрирован: 23.10.2016

orenius пишет:

Я раньше так оставлял, не помогало, попробую вечером сегодня

Уж проверять, так проверять! В setup ещё что-нибудь на дисплей выведите, что-бы видеть, что конкретно в этой схеме с этим скетчем дисплей работает.

orenius
Offline
Зарегистрирован: 29.07.2017

Еще появилась идея, что может библиотека у меня на прием битая/левая, где можно взять именно проверенную? 

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

orenius пишет:

Еще появилась идея, что может библиотека у меня на прием битая/левая, где можно взять именно проверенную? 

вы же пишете - что именно с этой библиотекой в скетче из сообщения #6 принимали какой-то код? - а теперь ничего не принимаете... значит дело не в ней.

 

orenius
Offline
Зарегистрирован: 29.07.2017
выводит на экран надпись, теперь в мониторе порта появилась Со вместо значений



#include <RemoteReceiver.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
Serial.begin(115200);

RemoteReceiver::init(0, 3, showCode);// Connect the receiver to digital pin 2.-пин 2.это вход для Радиоприёмника
lcd.init();                            // Инициализация lcd             
  lcd.backlight(); 
  lcd.begin(16, 2);

lcd.setCursor(0, 0);

lcd.print("System");



lcd.setCursor(0, 1);

lcd.print("Works");
}

void loop()

{

}

void showCode(unsigned long receivedCode, unsigned int period)

{

int value = receivedCode;

Serial.print("Code: ");

Serial.println(receivedCode);

lcd.begin(16, 2);

lcd.setCursor(0, 0);

lcd.print("Code: ");

lcd.print(receivedCode);

lcd.setCursor(0, 1);

lcd.print("Period: ");

lcd.print(period);

lcd.println("us.  ");

}


 

 

 

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

Поменяйте в строке 42

Serial.println(receivedCode);

на

Serial.println(receivedCode, HEX);

и посмотрите, не начнет ли выводится код в монитор

orenius
Offline
Зарегистрирован: 29.07.2017

b707 пишет:

Поменяйте в строке 42

Serial.println(receivedCode);

на

Serial.println(receivedCode, HEX);

и посмотрите, не начнет ли выводится код в монитор

не помогло

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

ну тогда не знаю... пока новых идей нет.

разве что попробуйте удалить строчку lcd.begin... в процедуре showcode... строчка 44 по листингу сообщения 30. У вас и так иннициализация дисплея есть в setup

orenius
Offline
Зарегистрирован: 29.07.2017

Выполнил то же самое на библиотеке RSswich, может у кого есть идеи как тут вставить ывод на lcd? 


#include <RCSwitch.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,16,2);


RCSwitch mySwitch = RCSwitch();
void setup()  {
  Serial.begin(115200);
    
  mySwitch.enableReceive(0);  // Receiver on interrupt 0=> подключен к пину 2
}

void loop()  {
  if (mySwitch.available())  {
    int value = mySwitch.getReceivedValue();
    if (value == 0)  {
      lcd.print("Unknown encoding");
    }
    else  {
  


     Serial.print("Received ");
     Serial.print(mySwitch.getReceivedValue() );
     Serial.print(" / ");
     Serial.print(mySwitch.getReceivedBitlength() );
     Serial.print("bit, ");
     Serial.print("Protocol: ");
 
     Serial.println(mySwitch.getReceivedProtocol() );                 
    }

  mySwitch.resetAvailable();
  }
}