Goedendag, ik heb een probleem met een code waar ik niet aan uit kom.
Het volgende. Ik heb een programma gemaakt met behulp van codeys, voor het aansturen van een machine. Simpel uitgelegd betreft het een loop waarin eerst 3 relais worden aangestuurd, daarna 1 relais en als laatste nog 1 relais wat gaat knipperend gaat schakelen.
Er is 1 trigger op pin 2 die gedurende de loop gecontroleerd word. Zodra deze low wordt zal pin 7 knipperend gaan schakelen. Dit heb ik tot dusverre werkend gekregen.
Nu het probleem. Ik krijg het niet voor elkaar om de tijdsduur van de setpins low 4,5,6 en setpins low 4 hoger te krijgen dan ca. 30 seconden.
Ieder getal hoger dan ca. 30.000 resulteert er in dat de uitgangen oneindig laag blijven. (Staan nu ingesteld op 5 seconden)
Ik heb op het forum al een soortgelijk probleem voorbij zien komen waarbij men de tijdseenheid verhoogd door bijvoorbeeld de volgende code te gebruiken:
1000 * 10 * 60 of 1000 * 10 * 60ul
Het toevoegen van een delay werkt niet omdat tijdens de delay er geen controle plaatsvind op pin 2.
Kan iemand mij de goede richting op helpen?
// Definieer de pinnen
const int pin4 = 4;
const int pin5 = 5;
const int pin6 = 6;
const int pin7 = 7;
const int input2 = 2;
bool pin7Knipperen = false; // Variabele om bij te houden of pin 7 moet knipperen ivm te hoog peil
void setup() {
// Zet de pinnen als OUTPUT
pinMode(pin4, OUTPUT);
pinMode(pin5, OUTPUT);
pinMode(pin6, OUTPUT);
pinMode(pin7, OUTPUT);
// Zet input2 als INPUT
pinMode(input2, INPUT);
// Zet alle pinnen hoog
digitalWrite(pin4, HIGH);
digitalWrite(pin5, HIGH);
digitalWrite(pin6, HIGH);
digitalWrite(pin7, LOW);
// Zet pin 4, 5, 6 en 7 om de beurt laag voor 1 seconde
setPinsSequentialLow();
}
// Functie om pinnen om de beurt laag te zetten voor 1 seconde
void setPinsSequentialLow() {
for (int pin = pin4; pin <= pin7; pin++) {
digitalWrite(pin, LOW); // Zet de pin laag
delay(1500); // Wacht 1 seconde
digitalWrite(pin, HIGH); // Zet de pin weer hoog
}
}
// Functie om pinnen laag te zetten met controle op input 2
void setPinsLow(int pin1, int pin2, int pin3, int duration) {
unsigned long startTime = millis();
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
while (millis() - startTime < duration) {
// Controleer de status van input 2
if (digitalRead(input2) == LOW) {
pin7Knipperen = true; // Zet pin7Knipperen op true als input2 laag is
break;
}
delay(50); // Kleine vertraging voor stabiliteit
}
}
void loop() {
// Zet pin 4, 5, en 6 laag voor 5 seconden met controle op input2
setPinsLow(pin4, pin5, pin6, 5000); // Wacht 5 seconden of input2 laag is
delay(5000);
// Zet pin 4, 5, en 6 weer hoog
digitalWrite(pin4, HIGH);
digitalWrite(pin5, HIGH);
digitalWrite(pin6, HIGH);
// Zet pin 4 laag voor seconden met controle op input2
setPinsLow(pin4, pin4, pin4, 5000); // Zet pin 4 laag voor 5 seconden of input2 laag is
digitalWrite(pin4, HIGH); // Zet pin 4 weer hoog
// Duur van het knipperen (10 minuten)
unsigned long startTime = millis();
while (millis() - startTime < 86400000) { // 24 uur in milliseconden
// Controleer de status van input 2
if (digitalRead(input2) == LOW) {
pin7Knipperen = true; // Zorg dat onder deze voorwaarde pin 7 blijft knipperen
}
if (pin7Knipperen) {
// Laat pin als alarm 7 knipperen
digitalWrite(pin7, HIGH);
delay(50);
digitalWrite(pin7, LOW);
delay(50);
} else {
// Laat alleen pin 7 knipperen als teken dat programma klaar is
digitalWrite(pin7, HIGH);
delay(1500);
digitalWrite(pin7, LOW);
delay(1500);
}
}
}