Вывод данных на экран через I2C

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

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


#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();
  }
}

 

 

inspiritus
Offline
Зарегистрирован: 17.12.2012

Кстати эта библиотека для I2C не во всех IDE правильно работает.

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

а где инициация дисплея в сетапе?

orenius
Offline
Зарегистрирован: 29.07.2017
преобразовал значение, но не помогло
#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  {
  

char buf[255];
sprintf(buf, "Recived %d\/%d bit. Protocol: %d\n", mySwitch.getReceivedValue(), mySwitch.getReceivedBitlength(), mySwitch.getReceivedProtocol() );
lcd.setCursor(0, 0);
lcd.print(buf);            
    }

  mySwitch.resetAvailable();
  }
}

 

orenius
Offline
Зарегистрирован: 29.07.2017
вот решение,если кому интересно!

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

LiquidCrystal_I2C lcd(0x3F, 16, 2);

RCSwitch mySwitch = RCSwitch();
void setup()
{
lcd.init();
lcd.backlight();
Serial.begin(115200);

mySwitch.enableReceive(0); // Receiver on interrupt 0=> подключен к пину 2
}

void loop()
{

 if (mySwitch.available()) 
 {
    int value = mySwitch.getReceivedValue();
    if (value == 0) {
      lcd.setCursor(0, 0);
      lcd.print("Unknown encoding");
    }
    else {
    
      char buf[255];
      sprintf(buf, "Rcv %d,%d bit", mySwitch.getReceivedValue(), mySwitch.getReceivedBitlength());
      lcd.setCursor(0, 0);
      lcd.print(buf);


      sprintf(buf, "Protocol: %d", mySwitch.getReceivedProtocol());
      lcd.setCursor(0, 1);
      lcd.print(buf);
      
      mySwitch.resetAvailable();
    }
 }

}

 

orenius
Offline
Зарегистрирован: 29.07.2017
финал
#include <RCSwitch.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, 16, 2);

RCSwitch mySwitch = RCSwitch();
void setup()
{
lcd.init();
lcd.backlight();
Serial.begin(115200 );

mySwitch.enableReceive(0); // Receiver on interrupt 0=> подключен к пину 2
}

void loop()
{

 if (mySwitch.available()) 
 {
    int value = mySwitch.getReceivedValue();
    if (value == 0) {
      lcd.setCursor(0, 0);
      lcd.print("Unknown encoding");
    }
    else {
    
      char buf[255];
      int val2 = mySwitch.getReceivedBitlength();
      sprintf(buf, "Rcv %d,%d bit", value, val2);
      lcd.setCursor(0, 0);
      lcd.print(buf);
      Serial.println(value, DEC);
      Serial.println(val2, DEC);


      sprintf(buf, "Protocol: %d", (int)mySwitch.getReceivedProtocol());
      lcd.setCursor(0, 1);
      lcd.print(buf);
      
      mySwitch.resetAvailable();
    }
 }

}