Ich sende einen String an den Arduino Mega (Serial). Dieser wird vom Arduino empfangen und es wird gefragt was empfangen wurde. Je nach empfangenen String sendet dieser einen oder mehrere Befehle an ein anderes Gerät über den Serial1. Dieses führt eine entsprechende Aktion gemäß Befehl aus. Das klappt alles. Jetzt fehlt es aber an der Umsetzung den String mit den Messwerten an Serial1 wieder einzulesen. Es soll auch bei diesem bis zu einem \r gelesen werden. Ich hoffe das Programm ist so kommentiert, dass es verständlich ist.
Den verwendeten Code bitte im unteren Post angucken... Der erste Eintrag war zu undurchsichtig...
Ja beim nächsten mal.. War schon ne Weile nicht mehr hier..
Also nochmal so zum Verständnis... Der Haupteil um den es jetzt geht ist die Bedingung Auto.. der Rest ist mehr oder weniger nur für euch zum nachvollziehen was ich hier mache/ machen möchte.
Es wird wenn "Auto" an Serial gelesen wird also die verschiedenen Parameter eingestellt. Woraufhin die Messung ausgeführt wird. Das dauert dann ein paar Sekunden.. 40s hat gepasst.. während dieser Zeit sendet das Gerät 5 mal pro sekunde einen Status, welcher mich an sich nicht interessiert. Die Messung wird beendet. Danach wird seriell die Messwertabfrage gesendet.. Das Gerät antwortet prompt mit einem 42 Zeichen langen String, welchen ich einlesen möchte und direkt weiter über Serial 1 senden möchte. Die weiterverarbeitung erfolgt dann in Python.
Ich habe das ganze jetzt so probiert (ist jetzt auf "Auto" beschränkt):
char Null = 48;
char Eins = 49; //Buchstaben zum senden festlegen
char Zwei = 50;
char Drei = 51;
char Vier = 52;
char Fuenf = 53;
char Sechs = 54;
char Sieben = 55;
char Acht = 56;
char Neun = 57;
char A = 65;
char B = 66;
char C = 67;
char D = 68;
char F = 70;
char CR = 13;
char LF = 10;
char Semi = 59;
char STX = 2;
char ETX = 3;
String str;
const int SERIAL_BUFFER_SIZE = 81;
char serialBuffer[SERIAL_BUFFER_SIZE];
void setup(){
Serial.begin(4800);
Serial1.begin(4800);
}
void loop()
{
if(readSerial())
processSerial();
}
bool readSerial()
{
static unsigned int index;
if(Serial.available() > 0)
{
char c = Serial.read();
if(c >= 32 && index < SERIAL_BUFFER_SIZE - 1)
{
serialBuffer[index++] = c;
}
else if(c == '\r')
{
serialBuffer[index] = '\0';
index = 0;
return true;
}
}
return false;
}
void processSerial() //bis hierhin funktioniert es mit dem einlesen
{
if(strcmp_P(serialBuffer, PSTR("Auto")) == 0) //wenn der eingelesene String "Auto" ist tue...
{
Serial.print(STX);
Serial.print(Zwei);
Serial.print(Vier);
Serial.print(Semi);
Serial.print(Semi); //Parameter festlegen
Serial.print(D);
Serial.print(C);
Serial.print(ETX);
delay(500);
Serial.print(STX);
Serial.print(Zwei);
Serial.print(Zwei);
Serial.print(Semi);
Serial.print(Semi);
Serial.print(D);
Serial.print(A);
Serial.print(ETX);
delay(500);
Serial.print(STX);
Serial.print(Null); //Messung starten
Serial.print(Eins);
Serial.print(Semi);
Serial.print(Semi);
Serial.print(D);
Serial.print(Sieben);
Serial.print(ETX);
delay(60000); //warten bis Messung vorbei ist
Serial.print(STX);
Serial.print(Eins); //Messwertabfrage... jetzt kommt der wichtige Teil
Serial.print(Acht); //Die Abfrage wird gesendet und die Antwort kommt auf Rx1 rein
Serial.print(Semi); //Die Antwort kommt nicht alleine während der Messung kommt 5 mal
Serial.print(Semi); //pro sek. der Status
Serial.print(D); //nach ende wird der status nicht mehr gesendet .. die antwort kommt
//einzeln nach der Abfrage also nach dem delay(60000);
Serial.print(F); //Die Antwort soll dann auf Tx1 ausgegeben werden
Serial.print(ETX); //Dieses hat 42 Zeichen
delay (100);
if(Serial1.available() > 0)
{
str = Serial1.readStringUntil('\r');
}
Serial1.print(str);
}
}
Jetzt passiert dabei aber folgender Fehler.. ich bekomme den letzten Status von den 5 mal pro sekunde ausgegebenen Status über den Serial 1 gesendet.