Unterbrechung des Programmes

Hallo zusammen,

bisher war ich stiller Mitleser und habe immer eine Antwort auf meine Fragen gefunden.

Nun habe ich eine Frage zu einem Programm, welches ich schreibe bei dem ich nicht weiter komme.
Ich würde mich über Hilfe freuen =)

Anwendung:
Ich habe einen kleinen Prüfaufbau gebaut, bei dem ich mit einem Relais ein ventil Schalte, welches einen Pneumatikkolben ein und ausfahren lässt. Das läuft in einer for-schleife mit Zähler und das ganze wird auf einem LCD Display angezeigt …Soweit so gut.

#include <LiquidCrystal.h>

//int lcd_key = 0;
int adc_key_in = 0;
const int buttonPin = 2; // Rollentaster

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// read the buttons
int read_LCD_buttons()
{adc_key_in = analogRead(0); }
long i=999999; //Wiederholungen
long v=0;

void setup()

{
Serial.begin (9600);
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print(“Start!”);
pinMode(3, OUTPUT);

}
void loop()
{
if (analogRead(0)<800)
{
for(v=0;v<=i;v++)

lcd.setCursor(0,0);
lcd.print(“Test…”);
delay(100);
lcd.setCursor(0,1);
lcd.print(F(" “));
lcd.setCursor(8,1);
lcd.print(“i=”);
lcd.setCursor(10,1);
lcd.print(i);
lcd.setCursor(8,0);
lcd.print(“v=”);
lcd.setCursor(10,0);
lcd.print(v);
digitalWrite(3, HIGH);
delay(750);
lcd.setCursor(0,1);
lcd.print(”---->");
digitalWrite(3, LOW);
delay(750);
lcd.setCursor(0,1);
lcd.print(F(" “));
lcd.setCursor(0,1);
lcd.print(”->");
}

}

Nun probiere ich mich schon seit einiger Zeit an einer Erweiterung. Da das ganze eine Prüfvorrichtung ist möchte ich, dass wenn der Kolben hängen bleiben sollte die Schleife gestoppt wird.
Ich habe einen Rollentaster in der vorderen Endlage montiert. Diesen lese ich über Pin2 mit digitalRead(buttonPin) aus.

Wie würdet Ihr das angehen? ich stehe dabei auf dem Schlauch =P

Vielen Dank im Voraus!

HenRii:
bisher war ich stiller Mitleser und habe immer eine Antwort auf meine Fragen gefunden.

Dann solltest du wissen, dass der Sketch in Code-Tags gepostet werden sollte, dann ist dieser besser lesbar.

Verwende dazu die Schaltfläche </> oben links im Editorfenster.
Das kannst du auch nachträglich machen.
Dazu den Sketch markieren und die Schaltfläche klicken.

Damit wird dieser für alle besser lesbar.

Wie würdet Ihr das angehen? ich stehe dabei auf dem Schlauch =P

Bei zeitkritischen Funktionen darfst du kein delay() verwenden, also weg damit und Funktionen mit millis() einsetzen.
Sieh dir dazu das Beispiel “BlinkWithoutDelay” in der IDE an.

loop() heisst loop, weil diese Funktion immer wieder aufgerufen werden sollte. Und nicht alle achtzehneinhalb Tage. (1.6 s * 999999 )

Auch kannst du die Funktionint read_LCD_buttons()weglassen, oder dich zumindest um die Warnung warning: no return statement in function returning non-void [-Wreturn-type] kümmern.

HenRii: bisher war ich stiller Mitleser ... Wie würdet Ihr das angehen?

Dann hast Du bestimmt schon von millis() und endlichen Automaten gelesen, genau damit würde ich es machen. Meine dazu verfaßten Anleitungen kennst Du dann auch? Und die Geschichte zum Nachtwächter gehört zu Deiner Lieblingslektüre? Dann bist Du auf dem Weg, den ich beschreiten würde.

Nicht meine Lösung wäre:

if (!digitalRead(buttonPin)) break;