Goedenavond,
Onderstaande code van Awsomemakes.com, ik trof z'n handleiding online
https://www.awesomemakes.com/wp-content/uploads/2021/09/NL-Handleiding…
Bij het drukken van de knop wordt na een ingesteld tijd de uitgang 2 seconde hoog.
Ik wil graag 2 inputs toevoegen om de aftel tijd aan te passen. Knop 1 tijd omhoog, knop 2 tijd omlaag.
Ik ben bekend met de IEC 61131-3 standaard maar ik snap niet hoe ik moet beginnen. Iemand tips?
#include <TM1637.h> // Importeer de Grove 4-Digit Display library
TM1637 klokDisplay(2, 3); // Maak een variabele klokDispay waarmee we de display bedienen
int tijdTotBuzzer = 10; // De timer loopt af na 20 seconden
// Dit gedeelte wordt slechts 1 keer uitgevoerd wanneer de Arduino wordt ingeschakeld
void setup() {
Serial.begin(9600);
pinMode(4, INPUT_PULLUP); // We gaan pin 4 gebruiken als input
pinMode(12, OUTPUT); // We gaan pin 12 gebruiken als output
klokDisplay.init(); // Start de display
klokDisplay.set(3); // Stel de helderheid in op 3 (0-7)
}
// Dit gedeelte wordt herhaald tot de microcontroller wordt uitgezet
void loop() {
int knopwaarde = digitalRead(4); // Lees of er een hoog of laag signaal op pin 4 staat
if(knopwaarde == LOW) { // Als het signaal op pin 4 LOW is:
aftellen(tijdTotBuzzer); // Roep de functie aftellen() aan
}
// Wacht 20 milliseconden zodat de microcontroller het niet te druk krijgt
delay(20);
}
void aftellen(long aantalSecondenAftellen){
// Bereken het aantal milliseconden dat we gaan aftellen
long aantalMillisecondenAftellen = aantalSecondenAftellen * 1000;
// De functie millis geeft het aantal milliseconden dat de microcontroller op dit moment aan staat
long begintijd = millis();
// Bereken op welk moment de timer moet afgaan
long eindtijd = begintijd + aantalMillisecondenAftellen;
// Voer onderstaande uit zolang de eindtijd niet bereikt is
while(millis() < eindtijd) {
// Bereken het aantal verstreken seconden
long verstrekenSeconden = (millis() - begintijd) / 1000;
// Bereken het aantal seconden totdat de timer afgaat
long aantalSecondenTotEinde = aantalSecondenAftellen - verstrekenSeconden;
// Roep tijdTotBuzzerWeergeven aan met het aantal seconden totdat de timer afgaat
tijdTotBuzzerWeergeven(aantalSecondenTotEinde);
// Wacht 20 milliseconden zodat de microcontroller het niet te druk krijgt
delay(20);
}
//Roep nog een keer tijdTotBuzzerWeergeven() aan met 0 als argument zodat ook 00:00 nog wordt weergegeven
tijdTotBuzzerWeergeven(0);
// Wanneer de eindtijd bereikt is komen we hier en zetten we de buzzer aan
zetBuzzerAan();
// Wacht 2 seconden
delay(2000);
// Zet de buzzer uit
zetBuzzerUit();
}
// Deze functie zet de buzzer aan
void zetBuzzerAan() {
digitalWrite(12, HIGH); // Zet de buzzer aan met een hoog signaal op 12
}
// Deze functie zet de buzzer uit
void zetBuzzerUit() {
digitalWrite(12, LOW); // Zet de buzzer aan met een laag signaal op 12
}
// Deze functie toont de resterende tijd totdat de buzzer afgaat
void tijdTotBuzzerWeergeven(int aantalSecondenTotEinde){
// Bereken het aantal hele minuten welke weergegeven moeten worden
int minuten = aantalSecondenTotEinde / 60;
// Bereken het aantal seconden welke weergegeven moeten worden
int seconden = aantalSecondenTotEinde % 60;
// Bereken de hele seconden welke we gaan weergeven op positie 3 van de display
int heleSeconden = seconden % 10;
// Bereken de tientallen seconden welke we gaan weergeven op positie 2 van de display
int tientallenSeconden = seconden / 10 % 10;
// Bereken de hele minuten welke we gaan weergeven op positie 1 van de display
int heleMinuten = minuten % 10;
// Bereken de tientallen minuten welke we gaan weergeven op positie 0 van de display
int tientallenMinuten = minuten / 10 % 10;
// Toon de juiste getallen op de display en zet de dubbele punt aan
klokDisplay.display(0, tientallenMinuten);
klokDisplay.display(1, heleMinuten);
klokDisplay.point(1);
klokDisplay.display(2, tientallenSeconden);
klokDisplay.display(3, heleSeconden);
}