Étape 5: Vente d’une boisson
Le code ci-dessous est comment une boisson est effectivement dispersée. Une fois l’étiquette RFID est lue et la carte SD ramène le montant restant sur le tag RFID, la machine se met dans la sous-routine SelectDrink. La personne a 5500 millisecondes à décider / touche une boisson avant de la machine remonte à prêt à numériser. Une fois leur boisson est sélectionné, il appuie alors sur l’ouvre du relais pour la readytovend et ouvre ensuite le relais correspondant de boisson comme si ils ont pressé le bouton.
Sub SelectDrink()
{
soundOneUp() ;
mil long = millis() ;
minuterie de long = 0 ;
LCD.Clear() ;
LCD.Print ("carte Amt $") ;
LCD.Print(myNewCredit) ;
lcd.setCursor(0,1) ;
LCD.Print ("sélectionnez une boisson") ;
Serial.Print ("carte valeur $") ;
Serial.println(myNewCredit) ;
Serial.println ("sélectionnez une boisson") ;
int buttonpressed = 0 ;
while (buttonpressed < 1)
{
Timer = millis() ;
pour (int thisPin = 0; thisPin < drinkPinCount ; thisPin ++)
{
buttonState [thisPin] = digitalRead(buttonPins[thisPin]) ;
ButtonPressed += buttonState [thisPin] ;
}
Si (minuterie - mil > 5500) {buttonpressed = 1;}
}
Si (minuterie - mil < 5500)
{
pour (int thisPin = 0; thisPin < drinkPinCount ; thisPin ++)
{
Si (buttonState [thisPin] == HIGH)
{
Buzz (NOTE_C4, 8) ; Son de démarrage
if(myNewCredit >=drinkCost[thisPin])
{
Serial.Print(drinkName[thisPin]) ;
Serial.Print ("nouveau crédit $") ;
Serial.println (myNewCredit - drinkCost[thisPin]) ;
myNewCredit = myNewCredit - drinkCost [thisPin] ;
LCD.Clear() ;
LCD.Print ("carte à $") ;
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 ("distributeur boisson!") ;
pinMode (drinkPins [thisPin], sortie) ;
Delay(300) ;
digitalWrite (drinkPins [thisPin], faible) ;
Delay(300) ;
digitalWrite (drinkPins [thisPin], HIGH) ;
}
d’autre
{
NotEnoughFunds() ;
}
}
}
}
d’autre
{
TooktoLong() ;
}
}