User Tools

Site Tools


lts-projekt

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
lts-projekt [2026/06/02 08:28] daddysunlts-projekt [2026/06/02 09:54] (current) daddysun
Line 1: Line 1:
 Download der Dateien zum LTS-Projekts MINT bei Brückmann Elektronik: Download der Dateien zum LTS-Projekts MINT bei Brückmann Elektronik:
 +
 +{{FileSharing}}
 +
 +<code>
 +#include <Wire.h>
 +#include <MCP23017.h>
 +
 +#define BUTTON1 4
 +#define BUTTON2 5
 +#define BUTTON3 6
 +#define BUZZER 2
 +#define MAX_LEDS 24
 +#define SPEED 50
 +#define RAND_MIN 3
 +#define RAND_MAX 10
 +
 +MCP23017 controller1 = MCP23017(0x20);
 +MCP23017 controller2 = MCP23017(0x21);
 +MCP23017 controller3 = MCP23017(0x22);
 +
 +void setPinAll(byte state) {
 +  if (state == 0) {
 +    controller1.writeRegister(MCP23017Register::GPIO_A, 0x00);
 +    controller2.writeRegister(MCP23017Register::GPIO_A, 0x00);
 +    controller3.writeRegister(MCP23017Register::GPIO_A, 0x00);
 +  } else if (state == 1) {
 +    controller1.writeRegister(MCP23017Register::GPIO_A, 0xFF);
 +    controller2.writeRegister(MCP23017Register::GPIO_A, 0xFF);
 +    controller3.writeRegister(MCP23017Register::GPIO_A, 0xFF);
 +  }
 +}
 +
 +void setPinState(int led, byte state) {
 +  if (led > MAX_LEDS) {
 +    Serial.println("WARN: LED " + String(led) + "(max. " + String(MAX_LEDS) + ") overflow. Set to " + String(led - MAX_LEDS));
 +    led = led - MAX_LEDS;
 +  }
 +  switch (led) {
 +    case 1:
 +      controller1.digitalWrite(0, state);
 +      break;
 +    case 2:
 +      controller1.digitalWrite(1, state);
 +      break;
 +    case 3:
 +      controller1.digitalWrite(2, state);
 +      break;
 +    case 4:
 +      controller1.digitalWrite(3, state);
 +      break;
 +    case 5:
 +      controller1.digitalWrite(4, state);
 +      break;
 +    case 6:
 +      controller1.digitalWrite(5, state);
 +      break;
 +    case 7:
 +      controller1.digitalWrite(6, state);
 +      break;
 +    case 8:
 +      controller1.digitalWrite(7, state);
 +      break;
 +    case 9:
 +      controller2.digitalWrite(0, state);
 +      break;
 +    case 10:
 +      controller2.digitalWrite(1, state);
 +      break;
 +    case 11:
 +      controller2.digitalWrite(2, state);
 +      break;
 +    case 12:
 +      controller2.digitalWrite(3, state);
 +      break;
 +    case 13:
 +      controller2.digitalWrite(4, state);
 +      break;
 +    case 14:
 +      controller2.digitalWrite(5, state);
 +      break;
 +    case 15:
 +      controller2.digitalWrite(6, state);
 +      break;
 +    case 16:
 +      controller2.digitalWrite(7, state);
 +      break;
 +    case 17:
 +      controller3.digitalWrite(0, state);
 +      break;
 +    case 18:
 +      controller3.digitalWrite(1, state);
 +      break;
 +    case 19:
 +      controller3.digitalWrite(2, state);
 +      break;
 +    case 20:
 +      controller3.digitalWrite(3, state);
 +      break;
 +    case 21:
 +      controller3.digitalWrite(4, state);
 +      break;
 +    case 22:
 +      controller3.digitalWrite(5, state);
 +      break;
 +    case 23:
 +      controller3.digitalWrite(6, state);
 +      break;
 +    case 24:
 +      controller3.digitalWrite(7, state);
 +      break;
 +  }
 +}
 +
 +void runSample(byte sample) {
 +  switch (sample) {
 +    case 1:
 +      for (int i = 1; i <= MAX_LEDS; i++) {
 +        setPinState(i, 1);
 +        delay(SPEED);
 +      }
 +      for (int i = 1; i <= MAX_LEDS; i++) {
 +        setPinState(i, 0);
 +        delay(SPEED);
 +      }
 +      break;
 +    case 2:
 +      for (int i = 1; i <= MAX_LEDS; i++) {
 +        setPinState(i, 1);
 +        delay(SPEED);
 +        setPinState(i, 0);
 +      }
 +      break;
 +    case 3:
 +      for (int i = 1; i <= MAX_LEDS; i++) {
 +        setPinState(i, 1);
 +        if (i > 12) {
 +          setPinState(i - 12, 1);
 +          delay(SPEED);
 +          setPinState(i - 12, 0);
 +        } else if (i < 12) {
 +          setPinState(i + 12, 1);
 +          delay(SPEED);
 +          setPinState(i + 12, 0);
 +        }
 +        delay(SPEED);
 +        setPinState(i, 0);
 +      }
 +      break;
 +  }
 +}
 +
 +void setup() {
 +  Wire.begin();
 +  Serial.begin(19200);
 +  Serial.println("Version 1.0\nProgram: Roulette");
 +  Serial.println("Init: Set random seed: " + String(analogRead(0)));
 +  randomSeed(analogRead(0));
 +
 +  Serial.println("Init: Controller 1");
 +  controller1.init();
 +  controller1.portMode(MCP23017Port::A, 0);
 +  controller1.writeRegister(MCP23017Register::GPIO_A, 0x00);
 +
 +  Serial.println("Init: Controller 2");
 +  controller2.init();
 +  controller2.portMode(MCP23017Port::A, 0);
 +  controller2.writeRegister(MCP23017Register::GPIO_A, 0x00);
 +
 +  Serial.println("Init: Controller 3");
 +  controller3.init();
 +  controller3.portMode(MCP23017Port::A, 0);
 +  controller3.writeRegister(MCP23017Register::GPIO_A, 0x00);
 +  delay(100);
 +}
 +
 +void loop() {
 +  // Test Sample Mode
 +  if (digitalRead(BUTTON1) == HIGH && digitalRead(BUTTON2) == LOW && digitalRead(BUTTON3) == HIGH) {
 +    Serial.println("MODE: TEST");
 +    tone(BUZZER, 200);
 +    setPinAll(1);
 +    delay(150);
 +    noTone(BUZZER);
 +
 +    tone(BUZZER, 300);
 +    delay(150);
 +    noTone(BUZZER);
 +    setPinAll(0);
 +
 +    while (true) {
 +      // BUTTON 1
 +      if (digitalRead(BUTTON1) == HIGH && digitalRead(BUTTON2) == LOW && digitalRead(BUTTON3) == LOW) {
 +        tone(BUZZER, 400);
 +        runSample(1);
 +        noTone(BUZZER);
 +        return;
 +      }
 +      // BUTTON 2
 +      else if (digitalRead(BUTTON1) == LOW && digitalRead(BUTTON2) == HIGH && digitalRead(BUTTON3) == LOW) {
 +        tone(BUZZER, 800);
 +        runSample(2);
 +        noTone(BUZZER);
 +        return;
 +      }
 +      // BUTTON 3
 +      else if (digitalRead(BUTTON1) == LOW && digitalRead(BUTTON2) == LOW && digitalRead(BUTTON3) == HIGH) {
 +        tone(BUZZER, 1200);
 +        runSample(3);
 +        noTone(BUZZER);
 +        return;
 +      }
 +      delay(100);
 +    }
 +  }
 +  //Game Mode
 +  else if (digitalRead(BUTTON1) == HIGH && digitalRead(BUTTON2) == LOW && digitalRead(BUTTON3) == LOW) {
 +    int randomOffset = 0;
 +    Serial.println("MODE: GAME");
 +    tone(BUZZER, 300);
 +    setPinAll(1);
 +    delay(750);
 +    setPinAll(0);
 +    noTone(BUZZER);
 +    delay(100);
 +
 +    // Game Basis auf Sample 2
 +    while (true) {
 +      for (int i = 1; i <= MAX_LEDS; i++) {
 +        setPinState(i, 1);
 +        // BUTTON 2 To Stop
 +        if (digitalRead(BUTTON1) == LOW && digitalRead(BUTTON2) == HIGH && digitalRead(BUTTON3) == LOW) {
 +          randomOffset = random(RAND_MIN, RAND_MAX);
 +        }
 +        delay(SPEED);
 +        setPinState(i, 0);
 +        if (randomOffset != 0) {
 +          Serial.println(randomOffset);
 +          for (int a = 0; a <= randomOffset; a++)
 +          {
 +            setPinState(i + a, 1);
 +            delay(SPEED * 10);
 +            setPinState(i + a, 0);
 +          }
 +          setPinState(i + randomOffset, 1);
 +          tone(BUZZER, 250);
 +          delay(1000);
 +          noTone(BUZZER);
 +          setPinState(i + randomOffset, 0);
 +          return;
 +        }
 +      }
 +    }
 +  }
 +  delay(100);
 +}
 +
 +</code>
lts-projekt.1780381732.txt.gz · Last modified: by daddysun