/* Sketchname "sr595_lauflicht.ino" [Ihr Name] [Ihre Schulklassenbezeichnung] [Ihr Ausbildungsberuf] Schularbeit: Lauflichtprojekt 1b Framework: Arduino */ // Include der Library #include "sn74hc595.h" // Pins definieren (anpassen an Hardwareanschlüsse) #define DATA_PIN 11 // DS (Serial Data) #define CLOCK_PIN 12 // SHCP (Shift Clock) #define LATCH_PIN 10 // STCP (Latch/Storage Clock) #define POT_PIN A0 // Potenziometer an Analog Pin 0 #define DIP1_PIN 2 // DIP-Schalter Pin 1 #define DIP2_PIN 3 // DIP-Schalter Pin 2 // Objekt der Klasse shiftreg595 erstellen (Konstruktor mit 1 Register) shiftreg595 sr(DATA_PIN, CLOCK_PIN, LATCH_PIN); void setup() { // Pins als Input für DIP-Schalter konfigurieren (mit Pullup) pinMode(DIP1_PIN, INPUT_PULLUP); pinMode(DIP2_PIN, INPUT_PULLUP); // Shift Register initialisieren (alle LEDs aus) sr.setvalue(0); } void loop() { // Potenziometer lesen und Delay berechnen (0-1000 ms) int potValue = analogRead(POT_PIN); int delayTime = map(potValue, 0, 1023, 50, 1000); // Min 50ms, Max 1s // DIP-Schalter lesen (LOW = an, da Pullup) bool dip1 = !digitalRead(DIP1_PIN); bool dip2 = !digitalRead(DIP2_PIN); // Muster basierend auf DIP auswählen (00=M1, 01=M2, 10=M3, 11=M4) uint8_t pattern = 0; if (dip1) pattern += 1; if (dip2) pattern += 2; switch (pattern) { case 0: runPattern1(delayTime); break; // Muster 1 case 1: runPattern2(delayTime); break; // Muster 2 case 2: runPattern3(delayTime); break; // Muster 3 case 3: runPattern4(delayTime); break; // Muster 4 } } // Muster 1: LEDs einzeln von links nach rechts laufen void runPattern1(int delayTime) { for (int i = 0; i < 8; i++) { uint8_t value = 1 << i; // Bit i setzen sr.setvalue(value); delay(delayTime); } } // Muster 2: LEDs einzeln von rechts nach links laufen void runPattern2(int delayTime) { for (int i = 7; i >= 0; i--) { uint8_t value = 1 << i; sr.setvalue(value); delay(delayTime); } } // Muster 3: Zwei LEDs nebeneinander laufen void runPattern3(int delayTime) { for (int i = 0; i <= 6; i++) { uint8_t value = (1 << i) | (1 << (i + 1)); sr.setvalue(value); delay(delayTime); } } // Muster 4: Alle LEDs an, dann einzeln aus (Ping-Pong Effekt) void runPattern4(int delayTime) { // Alle an sr.setvalue(255); delay(delayTime * 2); // Einzeln aus for (int i = 0; i < 8; i++) { uint8_t value = 255 ^ (1 << i); // Bit i löschen sr.setvalue(value); delay(delayTime); } // Alle wieder an für nächsten Zyklus sr.setvalue(255); delay(delayTime * 2); }