Skocz do zawartości

Brak poprawnej komunikacji Arduino Mega z Nextion


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 to post
Share on other sites
22 minuty temu, ethanak napisał:

Częściej niż co dwie sekundy raczej nie wyjdzie.

 

specyfika czujnika...

Link to post
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

I funkcji. Do kolegi @Matlap97 - która  z wywoływanych funkcji jest blokująca i jaki jest problem w odpytywaniu konkretnego adresu?

Link to post
Share on other sites

@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 to post
Share on other sites

Nie o to. Popatrz sobie na swoją funkcję Pomuar_temperatury i odpowiedz ile czasu trwa jej wykonanie.

Wywołaj request, a po pięciu sekundach odczytaj temperaturę.

Link to post
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 to post
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 to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

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