erledigt - "unterbrechbaren Endlosschleife" gesucht

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

Also ganz allgemein kannst du eine while oder for-Schleife jederzeit mit break verlassen:
http://arduino.cc/de/Reference/Break

Deshalb kann man z.B. sowas machen:

while(1)
{
     ....

     if(digitalRead(...) == HIGH)
            break;
}

vergiß while

benutze eine Statusvariable für den Taster. So weißt Du ob die loop() schleife das erste mal auf den gedrückten Taster trifft oder nicht. Das gleiche wenn Du den Taster losläßt.
So weißt Du ob Du beim ersten mal das Display löschen sollst ecc

grüße Uwe

Hallo Serenifly,
ja das kenne ich, funktioniert aber nicht, und das LCD löschne ist damit auch leider nicht gelöst.
So langsam habe ich die "DebounceRoutine" in Verdacht.
Schau´n wir mal, könnte ja sein das Anderen noch etwas auffällt.
Gruß und Dank
Andreas

Hallo uwefed,
das wäre eine Option, die ich mal probieren könnte.
Gruß und Dank
Andreas

Hallo uwefed,
der Tip mit den Variablen war Gold wert.
Andreas sagt, Danke schön

Gut daß ich Dir helfen konnte
Uwe