Holiday Dice Roller (2 / 3 steg)
Steg 2: Koden (Arduino skiss)
Här är koden. Ladda ner detta i din Arduino. Du kan ignorera tryckta raderna eftersom som användes för avlusning.CONST int rollButton = 14.
CONST int secretButton = 15.
CONST int diceOne = 0;
CONST int diceTwo = 6; Lägg till 6 till adress stift av andra dö
int rollButtonState = hög; den nuvarande behandlingen från rulle stift. HÖG = inte pressad
int lastRollButtonState = hög; den föregående behandlingen från rulle stift
int secretButtonState = hög; den nuvarande behandlingen från den hemliga pin
int lastSecretButtonState = hög; den föregående behandlingen från den hemliga pin
följande variabler är lång eftersom tiden, i millisekunder,
kommer snabbt att bli ett större antal än kan lagras i en int.
lång lastSecretDebounceTime = 0; sista gången utgångsstiftet var växlas
lång lastRollDebounceTime = 0; sista gången utgångsstiftet var växlas
lång debounceDelay = 55. debounce tiden; öka om utdata flimrar
void setup() {
pinMode (0, OUTPUT); först dör lysdioder
pinMode (1, OUTPUT);
pinMode (2, utgång);
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
pinMode (5, OUTPUT);
pinMode (6, OUTPUT);
pinMode (7, OUTPUT); för det andra dö lysdioder
pinMode (8, OUTPUT);
pinMode (9, OUTPUT);
pinMode (10, OUTPUT);
pinMode (11, OUTPUT);
pinMode (12, OUTPUT);
pinMode (13, OUTPUT);
pinMode (rollButton, ingång); anger A0 pin som digital ingång; Detta är ROLL knappen
digitalWrite (rollButton, hög); slå på pullup motstånd
pinMode (secretButton, ingång); anger A1 som digital ingång; Detta är hemliga knappen
digitalWrite (secretButton, hög); slå på pullup motstånd
Serial.BEGIN(9600);
randomSeed(analogRead(3)); om analog insignal stift 3 är osammanhängande, slumpmässiga analog
buller gör anropet till randomSeed() att generera
olika utsäde nummer varje gång skissen körs.
randomSeed() kommer sedan shuffle funktionen random.
clearAll();
lightOne(0); ange båda tärningarna till ljus dem fördriva tiden väntan för rulle switch pressas
lightOne(7);
}
void loop() {
Serial.Print(rollButtonState);
Serial.println ("= rulle knappläge");
Serial.println ("MAIN LOOP");
checkRollButton();
checkSecretButton();
om (rollButtonState == låg) / / knappen nedtryckt = låg
{
blinkAll (300, 3); blinka för & alla led's 3 gånger, 300 ms isär, och sedan rulla
}
}
void checkSecretButton() {
Läs statligt av växeln till en lokal variabel:
int läsa = digitalRead(secretButton);
Kontrollera om du bara tryckt på knappen
(dvs. ingående gick från hög till låg), och du har väntat
tillräckligt länge för att ignorera något buller:
Om växeln gick låg, på grund av buller eller trycka:
om (läser == låg) {
vänta debouncing tiden
Delay(debounceDelay);
läsning = digitalRead(secretButton);
om (läser == låg) //reading är fortfarande låg efter debounce fördröjning
{
secretButtonState = låg;
Serial.println ("secretRoll rutinmässigt ställa låg").
lastSecretButtonState = låg; Detta minns knappen pressades och kan bara återställas efter en hemlig rulle
}
annat
{secretButtonState = hög;
}
}
annat
{secretButtonState = hög;
}
}
void checkRollButton() {
Läs statligt av växeln till en lokal variabel:
int läsa = digitalRead(rollButton);
Kontrollera om du bara tryckt på knappen
(dvs. ingående gick från hög till låg), och du har väntat
tillräckligt länge för att ignorera något buller:
Om växeln gick låg, på grund av buller eller trycka:
om (läser == låg) {
vänta debouncing tiden
Delay(debounceDelay);
läsning = digitalRead(rollButton);
om (läser == låg) //reading är fortfarande låg efter debounce fördröjning
{rollButtonState = låg;
Serial.println ("CheckRoll rutinmässigt ställa låg").
}
annat
{rollButtonState = hög;
}
}
annat
{rollButtonState = hög;
}
}
void lightOne (int diceNumber) {
Serial.println ("rullade en");
digitalWrite (diceNumber, hög);
}
void lightTwo (int diceNumber) {
Serial.println ("rullade två");
digitalWrite (1 + diceNumber, hög);
digitalWrite (4 + diceNumber, hög);
}
void lightThree (int diceNumber) {
Serial.println ("rullade tre");
digitalWrite (1 + diceNumber, hög);
digitalWrite (4 + diceNumber, hög);
digitalWrite (0 + diceNumber, hög);
}
void lightFour (int diceNumber) {
Serial.println ("rullade fyra");
digitalWrite (3 + diceNumber, hög);
digitalWrite (1 + diceNumber, hög);
digitalWrite (4 + diceNumber, hög);
digitalWrite (6 + diceNumber, hög);
}
void lightFive (int diceNumber) {
Serial.println ("rullade fem");
digitalWrite (1 + diceNumber, hög);
digitalWrite (3 + diceNumber, hög);
digitalWrite (4 + diceNumber, hög);
digitalWrite (6 + diceNumber, hög);
digitalWrite (0 + diceNumber, hög);
}
void lightSix (int diceNumber) {
Serial.println ("rullade sex");
digitalWrite (1 + diceNumber, hög);
digitalWrite (2 + diceNumber, hög);
digitalWrite (3 + diceNumber, hög);
digitalWrite (4 + diceNumber, hög);
digitalWrite (5 + diceNumber, hög);
digitalWrite (6 + diceNumber, hög);
}
void clearAll() {
digitalWrite (0, låg);
digitalWrite (1, låg);
digitalWrite (2, låg).
digitalWrite (3, låg).
digitalWrite (4, låg).
digitalWrite (5, låg).
digitalWrite (6, låg).
digitalWrite (7, låg).
digitalWrite 8, låg.
digitalWrite (9, låg).
digitalWrite (10, låg).
digitalWrite (11, låg).
digitalWrite 12, låg.
digitalWrite 13, låg.
}
void blinkAll (int t, int n) {
clearAll();
för (int x = 0; x < n; x ++) {/ / slinga n gånger
digitalWrite (0, låg);
digitalWrite (1, låg);
digitalWrite (2, låg).
digitalWrite (3, låg).
digitalWrite (4, låg).
digitalWrite (5, låg).
digitalWrite (6, låg).
digitalWrite (7, hög).
digitalWrite 8, hög.
digitalWrite (9, hög).
digitalWrite 10, hög.
digitalWrite (11, hög).
digitalWrite 12, hög.
digitalWrite 13, hög.
Delay(t);
digitalWrite (0, hög);
digitalWrite (1, hög);
digitalWrite (2, hög).
digitalWrite (3, hög).
digitalWrite (4, hög).
digitalWrite 5, hög,
digitalWrite (6, hög).
digitalWrite (7, låg).
digitalWrite 8, låg.
digitalWrite (9, låg).
digitalWrite (10, låg).
digitalWrite (11, låg).
digitalWrite 12, låg.
digitalWrite 13, låg.
Delay(t);
}
clearAll();
Kontrollera först om hemliga knappen tidigare sköts
om (lastSecretButtonState == låg) / / om hemliga knappen har tryckts, lastSecretButtonState fortfarande kommer att vara låg
{
secretDiceRoll();
}
annat
{
randomDiceRoll();
}
}
void randomDiceRoll() {
int randNumber = 6;
/*
Provningsmetod
clearAll();
lightOne(diceOne); ange båda tärningarna till ljus dem fördriva tiden väntan för rulle switch pressas
lightOne(diceTwo);
*/
Serial.println ("Random nummer koden");
Serial.Print(rollButtonState);
Serial.println ("= rulle knappläge");
för (int d = 0; d < 8; d = d + 7) {/ / gör en gång för ea dö
få ett slumpmässigt nummer från 1 till 6
randNumber = random (6) + 1;
växel (randNumber) {
fall 1:
lightOne(d);
bryta;
fall 2:
lightTwo(d);
bryta;
fall 3:
lightThree(d);
bryta;
fall 4:
lightFour(d);
bryta;
fall 5:
lightFive(d);
bryta;
fall 6:
lightSix(d);
bryta;
standard:
clearAll();
bryta;
}
}
rollButtonState = hög;
Serial.println ("lämnat slumpmässiga nummer kod").
Serial.Print(rollButtonState);
Serial.println ("= rulle knappläge");
Serial.println("");
}
void secretDiceRoll() {//secret knappen gör slumpmässiga dubbel
int secretRandNumber = 6;
secretRandNumber = random (6) + 1;
växel (secretRandNumber) {
fall 1:
{lightOne(0); lightOne(7); break;}
fall 2:
{lightTwo(0); lightTwo(7); break;}
fall 3:
{lightThree(0); lightThree(7); break;}
fall 4:
{lightFour(0); lightFour(7); break;}
fall 5:
{lightFive(0); lightFive(7); break;}
fall 6:
{lightSix(0); lightSix(7); break;}
standard:
{clearAll(), break;}
}
secretButtonState = hög;
lastSecretButtonState = hög;
}