Hi there, i wrote a little proramm for a machine, the start button work very well but the stop button not.
i tried to use the atachinterrupt command, but the examples in the internet didnt helped me.
If i push stop button, the last point of the main loop stop (but led still burn) and after release it go back to the main loop. But i want that the stop button kill the main loop. so that i need to push start again. pls help. ragards
program:
const int stopppin = 2; //Eingänge deklarieren
const int startpin = 23;
const int magnetpin = 24;
const int distanzlipin = 25;
const int distanzrepin = 26;
const int motorlipin = 30;
const int motorrepin = 31;
const int hubmagnetlipin = 32;
const int hubmagnetrepin = 33;
const int warnrotpin = 34;
const int warngelbpin = 35;
const int warngruenpin = 36;
const int summerpin = 37;
const int led = 13;
volatile int startstatus=LOW;
int magnetstatus;
int warnrotstatus;
//volatile int stoppstatus; //Variable nicht im Register sonder Ram
void setup() {
pinMode (stopppin, INPUT); //Low=High wegen PULLUP
digitalWrite(stopppin, HIGH); //High setzen wegen PULLUP
pinMode (startpin, INPUT); //Low=High wegen PULLUP
digitalWrite(startpin, HIGH);
pinMode (magnetpin, INPUT);
pinMode (distanzlipin, INPUT);
pinMode (distanzrepin, INPUT);
pinMode (motorlipin, OUTPUT);
digitalWrite(motorlipin, HIGH); //HIGH = Relais Aus
pinMode (motorrepin, OUTPUT);
digitalWrite(motorrepin, HIGH);
pinMode (hubmagnetlipin, OUTPUT);
digitalWrite(hubmagnetlipin, HIGH);
pinMode (hubmagnetrepin,OUTPUT);
digitalWrite(hubmagnetrepin, HIGH);
pinMode (warnrotpin, OUTPUT);
digitalWrite(warnrotpin, HIGH);
pinMode (warngelbpin, OUTPUT);
digitalWrite(warngelbpin, HIGH);
pinMode (warngruenpin, OUTPUT);
digitalWrite(warngruenpin, HIGH);
pinMode (summerpin, OUTPUT);
digitalWrite(summerpin, HIGH);
pinMode (led, OUTPUT);
attachInterrupt(0, abbruch, CHANGE);
}
void loop () {
unserprogramm ();
}
void unserprogramm () {
int gesperrtli=0; //Gesperrt Merker links
int gesperrtre=0; //Gesperrt Merker rechts
startstatus=digitalRead(startpin); //lese Starttaste
while (startstatus == LOW){ //Solange einmal Start betätigt
if (digitalRead(warnrotpin)==HIGH){
if (digitalRead(magnetpin)==HIGH){
if (digitalRead(distanzlipin)==HIGH){
if (gesperrtli==0){
digitalWrite(hubmagnetrepin, LOW);
delay(200);
digitalWrite(motorlipin, LOW);
delay(3000);
if (digitalRead(distanzlipin)==LOW){
delay(4000);
digitalWrite(motorlipin, HIGH);
digitalWrite(hubmagnetrepin, HIGH);
digitalWrite(summerpin, LOW);
digitalWrite(warngruenpin, LOW);
delay(1000);
digitalWrite(summerpin, HIGH);
digitalWrite(warngruenpin, HIGH);
}
else{
digitalWrite(motorlipin, HIGH);
digitalWrite(hubmagnetrepin, HIGH);
if (gesperrtre==1){
digitalWrite(warnrotpin, LOW);
}
else{
gesperrtli=1;
digitalWrite(warngelbpin, LOW);
delay(15000);
digitalWrite(warngelbpin, HIGH);
}
}
}
}
}
else {
digitalWrite(warngelbpin, LOW);
digitalWrite(warnrotpin, LOW);
}
}
if (digitalRead(warnrotpin)==HIGH){
if (digitalRead(magnetpin)==HIGH){
if (digitalRead(distanzrepin)==HIGH){
if (gesperrtre==0){
digitalWrite(hubmagnetlipin, LOW);
delay(200);
digitalWrite(motorrepin, LOW);
delay(3000);
if (digitalRead(distanzrepin)==LOW){
delay(4000);
digitalWrite(motorrepin, HIGH);
digitalWrite(hubmagnetlipin, HIGH);
digitalWrite(summerpin, LOW);
digitalWrite(warngruenpin, LOW);
delay(1000);
digitalWrite(summerpin, HIGH);
digitalWrite(warngruenpin, HIGH);
}
else{
digitalWrite(motorrepin, HIGH);
digitalWrite(hubmagnetlipin, HIGH);
if (gesperrtli==1){
digitalWrite(warnrotpin, LOW);
}
else{
gesperrtre=1;
digitalWrite(warngelbpin, LOW);
delay(15000);
digitalWrite(warngelbpin, HIGH);
}
}
}
}
}
else {
digitalWrite(warngelbpin, LOW);
digitalWrite(warnrotpin, LOW);
}
}
}
}
void abbruch (){
startstatus = !startstatus;
}