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 | // Array mit 5 Elementen und den zugehörigen Pins byte LED[5] = {3, 4, 5, 6, 7}; // Anzahl der LEDs feststellen byte LEDMax = sizeof(LED); // Interruptpin #define EncoderPinA 2 #define EncoderPinB 8 // Leuchtdauer beim Start: 100 Millisekunden volatile unsigned int Leuchtdauer = 100; // Sprung in Schritten, wenn eine Bewegung erkannt wird int SprungSchritte = 10; void setup() { Serial.begin(9600); for (int i = 0; i < LEDMax; i++) { pinMode(LED[i], OUTPUT); } pinMode(EncoderPinA, INPUT_PULLUP); pinMode(EncoderPinB, INPUT_PULLUP); // Interrupt-Pin EncoderPinA zuordnen attachInterrupt(digitalPinToInterrupt(EncoderPinA), DrehgeberLesen, CHANGE); } void loop() { // Lauflicht starten for (int i = 0; i < LEDMax; i++) { Lauflicht(); } } void DrehgeberLesen() { /* wenn beide Drehgeber-Pins gleich sind -> Bewegung vorwärts sind sie unterschiedlich -> Bewegung rückwärts. Drehung nach links -> Leuchtdauer vergrößern Drehung nach rechts -> Leuchtdauer verkleinern */ if (digitalRead(EncoderPinA) == digitalRead(EncoderPinB)) { Leuchtdauer += SprungSchritte; } else Leuchtdauer -= SprungSchritte; if (Leuchtdauer < 100) Leuchtdauer = 100; } void Lauflicht() { for (int i = 0; i < LEDMax; i++) { // aktuelle LED i einschalten digitalWrite(LED[i], HIGH); delay(Leuchtdauer); digitalWrite(LED[i], LOW); } } |
Letzte Aktualisierung: