I have created a simple program that will allow a air actuator to be on/off in specific patterns.
I tried to make a program block for all the programs and the reset function however the program gets stuck somewhere and the "L" diod blinks and resets the whole program.
The mock programs is for debug, so for the moment the output is on 1 time for program 1 and 2 times for program 2 etc.
This works, the reset works, however when i start one program, i want the output to stay on after the block is done so that i have to reset it with the reset button. In this case the arduino resets itself after 12-28 seconds.
// Vilka ingångar/utgångar som används till vad
const int knapp1 = 7; // Program 1
const int knapp2 = 8; // Program 2
const int knapp3 = 9; // Program 3
const int knapp4 = 10; // Program 4
const int knapp5 = 11; // Program 5
const int knapp6 = 12; // Reset
const int ventil = 2; // Tryckluftsventil
// Variablar för om knappar är intryckta
boolean knapplage1 = false;
boolean knapplage2 = false;
boolean knapplage3 = false;
boolean knapplage4 = false;
boolean knapplage5 = false;
boolean knapplage6 = false;
void setup() {
// Detta körs vid uppstart av systemet
pinMode(knapp1, INPUT);
pinMode(knapp2, INPUT);
pinMode(knapp3, INPUT);
pinMode(knapp4, INPUT);
pinMode(knapp5, INPUT);
pinMode(knapp6, INPUT);
pinMode(ventil, OUTPUT);
}
void loop() {
// Kolla vilken knapp som trycks in
knapplage1 = digitalRead(knapp1);
knapplage2 = digitalRead(knapp2);
knapplage3 = digitalRead(knapp3);
knapplage4 = digitalRead(knapp4);
knapplage5 = digitalRead(knapp5);
knapplage6 = digitalRead(knapp6);
// Starta respektive program eller återställa systemet
if (knapplage1 == 1){
program1();
}
else if (knapplage2 == HIGH) {
program2();
}
else if (knapplage3 == HIGH) {
program3();
}
else if (knapplage4 == HIGH) {
program4();
}
else if (knapplage5 == HIGH) {
program5();
}
else if (knapplage6 == HIGH) {
reset();
}
else {
delay(10);
}
}
void program1() { // Program 1
digitalWrite(ventil, HIGH); // Ställ tider här 1000 = 1 sekund
// HIGH = ventil påverkad, LOW = ventil opåverkad
}
void program2() { // Program 2
digitalWrite(ventil, HIGH); // Ställ tider här 1000 = 1 sekund
delay(500); // HIGH = ventil påverkad, LOW = ventil opåverkad
digitalWrite(ventil, LOW);
delay(500);
digitalWrite(ventil, HIGH);
}
void program3() { // Program 3
digitalWrite(ventil, HIGH); // Ställ tider här 1000 = 1 sekund
delay(500); // HIGH = ventil påverkad, LOW = ventil opåverkad
digitalWrite(ventil, LOW);
delay(500);
digitalWrite(ventil, HIGH);
delay(500);
digitalWrite(ventil, LOW);
delay(500);
digitalWrite(ventil, HIGH);
}
void program4() { // Program 4
digitalWrite(ventil, HIGH); // Ställ tider här 1000 = 1 sekund
delay(500); // HIGH = ventil påverkad, LOW = ventil opåverkad
digitalWrite(ventil, LOW);
delay(500);
digitalWrite(ventil, HIGH);
delay(500);
digitalWrite(ventil, LOW);
delay(500);
digitalWrite(ventil, HIGH);
delay(500);
digitalWrite(ventil, LOW);
delay(500);
digitalWrite(ventil, HIGH);
}
void program5() { // Program 5
digitalWrite(ventil, HIGH); // Ställ tider här 1000 = 1 sekund
delay(500); // HIGH = ventil påverkad, LOW = ventil opåverkad
digitalWrite(ventil, LOW);
delay(500);
digitalWrite(ventil, HIGH);
delay(500);
digitalWrite(ventil, LOW);
delay(500);
digitalWrite(ventil, HIGH);
delay(500);
digitalWrite(ventil, LOW);
delay(500);
digitalWrite(ventil, HIGH);
delay(500);
digitalWrite(ventil, LOW);
delay(500);
digitalWrite(ventil, HIGH);
}
void reset() { // Sätter kolven i sitt "hemmaläge"
digitalWrite(ventil, LOW); // HIGH = ventil påverkad, LOW = ventil opåverkad
}