Wür­feln mit LEDs

Lese­zeit: 3 Minu­ten
Lösung
Seite als PDF
Navi­ga­ti­on

Wird der Tas­ter gedrückt, zei­gen die LEDs die gewür­fel­te Zahl an. Ein län­ge­rer Druck auf den Tas­ter bewirkt einen "Wür­fel­ef­fekt".

So sieht es aus:

Benö­tig­te Bauteile:

  • 7 gel­be LEDs
  • 7 Wider­stän­de > 100 Ω
  • Lei­tungs­dräh­te

Baue die Schal­tung auf.
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Port­ma­ni­pu­la­ti­on

Defi­nie­re die Variablen.

boolean TASTER;

// Würfelaugen 1 bis 6
int Minimum = 1;
int Maximum = 7;

Der setup-Teil. Beach­te die Kommentare.

void setup()
{
  // Pins 7 bis 3 als OUTPUT definieren
  DDRD = B11111000;

  // Pins 8 bis 9 als OUTPUT definieren
  DDRB = B00000011;

  // Pin 13 PULLUP-Widerstand einschalten
  PORTB = B00000100;

  // Zufallsgenerator starten
  randomSeed(analogRead(0));
}

Der loop-Teil. Beach­te die Kommentare.

void loop()
{
  // Test ob alle LEDs leuchten
  // PORTD = B11111000;
  // PORTB = B00000011;
  
  /*
    Port B lesen
    Bit 13 wird ausgeblendet (PINB & B00100000),
    damit der Wert gelesen werden kann
  */
  TASTER = PINB & B00100000;
;
  // Taster gedrückt, Pin 13 hat den Wert 0 (false)
  if (!TASTER)
  {   
    delay(200);
    int Zahl = random(Minimum, Maximum);
   
    switch (Zahl)
    {
      case 1:
        AlleAus();
        PORTD = B01000000;
        break;
      case 2:
        AlleAus();
        PORTD = B10100000;
        break;

      case 3:
        AlleAus();
        PORTD = B11100000;
        break;

      case 4:
        AlleAus();
        PORTD = B10101000;
        PORTB = B00000010;
        break;

      case 5:
        AlleAus();
        PORTD = B11101000;
        PORTB = B00000010;
        break;

      case 6:
        AlleAus();
        PORTD = B10111000;
        PORTB = B00000011;
        break;
      default:
        break;
    }
  }
}

Die Metho­de Alle­Aus() schal­tet alle LEDs wie­der aus.

void AlleAus()
{
  PORTD = 0;
  PORTB = 0;
}