in meinem Code habe ich eine while-Schleife, in welcher ich eine Funktion eingebaut habe, damit der Code erst weiterläuft wenn ich eine Eingabe getätigt habe:
while (Serial.available()==0) {
}
Wenn die while-Schleife jedoch ein weiteres Mal durchläuft, funktioniert das warten jedoch nicht. Was kann ich dagegen tun? Hier mein Code:
void choose_signal() {
Serial.println("Welches Signal soll geändert werden?");
while (Serial.available()==0) { // Überprüfung, ob Daten über die serielle Schnittstelle verfügbar sind
char input[20]; // Array zur Speicherung der Eingabe
Serial.readStringUntil('\n').toCharArray(input, sizeof(input)); // Lesen der seriellen Daten in den char-Array
if (strcmp(input, "TC") == 0) { // Prüfen, ob die Variable 1 geändert werden soll
Serial.println("Welche Spannung soll angelegt werden?"); //Prompt User for input
while (Serial.available()==0) {
}
TC = Serial.parseFloat();
TC = TC * 1000;
dac.set(3, TC);
float tol_max = TC*1.1;
float tol_min = TC*0.9;
int read_value = dac.readDAC(3);
//if ((tol_min < read_value) && (read_value < tol_max)) {
if (tol_min < read_value <tol_max) {
Serial.print("TC wurde erfolgreich geändert und beträgt: ");
TC = TC/1000;
Serial.print(TC,4);
Serial.println(" V");
}
else {
Serial.println("Es ist ein Fehler aufgetreten");
delay(5000);
}
void choose_signal() {
Serial.println("Welches Signal soll geändert werden?");
while (Serial.available() == 0); // Überprüfung, ob Daten über die serielle Schnittstelle verfügbar sind
char input[20]; // Array zur Speicherung der Eingabe
Serial.readStringUntil('\n').toCharArray(input, sizeof(input)); // Lesen der seriellen Daten in den char-Array
while (Serial.available() > 0)Serial.read(); //das leert Buffer
if (strcmp(input, "TC") == 0) { // Prüfen, ob die Variable 1 geändert werden soll
Serial.println("Welche Spannung soll angelegt werden?"); //Prompt User for input
while (Serial.available() == 0);
TC = Serial.parseFloat();
while (Serial.available() > 0)Serial.read(); //das leert Buffer
TC = TC * 1000.0;
dac.set(3, TC);
float tol_max = TC * 1.1;
float tol_min = TC * 0.9;
int read_value = dac.readDAC(3);
if ((tol_min < read_value) && (read_value < tol_max)) {
Serial.print("TC wurde erfolgreich geändert und beträgt: ");
TC = TC / 1000.0;
Serial.print(TC, 4);
Serial.println(" V");
}
else {
Serial.println("Es ist ein Fehler aufgetreten");
delay(5000);
}
}
}
Das was Du suchst ist eine Schrittkette.
Du liest solange von der Seriellen, bis "TC" als Startkennzeichnug kommt.
Nächster Schritt ist dann solange zu lesen, bis ein Steuerzeichen kommt.
Dann wird ausgewertet - danach fängst Du an von vorn.
Da können noch so viele Steuerzeichen und zusätzliche Zeichen kommen wie wollen - der Ablauf und damit auch das Ergebnis ist immer das Gleiche.
Und das auch, wenn die Zeichenfolgen nicht in einem Durchgang kommen.
Wenn du sichergehen willst, dass Serial.available() 0 liefert, bis danach wieder eine neue Eingabe kommt, musst du warten, bis die vorige Eingabe komplett angekommen ist und sie dann komplett lesen (und gegebenenfalls alles uninteressante nachkommende ignorieren).
Ja ich weiß. Ich habe es nur so gemacht (und die richtige Variante als Kommentar) um testen zu können, wenn es wahr wäre, da ich den DAC noch nicht hier habe