Skocz do zawartości

Brak poprawnej komunikacji Arduino Mega z Nextion


Matlap97

Pomocna odpowiedź

#include <OneWire.h>
#include <DallasTemperature.h>

OneWire oneWire(A5);
DallasTemperature sensors(&oneWire);

#define Dioda 2
#define Dioda1 3
#define Dioda2 4

int stan_diody = LOW;
int stan_diody1 = LOW;
int stan_diody2 = LOW;

float Temperatura = 0.0f;

void setup() {

  Serial1.begin(9600);
  sensors.begin();
  pinMode(Dioda, OUTPUT);
  pinMode(Dioda1, OUTPUT);
  pinMode(Dioda2, OUTPUT);
}

void loop() {
  
 Pomiar_Temperatury();
  
  if (Serial1.available()) {
    String data_from_display = "";
    delay(30);
    while (Serial1.available()) {
      data_from_display += char(Serial1.read());
    }
    Serial1.println(data_from_display);
    sendData(data_from_display);
  }
}


void Pomiar_Temperatury(){
sensors.requestTemperatures();
  Temperatura = sensors.getTempCByIndex(0);
  String pomiar ="Temperatura.txt=\""+String(Temperatura,1)+"\"";
  Serial1.print(pomiar);
  Serial1.write(0xff);
  Serial1.write(0xff);
  Serial1.write(0xff);
}
void sendData(String data_from_display) {
  if (data_from_display == "LED  1") {
      stan_diody = !stan_diody;
    digitalWrite(Dioda, stan_diody);
  }
  if (data_from_display == "LED 2") {
    stan_diody1 = !stan_diody1;
    digitalWrite(Dioda1, stan_diody1);
  }
  if (data_from_display == "LED 3") {
    stan_diody2 = !stan_diody2;
    digitalWrite(Dioda2, stan_diody2);
  }
}

Cześć, 

Jakiś czas temu zacząłem zabawę z Arduino oraz z wyświetlaczem Nextion. Mam zamiar sterować przez wyświetlacz kilkoma diodami podłączonymi do Arduino oraz odczytywać temperaturę na Wyświetlaczu. Na początku napisałem program do sterowania diodami przez naciskanie poszczególnych przycisków na wyświetlaczu, do tego momentu wszystko działało poprawnie. Niestety gdy dodałem odczyt temperatury, sterowanie diodami stało się prawie niemożliwe. Diody załączają się po naciśnięciu klawisza dopiero po jakieś chwili albo w ogóle. Natomiast jeśli odłączę czujnik od Arduino lub usunę z programu kod od odczytu temperatury, sterowanie diodami jest znowu możliwe. Odczyt temperatury w porównaniu do sterowania diodami działa cały czas płynnie. Zależy mi na płynnym odczytywaniu wartości temperatury oraz sterowaniu diodami. Czy jest ktoś w stanie mi wytłumaczyć gdzie robię błąd ? Bardzo proszę o pomoc

Pozdrawiam 

Edytowano przez Matlap97
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

@ethanak  sendData(załączanie diod przez przyciski na wyświetlaczu) jest blokowany przez Pomiar_Temperatury jeśli o to pytasz. 

@SOYER myślę że co 5 sekund wystarczy. 

Napisałem również taki program który odczytuje temperaturę co 5 sekund. Użyłem funkcji millis() która co 5 sekund wywołuje funkcję Pomiar_Temperatury(). Cały program spełniałby swoją funkcję, ale gdy chcę włączyć diody w momencie odczytania temperatura, włączenie diod też nie działa.Tak jak pisałem na początku - nie mogę załączać diod gdy odczytywana jest temperatura, natomiast priorytetem jest dla mnie załączenie diod. Nie dam rady podesłać tego programu z funkcją millis w tym momencie niestety.

Chciałem również skorzystać z biblioteki Nextion, ale nie wiem czemu bez tej biblioteki program jest dla mnie bardziej zrozumiały. Chyba że dzięki tej bibliotece będę w stanie ogarnąć ten program to będę próbował oczywiście z biblioteką..  

Link do komentarza
Share on other sites

A czy mógłbyś jakoś lepiej mi wytłumaczyć o co chodzi z tym request ? Chyba że możesz podesłać jakiegoś linka, gdzie mógłbym poczytam o wywoływaniu request. Nie jestem doświadczony w takich rzeczach także proszę o wyrozumiałość.. 

Link do komentarza
Share on other sites

request - czyli w tym przypadku sensors.requestTemperatures()

Obejrzyj sobie kod przykładów WaitForConversion i WaitForConversion2, tam masz ładnie pokazane jak to zrobić bez blokowania programu aż termometr uprzejmie zmierzy temperaturę.

Link do komentarza
Share on other sites

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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.