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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | #include “IRremote.hpp” // Pin für den Auslöser des Interrupts int InterruptPin = 2; // Array mit 5 Elementen und den zugehörigen Ports int LED[5] = {3, 4, 5, 6, 7}; // Anzahl der LEDs feststellen int LEDMax = sizeof(LED) / sizeof(LED[0]); // Variable im Flash-Speicher ablegen volatile bool Status = true; int Leuchtdauer = 100; void setup() { // Zufallsgenerator starten randomSeed(analogRead(A0)); // Empfänger starten IrReceiver.begin(InterruptPin); for (int i = 0; i < LEDMax; i++) { pinMode(LED[i], OUTPUT); } // Funktion Schalten() dem Interrupt-Pin zuordnen attachInterrupt(digitalPinToInterrupt(InterruptPin), Schalten, FALLING); } void loop() { // Daten lesen if (IrReceiver.decodedIRData.address == 0) { if (IrReceiver.decode()) { delay(200); // nächsten Wert lesen IrReceiver.resume(); Status = true; /* solange der Status true ist, wird die jeweilige while-Schleife ausgeführt, ein weiterer Druck auf eine Taste der Fernbedienung löst den Interrupt aus -> Status wird zu false, die while-Schleife wird nicht erneut ausgeführt */ switch (IrReceiver.decodedIRData.command) { // Taste 1: Lauflicht vor case 22: while (Status) LauflichtHin(); break; // Taste 2: LEDs leuchten vor und zurück case 25: while (Status) LauflichtHinUndHer(); break; // Taste 3: LEDs blinken nacheinander case 13: while (Status) LauflichtMitBlinken(); break; } } } } void Schalten() { Status = false; } void LEDBlinken(int LEDNummer, int Anzahl) { for (int i = 0; i <= Anzahl; i++) { digitalWrite(LEDNummer, HIGH); delay(Leuchtdauer); digitalWrite(LEDNummer, LOW); delay(Leuchtdauer); } } void LauflichtHin() { for (int i = 0; i < LEDMax; i++) { digitalWrite(LED[i], HIGH); delay(Leuchtdauer); digitalWrite(LED[i], LOW); } } void LauflichtHinUndHer() { for (int i = 0; i < LEDMax; i++) { digitalWrite(LED[i], HIGH); delay(Leuchtdauer); digitalWrite(LED[i], LOW); } // und wieder zurück for (int i = LEDMax - 1; i >= 0; i–) { digitalWrite(LED[i], HIGH); delay(Leuchtdauer); digitalWrite(LED[i], LOW); } } void LauflichtMitBlinken() { for (int i = 0; i < LEDMax; i++) { int Anzahl = random(1, 5); /* aktuelle LED i einschalten ⇒ Funktion LEDBlinken aufrufen */ LEDBlinken(LED[i], Anzahl); } } |
Letzte Aktualisierung: