Arduino Serial-Read Problem

Hallo zusammen,

ich bastle gerade mit einem Arduino Mega und einem Vorprogrammierten Atmega328 rum um ein OBD-Display für mein Auto zu bauen.

Vorweg ich bin blutiger Anfänger ;).

Die kommunikation mit dem Chip funktioniert soweit, allerdings habe ich ein Problem damit die zurückgegebenen Werte weiterzuverarbeiten.

Sende ich dem Chip an Hardware-Port 3 "ata0" gibt er mir den AD-Wert von einem Pin zurück.

Bsp: 0426 \r >

Um mir das Ergebnis im seriellen Monitor anzeigen zu lassen habe ich folgenden Code entwickelt.

Die Anfrage wird nur ausgeführt, wenn ich im seriellen Monitor eine 1 eingebe (der die if-Bedingung mit der Check-Variable)

String H = "ata0";

if(Serial.available() > 0)
{
check = Serial.read();
}
delay(10);
if(check == 49)
{

Serial3.print(H);
Serial3.print("\r");

}

if(Serial3.available() > 0)
{

B = Serial3.parseInt();

Serial.println(B);

delay(10);

}

Allerdings bekomme ich als Output immer den eigentlichen Wert, dann ein CR und eine Null.

Z.B.

426
0

Gibt es eine Möglichkeit das ganze etwas eleganter zu lösen? Muss die Variablen ja hinterher weiterverarbeiten.

Vielen dank und ich hoffe die Frage ist nicht zu dämlich. Bin wie gesagt noch Anfänger auf dem Gebiet.
Gruß

Malte

T3-Malte:
... ein OBD-Display für mein Auto ...

Was ist ein OBD-Display?

Gruß

Gregor

Hi,

sorry, vergessen zu erwähnen. OBD=On Board Diagnose.
Also die Möglichkeit das Motorsteuergerät (oder andere) auslesen zu können.

Der Chip ist entsprechend vorprogrammiert um die verschiedenen Protokolle zu bedienen. Er muss "nur" mit den entsprechenden Befehlen gefüttert werden.
Gruß

Malte

http://forum.arduino.cc/index.php?topic=361111.msg2494595#msg2494595

Da mit einem LF. Kann man aber genauso mit CR machen wenn man die entsprechende Zeile anpasst.
Wobei sowie das aussieht eher '>' als Endzeichen willst (wenn das kein Formatierungsfehler ist). Dazu müsstest du unbedingt die Abfrage herumdrehen:

    if (c == '>' && index > 0)
    {
      serialBuffer[index] = '\0';
      index = 0;
      return true;
    }
    else if (c >= 32 && index < SERIAL_BUFFER_SIZE - 1)
    {
      serialBuffer[index++] = c;
    }

Die erste Version ist universell. Damit kann man alles einlesen, egal ob Zahlen oder Text, da erst mal immer Text eingelesen wird und der danach gewandelt wird. Dadurch kann man auch Text + Zahlen kombinieren.