# include "IRremote.h"
byte Zahlen[6] = {
B01100000, // 1
B11001101, // 2
B11101001, // 3
B01100011, // 4
B10101011, // 5
B10101111, // 6
};
int EmpfaengerPin = 11;
int LAUTSPRECHER = 10;
void setup()
{
// Pins auf OUTPUT setzen
for (int i = 2; i <= 9; i++) {
pinMode(i, OUTPUT);
}
IrReceiver.begin(EmpfaengerPin);
// Zufallsgenerator starten
Serial.begin(9600);
randomSeed(analogRead(A0));
}
void loop()
{
/*
der Bereich der Zahlen 1 bis 6
als oberer Wert muss 7 angegeben werden,
weil immer nach unten gerundet wird
*/
int Minimum = 1;
int Maximum = 7;
// Daten lesen -> beliebige Taste gedrückt
if (IrReceiver.decode())
{
/*
printIRResultMinimal zeigt die verwendete Taste
P = Protokoll
C = Kommando in Hex
auskommentiert lassen wenn die Tastencodes bekannt sind
Serial.print(F("P = Protokoll C = Taste hexadezimal: "));
IrReceiver.printIRResultMinimal(&Serial);
Serial.print(F(" Dezimal: "));
Serial.println(IrReceiver.decodedIRData.command);
*/
delay(100);
// nächsten Wert lesen
IrReceiver.resume();
// Würfeleffekt
// in schneller Folge werden 10 Zufallszahlen angezeigt
for (int i = 0; i < 10; i++)
{
// gewürfelte Zahl anzeigen
byte Zahl = ZufallsZahl(Minimum, Maximum);
delay(100);
ZahlZeigen(Zahlen[Zahl - 1]);
}
tone(LAUTSPRECHER, 1000, 10);
}
}
void ZahlZeigen(byte ArrayZahl)
{
// Bits des Arrays ArrayZahl prüfen
// von Pin 2 bis Pin 9 durchlaufen
for (int i = 2; i <= 9; i++) {
/*
vergleicht das Byte ArrayZahl mit dem Byte B10000000
befindet sich an beiden Positionen eine 1
das Ergebnis der Prüfung ist also nicht 0
-> Segment einschalten
ist eine der Positionen eine 0
das Ergebnis der Prüfung ist 0
-> Segment ausschalten
1 Bit nach links schieben -> nächstes Bit prüfen
nach 8 Durchläufen sind alle Segmente (Pins) richtig geschaltet
*/
if ((ArrayZahl & B10000000) != 0) digitalWrite(i, HIGH);
else digitalWrite(i, LOW);
ArrayZahl = ArrayZahl << 1;
}
}
int ZufallsZahl(int Minimum, int Maximum)
{
int Zahl = random(Minimum, Maximum);
return Zahl;
}
Letzte Aktualisierung: