LEDs mit Joy­stick-Shield schalten

LED leuch­tet, wenn der Tas­ter gedrückt wird

// Array Taster
// Reihenfolge A B C D
byte Taster[] = { 2, 3, 4, 5, 8 };

// analoge Pins Joystick
byte XAchse = A0;
byte YAchse = A1;

// Array für die LEDs
byte LED[5] = { 9, 10, 11, 12 };

void setup()
{
  Serial.begin(9600);

  // pinMode der 4 Taster festlegen: sizeof = Größe des Arrays
  // INPUT_PULLUP -> Eingangspegel auf HIGH setzen
  for (int i = 0; i <= sizeof(Taster); i++)
  {
    // INPUT_PULLUP -> Eingangspegel auf HIGH setzen
    pinMode(Taster[i], INPUT_PULLUP);
  }

  // pinMode der LEDs festlegen
  for (int i = 0; i < sizeof(LED); i++)
  {
    pinMode(LED[i], OUTPUT);
  }
}

void loop()
{
  // Zustand der Taster der Reihe nach abfragen
  for (int i = 0; i < sizeof(Taster); i++)
  {
    // wenn der jeweilige Taster gedrückt wird
    // wird der Zustand der jeweiligen LED true
    // -> LED wird eingschaltet
    if (digitalRead(Taster[i]) == LOW)
    {
      digitalWrite(LED[i], HIGH);
      Serial.println("Taste: " + String(Taster[i]));
    }
    // wenn der Taster nicht gedrückt wurde
    // -> LED bleibt ausgeschaltet
    else digitalWrite(LED[i], LOW);
  }

  // Bewegung der Y-Achse lesen
  int PositionX = analogRead(XAchse);

  // Bewegung X-Achse nach links
  // Lauflicht nach links,
  // for-Schleife läuft rückwärts
  if (PositionX > 600)
  {
    for (int i = 0; i < sizeof(LED); i++)
    {
      digitalWrite(LED[i], HIGH);
      delay(200);
      digitalWrite(LED[i], LOW);
    }
  }

  // Bewegung X-Achse nach links
  // Lauflicht nach links
  if (PositionX < 300)
  {
    for (int i = sizeof(LED); i >= 0; i--)
    {
      digitalWrite(LED[i], HIGH);
      delay(200);
      digitalWrite(LED[i], LOW);
    }
  }
}

Tas­ter funk­tio­niert als Ein-/Aus­schal­ter der LED

# include "Bounce2.h"

// Array für die LEDs
byte LED[5] = { 9, 10, 11, 12 };

// Taster
int TasterA = 2;
int TasterB = 3;
int TasterC = 4;
int TasterD = 5;
int TasterJoystick = 8;

// analoge Pins Joystick
byte XAchse = A0;
byte YAchse = A1;

// Bibliothek Bounce2
// "Prellverhinderer" für die Tasten starten
Bounce A = Bounce();
Bounce B = Bounce();
Bounce C = Bounce();
Bounce D = Bounce();
Bounce JoystickKnopf = Bounce();

/*
  Array für den Zustand der LEDs
  false = ausgeschaltet
  true = eingeschaltet
*/
bool Status[5] = { false, false, false, false, false };

void setup() {
  // pinMode der LEDs festlegen
  for (int i = 0; i <= sizeof(LED); i++) {
    pinMode(LED[i], OUTPUT);
  }

  // Vorwiderstand der Taster aktivieren
  pinMode(TasterA, INPUT_PULLUP);
  pinMode(TasterB, INPUT_PULLUP);
  pinMode(TasterC, INPUT_PULLUP);
  pinMode(TasterD, INPUT_PULLUP);
  pinMode(TasterJoystick, INPUT_PULLUP);

  // attach -> Bounce für jede Taste zuordnen
  A.attach(TasterA);
  B.attach(TasterB);
  C.attach(TasterC);
  D.attach(TasterD);
  JoystickKnopf.attach(TasterJoystick);
}

void loop() 
{
  // Taster A
  if (A.update()) {
    if (A.read() == LOW) 
    {
      // LED Pin 3 Status[0]
      Status[0] = !Status[0];
      digitalWrite(LED[0], Status[0]);
    }
    digitalWrite(LED[4], LOW);
  }

  // Taster B
  if (B.update()) {
    if (B.read() == LOW) 
    {      
      // LED Pin 4 Status[1]
      Status[1] = !Status[1];
      digitalWrite(LED[1], Status[1]);
    }
  }

  // Taster C
  if (C.update()) 
  {
    if (C.read() == LOW) 
    {
      // LED Pin 5 Status[2]
      Status[2] = !Status[2];
      digitalWrite(LED[2], Status[2]);
    }
  }

  // Taster D
  if (D.update()) 
  {
    if (D.read() == LOW) 
    {
      // LED Pin 6 Status[3]
      Status[3] = !Status[3];
      digitalWrite(LED[3], Status[3]);
    }
  }

  // Taster Joystick
  if (JoystickKnopf.update()) 
  {
    if (JoystickKnopf.read() == LOW) 
    {
      // alle LEDs einschalten und Status aller LEDs auf true (ein) setzen
      for (int i = 0; i <= sizeof(LED); i++) 
      {
        Status[i] = true;
        digitalWrite(LED[i], Status[i]);     
      }
    }
  }

  // Bewegung der Y-Achse lesen
  int PositionX = analogRead(XAchse);

  // Bewegung X-Achse nach rechts
  // Lauflicht nach rechts
  if (PositionX < 300) 
  {
    for (int i = 0; i < sizeof(LED); i++) 
    {
      digitalWrite(LED[i], HIGH);
      delay(200);
      digitalWrite(LED[i], LOW);
    }
  }

  // Bewegung X-Achse nach links
  // Lauflicht nach links, for-Schleife läuft rückwärts
  if (PositionX > 600) 
  {
    for (int i = sizeof(LED); i >= 0; i--) 
    {
      digitalWrite(LED[i], HIGH);
      delay(200);
      digitalWrite(LED[i], LOW);
    }
  }
}

Letzte Aktualisierung: 25. Jul 2023 @ 19:02