Обновление экрана при изменении
- Войдите на сайт для отправки комментариев
Вс, 30/07/2017 - 00:01
Приветствую, необходимо производить замену значения на экране при изменении сигнала, замучался очень, заранее благодарен, сейчас все работает, только он трет сигнал через милисекунду после поступления при любом варианте
#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.");
}
в этом случае?
if((receivedCode) != receivedCode1);нафиг там точка с запятой?
убрал запятую, теперь выглядит все следующим образом, при подаче разных значений экран на секунду моргает, при подаче одинаковых значений дважды код зависает со статичным значением на экране, дальше помогает только отключение питания
я вообще не понимаю, как у тебя вообще что-то работает
33voidloop() {3435}Подскажите пожалуйста, что не так в коде, как его переписать, заранее благодарен
Ошибки в строках 43 лишняя ;,49 нужно перенести на 58.
Проблема сохранилась, выдает при первом сигнале(моргает и пропадает) потом при повторном нажатии-скетч замыкается и значение выдает на экран, но новые сигналы он уже не обрабатывает #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."); } }как возможно мой скетч подружить с луп? ругается,что два раза void
Что, прямо так и говорит: "два раза void"? Круто!
как возможно мой скетч подружить с луп? ругается,что два раза void
А надо? По-моему, в Вашем коде луп вообще не нужен.
Вот что интересно... при чтении вашего кода у меня возникли вопросы. Я не говорю. что это неправильно - но обьясните, почему вы выводите число на экран при каждом приходе кода на приемник, а очищаете дисплей только при приходе нового (не такого как предыдущий)?
И почему функция showcode описана с параметрами, а вызывается без?
купил экран 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. "); }Не могу понять в чем проблема, помогите пожалуйста
Ну мы тоже не можем понять, в чем проблема - вы же даже не пишете, что не так.
Хотя бы напишите, что не работает
Последний вариант скетча, не выводит данных на i2c монитор, никаких
ПОСМОТРИТЕ ПРИМЕРЫ ИЗ БИБЛИОТЕКИ ДЛЯ ДИСПЛЕЯ
Посмотрел, вывести не проблема на дисплей значение любое, дисплей работает с пресловутым "Здравствуй Мир", нет понимания как вывести значение с ремоутРесивера на экран
Посмотрел, вывести не проблема на дисплей значение любое, дисплей работает с пресловутым "Здравствуй Мир", нет понимания как вывести значение с ремоутРесивера на экран
По-моему, проблема не в ресивере. Даже если он правильно принимает код, вряд ли ваша программа выведет его на экран. Повторю мой второй вопрос из сообщения #9 - "Почему функция showcode() описана с параметрами, а вызывается без них?" - таким образом, непонятно - когда и как присваивается значение переменной ReceivedCode, которую вы выводите на экран?
"Почему функция showcode() описана с параметрами, а вызывается без них?"
А где Вы видите, что она вызывается? В строке "RemoteReceiver::init(0, 3, showCode);" просто передаётся её адрес, а вызывается она откуда-то из недр библиотеки.
-----------
ТС помочь невозможно, т.к. человек в принципе не понимает что написано в коде, который он где-то скачал и запустил. Вообще ни строчки. Поэтому вариантнов негусто: написать за него полностью или забить. После фразы ТС
как возможно мой скетч подружить с луп? ругается,что два раза void
совершенно ясно, что никакая помощь, кроме как сделать за него, невозможна.
ТС помочь невозможно, т.к. человек в принципе не понимает что написано в коде,
да черт с ним :)
Мне уже самому интересно, почему не работает. Посмотрел исходники библиотеки - все вроде верно вызывается. То есть код в принципе правильный (тот, что приведен). Хотя. конечно, при таком уровне знаний у ТС невозможно предсказать. что он не так собрал, правильно ли посылает сигнал и тд - вариантов может быть тыща...
Сам прибор собран верно, так как система работоспособна по отдельности, работает монитор со скетчем "привет мир" , так же работает ремоут рествер в мониторе порта, когда все отдельно, значит физически все собрано верно, при этом, посылаю я сигнал физически с пульта умного дома
Сам прибор собран верно, так как система работоспособна по отдельности, работает монитор со скетчем "привет мир" , так же работает ремоут рествер в мониторе порта, когда все отдельно, значит физически все собрано верно, при этом, посылаю я сигнал физически с пульта умного дома
скетч из поста #6 выдает в монитор порта правильный код передатчика?
Могу точно сказать, что одинаковый, есть пульт с 4 кнопками, пока только он, выдает стабильный сигнал(незначительно отличающиеся 4 позиции)
Хорошо, продолжим. Скетч из сообщения №10 что-нибудь на экран выводит? Хотя бы слова "Code:" и "Period:"?
Хорошо, продолжим. Скетч из сообщения №10 что-нибудь на экран выводит? Хотя бы слова "Code:" и "Period:"?
вообще ничего
Хорошо, продолжим. Скетч из сообщения №10 что-нибудь на экран выводит? Хотя бы слова "Code:" и "Period:"?
вообще ничего
Кнопку не забываете жать по 5 раз одну и ту же?
Все нажимается ровно так, как раньше, когда это выводилось на монитор порта, даже зажимаю, нажимаю много наз..ничего
А если добавить вывод в Сериал для второго кода? попробуйте так
#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. "); }Я раньше так оставлял, не помогало, попробую вечером сегодня
Я раньше так оставлял, не помогало, попробую вечером сегодня
Уж проверять, так проверять! В setup ещё что-нибудь на дисплей выведите, что-бы видеть, что конкретно в этой схеме с этим скетчем дисплей работает.
Еще появилась идея, что может библиотека у меня на прием битая/левая, где можно взять именно проверенную?
Еще появилась идея, что может библиотека у меня на прием битая/левая, где можно взять именно проверенную?
вы же пишете - что именно с этой библиотекой в скетче из сообщения #6 принимали какой-то код? - а теперь ничего не принимаете... значит дело не в ней.
выводит на экран надпись, теперь в мониторе порта появилась Со вместо значений #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. "); }Поменяйте в строке 42
Serial.println(receivedCode);
на
Serial.println(receivedCode, HEX);
и посмотрите, не начнет ли выводится код в монитор
Поменяйте в строке 42
Serial.println(receivedCode);
на
Serial.println(receivedCode, HEX);
и посмотрите, не начнет ли выводится код в монитор
не помогло
ну тогда не знаю... пока новых идей нет.
разве что попробуйте удалить строчку lcd.begin... в процедуре showcode... строчка 44 по листингу сообщения 30. У вас и так иннициализация дисплея есть в setup
Выполнил то же самое на библиотеке 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(); } }