INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Zeit vom Nextion Enhanced mit Arduino auslesen
06.01.2019, 17:15
Beitrag #17
RE: Zeit vom Nextion Enhanced mit Arduino auslesen
Danke, Danke, Danke
So bekomme ich die 2019 ausgegeben.
Da wäre ich selber ja nie drauf gekommen.

Eine Frage habe ich aber noch.
Mein bisheriger Aquariencomputer läuft ja nur im Arduino.
Sollte ich die ganzen Zeitabfragen jetzt besser im Display programmieren und nur die Auswertung der Messsonden (PH und Temp) mit dem Arduino machen? Oder ist das egal?

Gruß Marko
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2019, 17:20
Beitrag #18
RE: Zeit vom Nextion Enhanced mit Arduino auslesen
Da wirst Du noch ein paar Infos dazu geben müssen, was Du genau machen willst, um da Abschätzungen zu treffen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2019, 18:07
Beitrag #19
RE: Zeit vom Nextion Enhanced mit Arduino auslesen
- Es soll halt zu Uhrzeit XY das Licht ein und zu Uhrzeit YZ wieder ausschalten.
- 2 Düngepumpen sollen um Uhrzeit XY für x Sekunden laufen.
- Wenn Temperatur < x Grad soll die Heizung angehen bei y Grad wieder aus
- Wenn PH > x soll ein Magnetventil die CO2 Zufuhr starten und bei < y wieder aus

Die Zeiten und Werte sollen am Nextion eingestellt und die Zustände optisch dargestellt werden.

Bis auf den PH wert habe ich es mit meinem Arduino und einem 2 zeiligen Display bereits laufen.
Würde das ganze halt etwas Komfortabler über das Nextion steuern wollen.

Bei dem ganzen hin und her mit der Übermittlung der Uhrzeit zum Arduino war mir jetzt die Idee gekommen die Zeitrelevanten Sachen im Display zu programmieren und nur die Schaltzustände mit dem Arduino auslesen.
Temperatur und PH dann mit dem Arduino und die Daten dann zum Nextion senden.

Gruß Marko
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2019, 18:31
Beitrag #20
RE: Zeit vom Nextion Enhanced mit Arduino auslesen
Temperatur und PH würde ich auch direkt am Arduino machen und nur die Messwerte am Nextion darstellen.
Die Zeitsteuerungen sind eigentlich egal.
Ich sehe 3 Wege:
1. die TimeLib von Paul Stoffregen und dazu einen eigenen SyncProvider schreiben, der die Zeit vom Nextion holt und in UNIX-Time umrechnet. Diesen dann alle paar Stunden die Uhr im Arduino aktualisieren lassen und den die Zeiten steuern lassen.

2. Die Zeitsteuerung ins Nextion verlagern und nur die Zustände regelmäßig vom Arduino abfragen (minütlich dürfte ausreichen)

3. Ich weiß nicht wie Du bisher die Zeiten gehandhabt hast. Evtl. läßt sich die Zeit vom Nextion dort relativ einfach einbinden.

Auf alle Fälle wirst Du die Sollwerte vom Nextion an den Arduino übertragen müssen, wenn er Schalten soll.
Wobei 1 wohl der aufwändigste ist.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.01.2019, 11:20 (Dieser Beitrag wurde zuletzt bearbeitet: 08.01.2019 11:23 von MarkoM.)
Beitrag #21
RE: Zeit vom Nextion Enhanced mit Arduino auslesen
Hi Tommy,
darf ich dich nochmal belästigen?
Habe mich nochmal etwas mit der nexrtc.h (https://github.com/itead/ITEADLIB_Arduin.../NexRtc.h) beschäftigt.
Über ein Beispiel Sketch, was dabei war, konnte ich auch ganz einfach Datum und Uhrzeit zum Nextion Senden und empfangen.
Allerdings kommt das Datum in diesem Format an: JJJJ/MM/TT SS:MM:SS (Mit diesem Befehl: rtc.read_rtc_time(time_buf,30);)
Ist es über die nexrtc.h nicht auch möglich Stunde, Minute und Sekunde einzeln auszulesen?
In der nexrtc.cpp sieht es so aus. Ich weiß aber nicht wie ich den rtc.read_rtc_time() Befehl abändern muss.

Gruß Marko
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.01.2019, 11:42 (Dieser Beitrag wurde zuletzt bearbeitet: 08.01.2019 11:43 von Tommy56.)
Beitrag #22
RE: Zeit vom Nextion Enhanced mit Arduino auslesen
Dein Link ist defekt - die letzte Klammer muss raus.

Wenn Du die Lib nutzen willst, wovon ich abrate (Sie benutzt String), musst Du die Zeile 168 anders initialisieren und die Zeilen ab 206 anders anordnen.
Die Nextion-Libs sind allgemein schlecht programmiert, weshalb sie kaum einer nutzt.

Die Lib macht auch nichts anderes als wir mit unserem "get rtc0" usw. nur schlechter (cmd ist ein String und der wird anschließend in ein Char-Array umgewandelt - besser wäre gleich ein char-Array)
Beispiel für besseres cmd:
Code:
char cmd[] = "get rtc0";
// neues rtc-Register z.B:
byte num = 4;
cmd[7] = num+48; // 48 ist der ASCII-Wert von '0', also wenn num = 4 ist, dann ist 52 der ASCII-Wert von '4'
Zum Problemkreis Zeichenketten habe ich hier einiges aufgeschrieben.

Als Vergleichswert würde ich Minuten nach Mitternacht benutzen, da musst Du nur 1 Zahl vergleichen. Ich glaube sekundengenau muss es nicht sein, da wäre der Weg über das Nextion ungünstig.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2019, 17:50
Beitrag #23
RE: Zeit vom Nextion Enhanced mit Arduino auslesen
Hallo Thommy,
ich bin immer noch dabei meine Zeiten etc. vom Nextion zu holen.
Mit der Nextion.h lib hatte ich es auch schon hinbekommen. Ich will die aber nach möglichkeit nicht nutzen.
Nun habe ich einen Code zusammengefrickelt der mir nach und nach alle relevanten Zeiten vom Nextion holen soll. Allerdings funktioniert das nicht immer richtig.
Nach dem hochladen auf den Arduino bekomme ich im seriellen Monitor folgende Ausgabe:
Code:
get rtc0
17:34:14.348 -> 113
17:34:14.348 -> Beginn Zahlenfolge gefunden
17:34:14.348 -> 227
17:34:14.348 -> 7
17:34:14.348 -> 0
17:34:14.348 -> 0
17:34:14.348 -> 255
17:34:14.348 -> 255
17:34:14.348 -> 255
17:34:14.348 -> RTC0 = 2019
17:34:14.348 -> get rtc1
17:34:14.383 -> 113
17:34:14.383 -> Beginn Zahlenfolge gefunden
17:34:14.383 -> 1
17:34:14.383 -> 0
17:34:14.383 -> 0
17:34:14.383 -> 0
17:34:14.383 -> 255
17:34:14.383 -> 255
17:34:14.383 -> 255
17:34:14.383 -> RTC1 = 1
17:34:14.383 -> get rtc2
17:34:14.417 -> 113
17:34:14.417 -> Beginn Zahlenfolge gefunden
17:34:14.417 -> 31
17:34:14.417 -> 0
17:34:14.417 -> 0
17:34:14.417 -> 0
17:34:14.417 -> 255
17:34:14.417 -> 255
17:34:14.417 -> 255
17:34:14.417 -> RTC2 = 31
17:34:14.417 -> get rtc3
17:34:14.451 -> 113
17:34:14.451 -> Beginn Zahlenfolge gefunden
17:34:14.451 -> 17
17:34:14.451 -> 0
17:34:14.451 -> 0
17:34:14.451 -> 0
17:34:14.451 -> 255
17:34:14.451 -> 255
17:34:14.451 -> 255
17:34:14.451 -> RTC3 = 17
17:34:14.451 -> get rtc4
17:34:14.486 -> 113
17:34:14.486 -> Beginn Zahlenfolge gefunden
17:34:14.486 -> 34
17:34:14.486 -> 0
17:34:14.486 -> 0
17:34:14.486 -> 0
17:34:14.486 -> 255
17:34:14.486 -> 255
17:34:14.520 -> 255
17:34:14.520 -> RTC4 = 34
17:34:14.520 -> get rtc5
17:34:14.520 -> 113
17:34:14.555 -> Beginn Zahlenfolge gefunden
17:34:14.555 -> 11
17:34:14.555 -> 0
17:34:14.555 -> 0
17:34:14.555 -> 0
17:34:14.555 -> 255
17:34:14.555 -> 255
17:34:14.555 -> 255
17:34:14.555 -> RTC5 = 11
Danach kämen noch meine Schaltzeiten. Soweit alles richtig.
Wenn ich nun den Arduino mit dem kleinen Knopf resette, kommt folgendes:
Code:
17:42:26.313 -> get rtc0
17:42:26.313 -> 26
17:42:26.313 -> RTC0 = 1546
17:42:26.313 -> get rtc1
17:42:26.313 -> 255
17:42:26.313 -> RTC1 = 1546
17:42:26.313 -> get rtc2
17:42:26.313 -> 255
17:42:26.313 -> RTC2 = 1546
17:42:26.313 -> get rtc3
17:42:26.313 -> 255
17:42:26.313 -> RTC3 = 1546
17:42:26.313 -> get rtc4
17:42:26.313 -> 113
17:42:26.313 -> Beginn Zahlenfolge gefunden
17:42:26.313 -> 1
17:42:26.313 -> 0
17:42:26.313 -> 0
17:42:26.313 -> 0
17:42:26.313 -> 255
17:42:26.313 -> 255
17:42:26.313 -> 255
17:42:26.347 -> RTC4 = 1
17:42:26.347 -> get rtc5
17:42:26.347 -> 113
17:42:26.347 -> Beginn Zahlenfolge gefunden
17:42:26.347 -> 31
17:42:26.347 -> 0
17:42:26.347 -> 0
17:42:26.347 -> 0
17:42:26.381 -> 255
17:42:26.381 -> 255
17:42:26.381 -> 255
17:42:26.381 -> RTC5 = 31
Abrufen tue ich es mit:
Code:
void Datum_Uhr_holen()
{
if (uhrempf == 0)
      {
      if (datenangefordert == 0)
          {
          //Serial1.print("page 0");
          //Serial1.write(NexT,3);
          //delay(1000);
          Serial.println("get rtc0");
          Serial1.print("get rtc0");
          Serial1.write(NexT,3);
          datenangefordert = 1;
          }
        if (datenangefordert == 1)
          {
          rtc0 = getZahl();
          if (rtc0 != -1L)
          {
          Serial.print("RTC0 = ");
          Serial.println(rtc0);
          datenangefordert = 0;
          uhrempf = 1;
          }
          }  
      }
      if (uhrempf == 1)
      {
      if (datenangefordert == 0)
          {
          Serial.println("get rtc1");
          Serial1.print("get rtc1");
          Serial1.write(NexT,3);
          datenangefordert = 1;
          }
        if (datenangefordert == 1)
          {
          rtc1 = getZahl();
          if (rtc1 != -1L)
          {
          Serial.print("RTC1 = ");
          Serial.println(rtc1,DEC);
          uhrempf = 2;
          datenangefordert = 0;
          }
          }      
      }...........

GetZahl ist ähnlich wie von Dir schon bekommen. Nur noch mit Abfrage auf ObjektIDs erweitert.
Code:
// return -1 wenn nichts da, sonst die Zahl
long getZahl() {
  static puffer p;
  static byte idx;
  static byte anzFF;

if (Serial1.available() > 0 && datenangefordert == 1)
    {
    b = Serial1.read();
    Serial.println(b);
    if (!inLesen)
      {
      if (b == 0x71) // Anfang Zahlenfolge gefunden
        {
          Serial.println("Beginn Zahlenfolge gefunden");
          art = 1;
          inLesen = true;
          idx = 0;
          anzFF = 0;
          return -1L;
        }
      if (b == 0x65)
        {
          Serial.println("Beginn Objekt ID gefunden");
          art = 2;
          inLesen = true;
          idx = 0;
          anzFF = 0;
          return -1L;
        }
      }
      else
        {
        if (b == 0xFF)  // Endeanteil
          {
          anzFF++;
          if (anzFF == 3) // fertig
            {
            inLesen = false;
            if (art == 1)
              {
              art = 0;
              return p.l;
              } else return -1L; // in Endebearbeitung
            if (art == 2)
              {
              pageID = inID[0];
              objektID = inID[1];
              tEv = inID[2];                
              } else return -1L; // in Endebearbeitung
            } else return -1L; // in Endebearbeitung
          }
          else
            {
              if (art == 1)
              {
              p.arr[idx++] = b; // Zahlanteil schreiben
              return -1L;
              }
              if (art == 2)
              {
              inID[idx++] = b;
              return -1L;
              }
            }
          }
    } else return -1L;  // nichts da
}
Verstehe einfach nicht, wieso es mal geht und dann wieder nicht.

Gruß Marko
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2019, 18:04
Beitrag #24
RE: Zeit vom Nextion Enhanced mit Arduino auslesen
Ich vermute, dass bei einem Reset des Arduino nicht automatisch auch ein Reset des Nextion erfolgt.
Du liest dann irgendwas. Es kommt ja auch nicht die Meldung "Beginn Zahlenfolge gefunden" (0x71). Nach einem Reset solltest Du im Setup erst mal alles lesen, was noch in der Queue steht.
Code:
char c;
while (Serial1.available()) c = Serial1.read();

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Probleme mit Blinklicht auf bestimmte Zeit Prospekteur 15 270 20.10.2019 17:08
Letzter Beitrag: Tommy56
  Nextion und die Probleme mit Arduino.... alpenpower 7 294 17.10.2019 13:51
Letzter Beitrag: Tommy56
  Wert von einem Arduino zu einem zweiten Arduino senden Thorsten_S 9 323 14.10.2019 14:48
Letzter Beitrag: Thorsten_S
  LED-Symbol auf Nextion-TFT darstellen? alpenpower 4 472 16.09.2019 07:00
Letzter Beitrag: alpenpower
  Aktivierung nur in einer bestimmten Zeit Prospekteur 48 1.959 14.09.2019 12:57
Letzter Beitrag: MicroBahner
  delay Zeit falsch golex 9 1.174 24.05.2019 21:18
Letzter Beitrag: GuaAck
  Keypad auslesen Dieter_T 10 1.328 11.02.2019 20:46
Letzter Beitrag: Dieter_T
  2 Pt1000 über externen AD wandler auslesen Noob63 16 2.345 15.11.2018 20:10
Letzter Beitrag: ardu_arne
  mcp2515 CAN BUS nur eine ID auslesen Golf_Cabrio 6 1.568 24.10.2018 20:51
Letzter Beitrag: Golf_Cabrio
  Schleife bei Zeit x abbrechen BitsAndBytes 7 1.459 23.09.2018 00:30
Letzter Beitrag: BitsAndBytes

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste