Skocz do zawartości

Konflikt bibliotek LoRa i u2g8


Pomocna odpowiedź

Napisano

Witam, 

Tworzę małą stację pogodową na balkon. Zbudowałem nadajnik LoRa i z nim nie ma problemu, lecz problem mam z odbiornikiem danych. Tutaj pojawia się problem z bibliotekami jak sądzę. Jeśli uruchomię po spi LoRa (LoRa.begin) to nie ma komunikacji z wyświetlaczem, wiec muszę za każdym razem uruchamiać komunikację z LCD co powoduje "miganie" wyświetlacza. Ekran zostaje wyczyszczony i dopiero po tym zaczyna wyświetlać treść a na koniec muszę ponownie uruchomić LoRa.begin ponieważ tracę komunikację z LoRa. Poniżej dodaję kod programu. Czy ma ktoś pomysł jak wyeliminować konflikt między bibliotekami tak aby wystarczyło tylko raz zainicjalizować urządzenie co umożliwi płynne wyświetlanie informacji na ekranie LCD, ponieważ teraz miga z każdą nową paczką danych do wyświetlenia. 

#include <LoRa.h>
#include <U8g2lib.h>

String temperatura;
String cisnienie;
String wilgotnosc;
String bateria;

#define ss 15  // LoRa
#define rst 2 //LoRa

U8G2_ST7567_ENH_DG128064I_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 14, /* data=*/ 13, /* cs=*/ 4, /* dc=*/ 5, /* reset=*/ 0);

bool flaga=false;

void setup(){

pinMode(LED_BUILTIN, OUTPUT);
  
  //Konfiguracja LCD
  
u8g2.begin ();
u8g2.enableUTF8Print();
u8g2.clearBuffer();
u8g2.setFont (u8g2_font_ncenB10_tr);
u8g2.setCursor(15,25);
u8g2.print("CirrusMeteo");
u8g2.setFont (u8g2_font_nokiafc22_tf);
u8g2.setCursor(105,64);
u8g2.print("v 1.0");
u8g2.setFont (u8g2_font_unifont_t_weather);
u8g2.setCursor(55,45);
u8g2.print("\u0036");
u8g2.sendBuffer (); 
Serial.println("setup flaga 1");

  //Konfiguracja LoRa 

delay(5000);

Serial.begin(9600);
Serial.println("LoRa odbiornik");
  LoRa.setPins(ss,rst);
  if (!LoRa.begin(433E6))
  {
   //Serial.println("Starting LoRa failed!");
    u8g2.begin ();
    u8g2.clearBuffer();
    u8g2.setFont (u8g2_font_6x12_m_symbols);
    u8g2.setCursor(5,25);
    u8g2.print("Blad odbiornika LoRa");
    u8g2.sendBuffer (); 
    delay(100);
    while (1);
  }
   //Serial.println("LoRa Started");
    u8g2.begin ();
    u8g2.clearBuffer();
    u8g2.setFont (u8g2_font_6x12_m_symbols);
    u8g2.setCursor(10,25);
    u8g2.print("Czekam na odczyt..."); 
    u8g2.setFont (u8g2_font_unifont_t_symbols);
    u8g2.setCursor(55,45);
    u8g2.print("\u23f3");
    u8g2.sendBuffer ();
    LoRa.begin(433E6);
    
Serial.println("setup flaga 2");
}


void loop(){
int pos1, pos2, pos3;

//Serial.println("flaga 1");

int packetSize = LoRa.parsePacket();
//Serial.println("flaga 2");
if (packetSize)
{
String LoRaData = LoRa.readString();
while (LoRa.available())
{
((char)LoRa.read());
}
pos1 = LoRaData.indexOf('/');
pos2 = LoRaData.indexOf('&');
pos3 = LoRaData.indexOf('!');
flaga=true;
temperatura = LoRaData.substring(0,pos1);
cisnienie = LoRaData.substring(pos1 + 1, pos2);
wilgotnosc = LoRaData.substring(pos2 +1, pos3);
bateria = LoRaData.substring(pos3 +1, LoRaData.length());
Serial.println("flaga 3");


Serial.println(temperatura);
Serial.println(cisnienie);
Serial.println(wilgotnosc);
Serial.println(bateria);
}

if(flaga){
flaga=false;
Serial.println("flaga 4");
delay(2000);
u8g2.begin ();
delay(2000);
Serial.println("flaga 5");
u8g2.clearBuffer();
u8g2.setFont (u8g2_font_ncenB10_tr);
u8g2.setCursor(2,16);
u8g2.print(temperatura);
u8g2.setCursor(2,32);
u8g2.print(wilgotnosc);
u8g2.setCursor(2,46);
u8g2.print(cisnienie);
Serial.println("flaga 6");
u8g2.sendBuffer (); 
LoRa.begin(433E6);
}
}

 

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...