Auslesen der letzten Ausgabe auf dem Seriellen Monitor

Hey,
der Vorhandene Code soll ein Signal aus Python (Einen Namen) auslesen bzw. ausgeben.
Da Python aber Buchstaben nacheinander ausgibt musste ich einen "Marker" setzten (in diesem
Fall das "-" ) um das ende des Wortes zu markieren und eine neue Zeile anzufangen. Jetzt stellt
sich allerdings die Frage wie ich diesen Namen als komplettes auslesen kann. Ich hatte die Idee,
im Prinzip die letzte Zeile bzw. die letzte Ausgabe des Seriellen Monitors auszulesen und dann als
beispielsweise Variable oder dergleichen abzuspeichern.
Ist das möglich?
Vielen Dank im Vorraus

Hier der aktuelle Code:


int ser;
  
void setup() {

  Serial.begin(9600);
  Serial.println("Ready");

}

void loop() 
  {

    go:

    if (Serial.available())
      {

      char inByte = Serial.read();
     
       if (inByte == '-')
        {

          Serial.println(' ');
          goto go;

       }

      Serial.print(inByte); 

      }  
   }

(deleted)

Hallo,

in Zukunft bitte für Code die Codetags verwenden.

Probiere das einmal, ggf. Buffersizie anpassen.

const byte RX_BUFFER_SIZE = 32;
char rxBuffer[RX_BUFFER_SIZE];   // an array to store the received data

void setup()
{
  Serial.begin(9600);
  Serial.println("\nSTART");
}

void loop()
{
  if (readSerial() )
  {
    showData();
  }
}


bool readSerial()
{
  static byte index = 0;
  
  if (Serial.available() )     
  {
    char c = Serial.read();

    if (c >= 32 && (index < RX_BUFFER_SIZE - 1) )
    {
      rxBuffer[index++] = c;
    }
    else if (c == '-')
    {
      rxBuffer[index] = '\0';   // terminate the string
      index = 0;
      return true;
    }
  }

  return false;
}


void showData()
{
   Serial.println(rxBuffer);
}

(deleted)

Peter-CAD-HST:
Neben den Beispielen aus dem IDE findest du hier weitere Anleitungen, die gut beschrieben sind.

Solchen Quatsch benötigt das Internet nicht noch zusätzlich. Habe mal reingeschaut. Wer für gleichzeitige Dinge immer noch delays verwendet, hat irgendwas verpasst und führt damit Neulinge unnötig in die Irre. Auf Grund der Tatsache das er es selbst nicht besser weiß. Sich selbst komischerweise aber sicher ist sein Unwissen anderen vermitteln zu müssen.

readSerial()

Ich sehe da ein return true, aber kein false.

Ansonsten hat das gewisse Ähnlichkeit mit meinen üblichen (primitiv) Parsern.
Wenn auch mit anderen Mitteln realisiert, aber das Verfahren ist gleich.

Letztens ein Double Parser

Hallo,

combie:
Ich sehe da ein return true, aber kein false.

Ich sehe es, es ist wirklich da, kein Mist.

Habs aber nochmal verbessert, gefällt mir so besser.

const byte RX_BUFFER_SIZE = 32;
char rxBuffer[RX_BUFFER_SIZE];   // an array to store the received data

void setup()
{
  Serial.begin(9600);
  Serial.println("\nSTART");
}

void loop()
{
  if (readSerial() )
  {
    showData();
  }
}


bool readSerial()
{
  static byte index = 0;
  bool state = false;
  
  if (Serial.available() )     
  {
    char c = Serial.read();

    if (c >= 32 && (index < RX_BUFFER_SIZE - 1) )
    {
      rxBuffer[index++] = c;
    }
    else if (c == '-')
    {
      rxBuffer[index] = '\0';   // terminate the string
      index = 0;
      state = true;
    }
  }

  return state;
}

Ich sehe es, es ist wirklich da, kein Mist.

OK, jetzt, wo ich mal die Tomaten von den Augen genommen habe, sehe ich es auch!

:smiling_imp: :smiling_imp: :smiling_imp:

(deleted)

Hallo,

warum mit define Orgie?

(deleted)

Danke so hat es geklappt!
Lg mr :wink:

Peter-CAD-HST:
Moin mr_mindblow

Hier kommt mein Lösungsvorschlag:

#define myBaud 1000000

#define yourBaud 9600
#define ProjektName "Auslesen der letzten Ausgabe auf dem Seriellen Monitor - Deutsch - Arduino Forum"
#define Groesse 255
#define EndeZeichen '-'
#define NewLine '\n'
#define EndOfLine '\0'
#define NeueZeichenKette true
#define KeineNeueZeichenKette not NeueZeichenKette
int  zeichenZaehler;
char inputBuffer[Groesse];
void setup() {
 // put your setup code here, to run once:
 Serial.begin(myBaud);
 Serial.print("File: ");
 Serial.println(FILE);
 Serial.print("Projekt: ");
 Serial.println(ProjektName);
}
void loop() {
 // put your main code here, to run repeatedly:
 if (Serial.available()) if (holezeichen())  Serial.println(inputBuffer);    // im array inputBuffer steht die empfangende Zeichenfolge ohne Endezeichen
}
bool holezeichen()
{
 char zeichen = Serial.read();
 if (zeichen == NewLine) return (KeineNeueZeichenKette);
 if (zeichen == EndeZeichen)
 {
   inputBuffer[zeichenZaehler] = EndOfLine; // inputBuffer mit EndOfLine abschliessen
   zeichenZaehler = 0;
   return (NeueZeichenKette);
 }
 else
 {
   inputBuffer[zeichenZaehler++] = zeichen;
   return (KeineNeueZeichenKette);
 }
}



Viel Spass beim Testen 
Gruss Peter
und gesund bleiben