#include "Stepper.h"
#include "LiquidCrystal_I2C.h"
#include "Bounce2.h"
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Schritte pro Umdrehung.
int SchritteDrehung = 2048;
/*
Zuordnung der Pins
entweder 4, 6, 5, 7
oder 5, 7, 4, 6
diejenige auswählen, bei der die Drehung
im Uhrzeigersinn ausgeführt wird
*/
Stepper Motor(SchritteDrehung, 4, 6, 5, 7);
int TASTER = 10;
// die Farben
int Rot = 0;
int Blau = 0;
int Gelb = 0;
int Gruen = 0;
// Bibliothek Bounce2
// "Prellverhinderer" für den Taster starten
Bounce Start = Bounce();
void setup()
{
// Instanz des Objekts Bounce dem Taster zuordnen
// Zeitintervall einstellen
Start.attach(TASTER);
Start.interval(20);
pinMode(TASTER, INPUT_PULLUP);
// LCD einschalten
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Gl\365cksrad");
// Zufallsgenerator starten
randomSeed(analogRead(A0));
// Geschwindigkeit des Motors
Motor.setSpeed(15);
}
void loop()
{
// Taster gedrückt
if (Start.update())
{
if (Start.read() == LOW)
{
int Minimum = 1;
int Maximum = SchritteDrehung;
int Position = random(Minimum, Maximum);
// Motor auf zufällige Position fahren
Motor.step(Position);
// Ergebnis auf LCD anzeigen
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Position: " + String(Position));
lcd.setCursor(0, 1);
// Farbe je nach Position bestimmen
if (Position > 0 && Position < 512)
{
lcd.print("Gelb");
Gelb ++;
}
if (Position > 512 && Position < 1024)
{
lcd.print("Gr\365n:");
Gruen ++;
}
if (Position > 1024 && Position < 1536)
{
lcd.print("Rot:");
Rot ++;
}
if (Position > 1536 && Position < 2048)
{
lcd.print("Blau");
Blau ++;
}
// Statistik anzeigen
lcd.setCursor(0, 2);
lcd.print("Rot: " + String(Rot));
lcd.setCursor(10, 2);
lcd.print("Blau: " + String(Blau));
lcd.setCursor(0, 3);
lcd.print("Gelb: " + String(Gelb));
lcd.setCursor(10, 3);
lcd.print("Gr\365n: " + String(Gruen));
delay(1000);
// Motor an den Ausgangspunkt zurückfahren
Motor.step(-Position);
}
}
}