While-Schleife

Hi,

ich möchte mittels einer While schleife einen Code ausführen, solange ein Piezoelement gedrückt ist.

Ich kann zwar einen Code ausführen, wenn das Piezo gedrückt wird, aber das mit dem solange es gedrückt wird.
Könnt ihr meinen Code dahingehend ergänzen? Der Code unten funktioniert, macht aber nicht das was es soll.

// these constants won't change:
const int ledPin = 13;      // LED connected to digital pin 13
const int knockSensor = A0; // the piezo is connected to analog pin 0

// these variables will change:
int sensorReading = 0;      // variable to store the value read from the sensor pin
int ledState = LOW;         // variable used to store the last LED status, to toggle the light

void setup() {
  pinMode(ledPin, OUTPUT); // declare the ledPin as as OUTPUT
  Serial.begin(9600);       // use the serial port
}

void loop() {
    sensorReading = analogRead(knockSensor);
    while( sensorReading > 100 ) //while the button is pressed
  {
    Serial.println(sensorReading);
    delay(10000);
    sensorReading = 0;
  }
  Serial.println("Ende");
  delay(100);  // delay to avoid overloading the serial port buffer
}

Lass die while-Schleife weg. Du hast doch loop.
Wirf die delays raus, während dieser Zeit kerfolgt keine Prüfung der Eingabe. Steuere das Zeitverhalten stattdessen mit millis().
Schaue Dir dazu BlinkWithoutDelay in den Beispielen Deiner IDE an und verstehe es. Dabei kann Dir die Nachtwächtererklärung helfen.

Gruß Tommy

To late :wink:
delay(10000); Hier sehe ich die Probleme, die While-Schleife und der restliche µC pausiert für 10 Sekunden bei jedem Durchlauf.

Denkfehler, ein Piezo lebt ja von werteänderungen, und daher ist so eine Schleife nicht möglich, muss mir nen anderen Knopf dafür suchen :confused:

Hi

Wenn Du den Pin auf halbe Spannung ziehst, kannst Du den Piezo auf >512 und <512 abfragen.
Beim Drücken bekommst Du einen Impuls in die eine Richtung, beim Loslassen Einen in die Andere - Näheres steht bestimmt im Datenblatt - Welches mich auch interessieren würde.

MfG