Stap 5: Een drankje Vending
De code hieronder is hoe een drankje is eigenlijk verspreid. Zodra de RFID-tag wordt gelezen en de SD-kaart terug brengt het bedrag nog op de RFID-tag, gaat de machine in de SelectDrink sub routine. De persoon heeft 5500 milliseconden te beslissen / druk op de knop van een drankje voordat de machine terug klaar om Scan gaat. Zodra hun drank is geselecteerd het persen dan de opent de estafette aan voor de readytovend en opent vervolgens de bijbehorende drinken Relais alsof ze drukte op de knop.
VOID SelectDrink()
{
soundOneUp();
lange mil = millis();
lange timer = 0;
LCD.Clear();
LCD.Print ("Card Amt $");
LCD.Print(myNewCredit);
lcd.setCursor(0,1);
LCD.Print ("een drankje kiezen");
Serial.Print ("kaart waarde $");
Serial.println(myNewCredit);
Serial.println ("een drankje kiezen");
int buttonpressed = 0;
terwijl (buttonpressed < 1)
{
timer = millis();
voor (int thisPin = 0; thisPin < drinkPinCount; thisPin ++)
{
buttonState [thisPin] = digitalRead(buttonPins[thisPin]);
buttonpressed += buttonState [thisPin];
}
Als (timer - mil > 5500) {buttonpressed = 1;}
}
Als (timer - mil < 5500)
{
voor (int thisPin = 0; thisPin < drinkPinCount; thisPin ++)
{
Als (buttonState [thisPin] == HIGH)
{
Buzz (NOTE_C4, 8); Opstartsignaal
if(myNewCredit >=drinkCost[thisPin])
{
Serial.Print(drinkName[thisPin]);
Serial.Print ("nieuwe krediet $");
Serial.println (myNewCredit - drinkCost[thisPin]);
myNewCredit = myNewCredit - drinkCost [thisPin];
LCD.Clear();
LCD.Print ("kaart op $");
LCD.Print(myNewCredit);
lcd.setCursor(0,1);
LCD.Print("$");
LCD.Print(drinkCost[thisPin]);
LCD.Print("");
LCD.Print(drinkName[thisPin]);
UpdateAccount();
ReadytoVend();
lcd.setCursor(0,1);
LCD.Print ("Vending drankje!");
pinMode (drinkPins [thisPin], OUTPUT);
delay(300);
digitalWrite (drinkPins [thisPin], laag);
delay(300);
digitalWrite (drinkPins [thisPin], hoge);
}
anders
{
NotEnoughFunds();
}
}
}
}
anders
{
TooktoLong();
}
}