-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAdventBoxCode.ino
More file actions
69 lines (58 loc) · 2.04 KB
/
AdventBoxCode.ino
File metadata and controls
69 lines (58 loc) · 2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <EEPROM.h>
// Verzögerung in ms, sodass jeder Tastendruck nur einmal gezählt wird.
#define BUTTON_DELAY 250
// Verzägerung in ms, damit die LEDs nur langsam nacheinander aufleuchten.
#define LED_DELAY 0
#define lmillis() ((long)millis())
const byte numLeds = 4;
const byte eepromAddress = 0;
const byte buttonPin = 8;
const byte *ledPins[numLeds] = {2,3,7,10};
byte ledsLit = 0;
long lastButtonPress, lastLedToggle;
void setup()
{
// Zur Fehlersuche den Kommentar "Serial.begin(9600)" auskommentieren und printf-Debugging über den seriellen Monitor durchführen
// mit Serial.println(„mein Kommentar hier“)
// Serial.begin(9600);
// Ermittlung der Anzahl der LEDs, die vor dem Reset geleuchtet haben
EEPROM.get(eepromAddress, ledsLit);
ledsLit = max(0, min(4, ledsLit));
// Pinmode des Buttons auf Eingabe festlegen und Referenzwert setzen
pinMode(buttonPin, INPUT_PULLUP);
digitalWrite(buttonPin, HIGH);
// Pinmode der LED-Pins auf Ausgabe festlegen
for (byte i = 0; i < numLeds; i++) {
pinMode(ledPins[i], OUTPUT);
}
// Nummer der LED in ledsLit einschalten, wie vorher aus EEProm ausgelesen
toggleLeds();
lastButtonPress = lmillis() + BUTTON_DELAY;
lastLedToggle = lmillis() + LED_DELAY;
}
void loop()
{
// Prüfen, ob Button gedrückt wurde
if (lmillis() - lastButtonPress >= BUTTON_DELAY && digitalRead(buttonPin) == LOW) {
lastButtonPress = lmillis() + BUTTON_DELAY;
ledsLit++;
ledsLit %= (numLeds + 1);
EEPROM.put(eepromAddress, ledsLit);
}
if (lmillis() - lastLedToggle >= LED_DELAY) {
lastLedToggle = lmillis() + LED_DELAY;
toggleLeds();
}
}
void toggleLeds()
{
// Zusatz A: Kannst du auch die LEDs in zufälliger Reihenfolge aufleuchten lassen?
// Zusatz B: Kannst du auch die LEDs wie eine Kerze aufflackern lassen? Zum Beispiel mit der Bibliothek #include <SoftPWM.h>?
for (byte i = 0; i < numLeds; i++) {
if ((i + 1) <= ledsLit) {
digitalWrite(ledPins[i], HIGH);
} else {
digitalWrite(ledPins[i], LOW);
}
}
}