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
Stringlänge aus "snprintf()" ermitteln
04.05.2021, 09:37 (Dieser Beitrag wurde zuletzt bearbeitet: 04.05.2021 09:49 von mat-sche.)
Beitrag #25
RE: Stringlänge aus "snprintf()" ermitteln
(03.05.2021 21:12)Tommy56 schrieb:  Dann mache als rstes die Daten in einen Endzustand!
Ist mein nächster Schritt.


(03.05.2021 21:08)mat-sche schrieb:  Als Board habe ich einen arduino ATmega2560 board, auf dem ein ESP samt Flash verbaut ist. Dort ist die Hardware serielle auf eine vom Mega gelegt.
OK, dann serial2, ich glaub die ist auch verfügbar. Hast Du ein simples Beispiel zur Ansteuerung/Konfiguration?
Kannst Du das noch mal verständlich/genauer formulieren?

Gruß Tommy

Zitat:Ich habe dieses Board:
https://www.banggood.com/de/Geekcreit-Me...gLdgPD_BwE

Bei diesem Board ist die Serial0 Schnitstelle mit com1 oder com3 vom ATmega 2560 verbunden. Darüber möchte ich gern eine Verbindung herstellen.
Leider sind nicht alle Pins vom ESP herausgeführt und es ist leider nicht möglich, Serial2 zu nutzen.
Aus diesem Grund suche ich eine Möglichkeit Serial0 dafür zu nutzen.

Grüße MAT
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.05.2021, 12:50
Beitrag #26
RE: Stringlänge aus "snprintf()" ermitteln
(03.05.2021 21:08)mat-sche schrieb:  Als Board habe ich einen arduino ATmega2560 board, auf dem ein ESP samt Flash verbaut ist. Dort ist die Hardware serielle auf eine vom Mega gelegt.
OK, dann serial2, ich glaub die ist auch verfügbar. Hast Du ein simples Beispiel zur Ansteuerung/Konfiguration?
Wie wird denn dann der ESP programmiert, wenn der am Mega hängt?

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
04.05.2021, 14:30
Beitrag #27
RE: Stringlänge aus "snprintf()" ermitteln
(04.05.2021 12:50)Tommy56 schrieb:  
(03.05.2021 21:08)mat-sche schrieb:  Als Board habe ich einen arduino ATmega2560 board, auf dem ein ESP samt Flash verbaut ist. Dort ist die Hardware serielle auf eine vom Mega gelegt.
OK, dann serial2, ich glaub die ist auch verfügbar. Hast Du ein simples Beispiel zur Ansteuerung/Konfiguration?
Wie wird denn dann der ESP programmiert, wenn der am Mega hängt?

Gruß Tommy

Die Verbindung zur USB Bridge ist über einen dip switch ausgeführt. Für die erste Programmierung muss natürlich diese seriell geschehen, danach wird per OTA weitergemacht. Der dip switch wird dann auf den Mega umgelegt.

Wie ich heute weiter herausgefunden habe, hat der ESP 2 hardware UARTs, 1x vollduplex und einer kann nur senden.
Zitat:
"To use the alternative pins (TX = GPIO15, RX = GPIO13), use Serial.swap() after Serial.begin."

"To use UART1 (TX = GPIO2), use the Serial1 object.

All Arduino Stream functions, like read, write, print, println, ... are supported as well."
Quelle: https://tttapa.github.io/ESP8266/Chap04%...oller.html

Dann werde ich mal nachher versuchen, eine Kommunikation über einen FTDI232 mit meinem Terminalprogramm herzustellen.

Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.05.2021, 20:11
Beitrag #28
RE: Stringlänge aus "snprintf()" ermitteln
Guten Abend!

jetzt funktioniert alles wie es soll, also die Auswertung vom ESP8266 bei einkommenden Zeichen über UART0.
Ich komme meinem Ziel immer näher und hoffe, dass dann mein Programm auch stabil läuft.
Den Code gibts dann morgen oder so, wenn es von Interesse ist.

Grüße MAT
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.05.2021, 20:48
Beitrag #29
RE: Stringlänge aus "snprintf()" ermitteln
(05.05.2021 20:11)mat-sche schrieb:  Den Code gibts dann morgen oder so, wenn es von Interesse ist.
Ja der ist immer von Interesse.

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
09.05.2021, 08:42
Beitrag #30
RE: Stringlänge aus "snprintf()" ermitteln
Liebes Forum,

hier nun mein Code für eine Auswertung eines Strings über UART, getestet auf einen ESP8266 und ATmega 328. Die Anzahl der empfangenen Zeichen ist Variabel, ich habe mir die serielle Auswertung als TAB in der IDE "gebaut", die Einbindung muss unter void loop() {} mit serialRun(); aufgerufen werden :
Code:
String inputString = "";         // a String to hold incoming data
bool stringComplete = false;  // whether the string is complete

void serialRun()
{

if (stringComplete)
  {
    Serial.print("inputString= ");Serial.println(inputString);  
    int str_len = inputString.length() + 1;                                               // String in ein CHAR Array speichern  
    char chararray_ser[str_len];                                                          // Prepare the character array (the buffer)  
    inputString.toCharArray(chararray_ser, str_len);                                      // Copy to "char chararray_ser"

    int komma[3];
    char * zeiger;
    char kom_data[str_len];                                  
      
    zeiger = strchr(chararray_ser,'|');                                                    // Zeiger auf die erste Position des Zeichens
    Serial.print("zeiger= "); Serial.println(zeiger);  
    komma[1] = zeiger - chararray_ser;                                                     // man kann mit Zeigern auch rechnen: ergibt 9, also den Index des ersten '|' (von 0 an zählen)
    Serial.print("komma_1= "); Serial.println(komma[1]);
    zeiger = strrchr(chararray_ser,'|');                                                   // Zeiger auf die letzte Position des Zeichens
    Serial.println(zeiger); //
    komma[2] = zeiger - chararray_ser;                                                    // ergibt 20, also den Index des letzten ',' (von 0 an zählen)
    Serial.print("komma_2= "); Serial.println(komma[2]);
    komma[3] = komma[2] - komma[1] - 2;                                                  // minus 2 der letzten Zeichen "|]" vom empfangenem String
    Serial.print("zahl_3= "); Serial.println(komma[3]);
    zeiger = strchr(chararray_ser,'|');                                                  // Zeiger auf die erste Position des Zeichens
    Serial.print("zeiger= "); Serial.println(zeiger);
    char *ptrs = zeiger;                                                                 // Such-Zeiger auf den Beginn von string setzen

  // naechste Ziffer suchen
     ptrs = strpbrk(ptrs, ",");
     Serial.print("Ziffer gefunden= "); Serial.println(ptrs);
     Serial.print("Ziffer gefunden= "); Serial.println(*ptrs);

  // Such-Zeiger weiterruecken
     ptrs++;
     Serial.print("ptrs= "); Serial.println(ptrs);
     strncpy(kom_data,ptrs,komma[3]);                                                   // String hinter dem letzten Komma mit '\0' Null abschließen
     kom_data[komma[3]] = '\0';
     Serial.print("kom_data= "); Serial.println(kom_data);
    
  // CHAR Array  an Stelle "," auseinander nehmen und per Schleife bis im Char Array "\0" gefunden wurde als
     char *ptr0;
     ptr0 = strtok(kom_data,",");
     while (ptr0 != NULL)
    {
      Serial.print("ptr_0=  ");Serial.println(ptr0);
      ptr0 = strtok(NULL,",");    
    }
      Serial.println("Ende");
      Serial.println("");
  // clear the string:
      inputString = "";
      stringComplete = false;
  }
  
      while (Serial.available())
    {
   // get the new byte:
      char inChar = (char)Serial.read();
   // add it to the inputString:
      inputString += inChar;
   // if the incoming character is a newline, set a flag so the main loop can
   // do something about it:
      if (inChar == ']')
      {
      stringComplete = true;
      }
   }
}
Der String muss folgende Formatierung haben: [aaaa|,x,x,x,x,|] .
Wichtig ist der Teil zur Auswertung zwichen den |x,x,x|]. Sollte der UART String nicht richtig und evtl. Fehlzeichen... beinhalten, kann es zum Reset vom ESP kommen. Deshalb sieht mein String so aus: [Auto/|,3,254,15,0,|]. Mit
Code:
if(strstr(chararray_ser, "Auto"))
    {
      Serial.println("String enthaelt ein Auto");
    }
teste ich, ob der String ein Sinn macht, bei mir ordne ich die Daten, die reinkommen, gleich der richtigen Stelle zu. Die Auswertung sollte jedoch nach der Stringkonvertierung erfolgen.
Viel Spaß damit und bei Verbesserungen ect. immer gern eine Info an mich.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Größe eines Char-Arrays ermitteln Karl Stanger 7 684 07.03.2021 18:01
Letzter Beitrag: Tommy56
  Mittelwert über 30sek. ermitteln Gerdchen03 7 1.390 01.02.2020 18:38
Letzter Beitrag: Gerdchen03
  Anzahl der DS18B20 ermitteln AlphaRay 3 2.587 02.08.2017 09:13
Letzter Beitrag: Fips
  Stunden bis Datum ermitteln facebraker 5 2.627 22.02.2016 22:17
Letzter Beitrag: Bitklopfer

Gehe zu:


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