Hallo Forengemeinde,
ich möchte von einem Anzeigegerät einen Wert auslesen und diesen dann
weiter verarbeiten.
Dazu ein Auszug aus meinem sketch:
void setup() {
// Inerruptroutine für pin 2 , funktion ereignistaster wird aufgerufen bei steigender flanke
attachInterrupt(0, ereignisTaster, RISING);
// initialize serial port:
Serial.begin(9600, SERIAL_8N1);
Serial1.begin(9600, SERIAL_8N1);
}
void loop() {
if (tasterState) {
// Istwert ausgeben (Befehl ans das Anzeigegerät)
Serial1.write(escInt);
Serial1.write(aInt);
Serial1.write(nullInt);
Serial1.write(zweiInt);
Serial1.write(nullInt);
Serial1.write(nullInt);
Serial1.write(crInt);
Serial1.write(lfInt);
delay(100);
// Istwert ausgeben (Befehl ans das Anzeigegerät)
Serial1.write(escInt);
Serial1.write(aInt);
Serial1.write(nullInt);
Serial1.write(zweiInt);
Serial1.write(nullInt);
Serial1.write(nullInt);
Serial1.write(crInt);
Serial1.write(lfInt);
index = 0;
inByte = 0;
while (Serial1.available()) // Don't read unless
// there you know there is data
{
if (index < 13){
inByte = Serial1.read(); // Read a character
inIstwert[index] = inByte; // Store it
index++; // Increment where to write next
Serial.println("schreibe");
}
else break;
}
Serial.println("Das habe ich empfangen: ");
for (int i = 0; i < 13; i++) {
Serial.print(inIstwert[i]);
Serial.print(", ");
}
Serial.println("");
tasterState = LOW;
}
}
void ereignisTaster() {
// Taster Entprellung - es kann nur 1 mal in der Sekunde der Interrupt ausgeführt werden
if((millis() - alteZeit) > entprellZeit) {
// innerhalb der entprellZeit nichts machen
tasterState = HIGH;
alteZeit = millis(); // letzte Schaltzeit merken
}
}
Nun habe ich aber das Problem, dass wenn ich den Istwert am Anzeigegerät
ändere und ihn dann erneut abfragen möchte, der Arduino diesen nicht bei
der ersten Abfrage erkennt.
Dazu ein kurzes Beispiel:
Der Wert auf der Anzeige beträgt 10,000.
Frage ich den Wert nun mittels Tastendruck ab so erhalte ich auf dem
seriellen Monitor:
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
Das habe ich empfangen:
2, 43, 48, 48, 48, 48, 49, 48, 48, 48, 48, 13, 10,
Änder ich nun den Istwert am Anzeigegerät auf 99,999 so erhalte ich den
korrekten Wert leider erst bei der zweiten Abfrage:
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
Das habe ich empfangen:
2, 43, 48, 48, 48, 48, 49, 48, 48, 48, 48, 13, 10, <--Wert geändert
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
Das habe ich empfangen:
2, 43, 48, 48, 48, 48, 49, 48, 48, 48, 48, 13, 10, <--erste Abfrage
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
schreibe
Das habe ich empfangen:
2, 43, 48, 48, 48, 48, 57, 57, 57, 57, 57, 13, 10, <--zweite Abfrage
Es kommt auch vor, dass ich den "richtigen" Wert erst nach der dritten
oder vierten Abfrage erhalte.
Ich kann mir dieses "Fehlverhalten" leider nicht erklären. Ich hoffe
mein Problem ist verständlich und es kann mir jemand weiterhelfen.
Freundliche Grüße
Markus