Hallo,
ich habe so meine Probleme mit einer "unterbrechbaren Endlosschleife"
also:
void loop()
dann kommt eine "Debounce Routine"
diese fragt nacheinander 4 Taster ab:
mit while(digitalRead(S4) == HIGH)
fängt das Problem an, ich möchte das LCD löschen, einmal bei "Einsprung".
also: ich drücke S4, das Lcd wird gelöscht- die aktuellen Temperaturen
werden geholt und geschrieben. Das soll in einer Schleife laufen (ohne
jedesmal das Display zu löschen), bis S4 wieder gedrückt wird.
Die "Debounce Routine" in der Schleife ist die gleiche, wie in der
"void loop()"
So wie der Code jetzt laüft, springe ich mit S4 in die "Schleife"
das LCD wird nicht gelöscht und die Temperaturen werden geholt.
Das läuft solange wie ich S4 gedrückt halte. Lasse ich S4 wieder los,
laüft es sofort aus der Schleife.
Die "Debounce Routine" kommt aus IDE 1.0.5 Beispiele.
Hier der Code der "möchtegernSchleife:
while(digitalRead(S4) == HIGH) //hier fäng der Arger an*****************************************************
{
int reading = digitalRead(S4); // Taste lesen
if (reading != lastButtonState) // Taste gedrückt
{
lastDebounceTime = millis(); // Timer setzen
}
if ((millis() - lastDebounceTime) > debounceDelay)
{
if (reading != buttonState)
{
buttonState = reading;
// Serial.print(buttonState); // +++ externe Kontrollfunktion +++
if (buttonState == HIGH) {
}
}
}
{
//I2C Interface initialisieren,
Wire.begin(); // hier wird die Temperatur geholt*************************************
//Skalierungsfaktoren laut Datenblatt
#define TFACTOR 99.2909
#define TDELTA 40.0
#define HFACTOR 163.83
unsigned int traw;
unsigned int hraw;
double temp;
double hum;
int i;
unsigned char buffer[4];
//Messung starten
Wire.beginTransmission(HYT939_ADDR); // transmit to device #44 (0x2c)
Wire.endTransmission(); // stop transmitting
//100ms warten
delay(100);
//4 Bytes vom Sensor lesen
Wire.requestFrom(HYT939_ADDR, 4,true);
i=0;
while(Wire.available()) {
char c = Wire.read(); // receive a byte as character
buffer[i]=c;
i++;
}
//Rohdaten aus Puffer lesen
traw=buffer[2]*256+buffer[3];
hraw=buffer[0]*256+buffer[1];
//Daten laut Datenblatt maskieren
traw&=0xfffc;
hraw&=0x3fff;
traw=traw/4;
/*
//Rohdaten ausgeben, zur eventuellen Fehlersuche
Serial.print("\r\nTemp Raw:");
Serial.println(traw);
Serial.print("Hum Raw:");
Serial.println(hraw);
*/
//Rohdaten Umrechnen
temp=(double)traw/TFACTOR;
temp=temp-TDELTA;
hum=(double)hraw/HFACTOR;
// hier wird sie ins Display geschrieben*************************************
lcd.setCursor(0, 0);
lcd.print(hum,1); // LCD-Ausgabe mit 1 Dezimalstelle
lcd.print("%");
lcd.setCursor(15, 0);
lcd.print(temp,1); // LCD-Ausgabe mit 1 Dezimalstelle
lcd.write(GradSym);
//LED Blinken
digitalWrite(LED, HIGH);
delay(100);
digitalWrite(LED, LOW);
delay(100);
}
// save the reading. Next time through the loop,
// it'll be the lastButtonState:
lastButtonState = reading;
}
(digitalRead(S4) == HIGH);// das funktioniert nicht******************************************
// lastButtonState = reading; // Taste Zustand festhalten
// (digitalRead(S4) == HIGH);
// hier sollte Schleife Ausgang sein und void loop() "weiter" wenn keine taste
// gedrückt ist
lastButtonState = reading; // Taste Zustand festhalten, ist "Debounce Routine" vor Einsprung in Schleife
wäre nett, wenn mit jemand auf die Sprünge helfen könnte
Gruß und Dank
Andreas