Wahr­sa­ge­rin

Lese­zeit: 4 Minu­ten

Lösung
Seite als PDF

Auf ver­schie­de­ne Fra­gen soll der Ardui­no zufäl­lig mit "ja", "nein" oder "viel­leicht" ant­wor­ten. Die Fra­ge wird auf einem LCD dar­ge­stellt, ein Ser­vo­mo­tor zeigt die "Ant­wort" als Pik­to­gramm an.

So sieht es aus:

Schlie­ße das LCD an:

LCD

Nor­ma­ler­wei­se wäre eine kom­ple­xe Ver­ka­be­lung zum Betrieb eines LCDs nötig. Der ➨I2C-Bus regelt über einen eige­nen Mikro­pro­zes­sor die Kom­mu­ni­ka­ti­on der Daten­lei­tun­gen unter­ein­an­der. Es wer­den des­halb nur vier Anschlüs­se benötigt.

Die Hel­lig­keit kann mit einem Poten­tio­me­ter auf der Rück­sei­te des LCDs ein­ge­stellt werden.

Benö­tig­te Bauteile:

  • Ser­vo­mo­tor
  • LCD
  • 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)

Benö­tig­te Bibliotheken:

oder: Sketch -> Biblio­thek ein­bin­den -> Biblio­the­ken verwalten

Bin­de die benö­tig­ten Biblio­the­ken ein und defi­nie­re die Varia­blen. Beach­te die Kommentare.

// eingebaute Bibliothek servo.h verwenden
# include "Servo.h"
# include "LiquidCrystal_I2C.h"
# include "Bounce2.h"

LiquidCrystal_I2C lcd(0x27, 20, 4);

// Bezeichnung des Motors
Servo Motor;
int TASTER = 7;

/*
  das LCD ist auf 20 Zeichen begrenzt
  um einen unerwünschten Zeilenumbruch zu verhindern,
  müssen für die Fragen zwei Arrays erstellt werden
*/

// 1. Zeile der Frage
String FragenErstezeile[10] = 
{
  // mit Leerzeichen bis 20 auffüllen
  { "Wird der BVB        " },
  { "Scheint morgen      " },
  { "Wird Deutschland    " },
  { "Habe ich 6 Richtige " },
  { "Gibt es den         " },
  { "Gibt es UFOs und    " },
  { "Sollte ich mal      " },
  { "Bekomme ich bald    " },
  { "K\357nnen Schweine     " },
  { "Wird es morgen      " },
};

// 2. Zeile der Frage
String FragenZweiteZeile[10] = 
{
  { "Deutscher Meister?   " },
  { "die Sonne?           " },
  { "Fu\342ball-Weltmeister?" },
  { "im Lotto?            " },
  { "Weihnachtsmann?      " },
  { "Au\342erirdische?      " },
  { "Lotto spielen?       " },
  { "mehr Gehalt?          " },
  { "fliegen?             " },
  { "regnen?              " },
};

// Bibliothek Bounce2
// "Prellverhinderer" für den Taster starten
Bounce Start = Bounce();

Der set­up-Teil. Beach­te die Kommentare.

void setup() 
{
  // Motor an Pin 9 angeschlossen (attach)
  Serial.begin(9600);

  // Motor an Pin 9
  Motor.attach(9);
  Serial.begin(9600);

  // Motor in die Mittelposition fahren
  Motor.write(90);

  // Zufallsgenerator starten
  randomSeed(analogRead(A0));

  // LCD starten
  lcd.init();
  lcd.backlight();
  
  pinMode(TASTER, INPUT_PULLUP);

  // Instanz des Objekts Bounce für den Taster zuordnen
  // Zeitintervall einstellen
  Start.attach(TASTER);
  Start.interval(20);
}

Der loop-Teil: Beach­te die Kommentare.

void loop() 
{
  // Taster abfragen
  if (Start.update()) 
  {
    if (Start.read() == LOW) 
    {
      // Zufallszahl zwischen 0 und der Länge des Arrays
      int Zahl = random(0, sizeof(FragenErstezeile) / sizeof(FragenErstezeile[0]));
      Serial.println(Zahl);

      lcd.setCursor(0, 0);
      lcd.print(FragenErstezeile[Zahl]);
      
      lcd.setCursor(0, 1);
      lcd.print(FragenZweiteZeile[Zahl]);
      delay(1000);

      // Bewegung des Motors zur Simulation der "Entscheidung"
      Motor.write(180);
      delay(500);
      Motor.write(0);
      delay(500);

      // 0 = ja/1 = vielleicht/2 = nein
      Zahl = random(0, 3);

      if (Zahl == 0) Motor.write(180);
      if (Zahl == 1) Motor.write(90);
      if (Zahl == 2) Motor.write(0);
    }
  }
}

Startseite
Suchen
Aufgaben A-Z
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Anleitungen:


Letzte Aktualisierung: 9. Okt 2023 @ 14:30