Paso 5: Venta de una bebida
El código que se muestra a continuación es cómo una bebida realmente se dispersa. Una vez que se lee la etiqueta de RFID y la tarjeta SD trae la cantidad restante en la etiqueta de RFID, la máquina pasa a la rutina de sub SelectDrink. La persona tiene 5500 milisegundos decidir / botón una bebida antes de que la máquina vuelve a listo para escanear. Una vez su bebida presiona entonces el abre el relé a para el readytovend y luego se abre el relé de bebida correspondiente como si presiona el botón.
void SelectDrink()
{
soundOneUp();
mil largo = millis();
temporizador largo = 0;
LCD.Clear();
LCD.Print ("Oficina de tarjeta $");
LCD.Print(myNewCredit);
lcd.setCursor(0,1);
LCD.Print ("Seleccione una bebida");
Serial.Print ("tarjeta valor $");
Serial.println(myNewCredit);
Serial.println ("Seleccione una bebida");
buttonpressed int = 0;
mientras (buttonpressed < 1)
{
temporizador = millis();
para (int thisPin = 0; thisPin < drinkPinCount; thisPin ++)
{
buttonState [thisPin] = digitalRead(buttonPins[thisPin]);
buttonPressed += buttonState [thisPin];
}
Si (contador - > 5500 mil) {buttonpressed = 1;}
}
Si (contador - mil < 5500)
{
para (int thisPin = 0; thisPin < drinkPinCount; thisPin ++)
{
Si (buttonState [thisPin] == HIGH)
{
Buzz (NOTE_C4, 8); Sonido de inicio
if(myNewCredit >=drinkCost[thisPin])
{
Serial.Print(drinkName[thisPin]);
Serial.Print ("nuevo $ de crédito");
Serial.println (myNewCredit - drinkCost[thisPin]);
myNewCredit = myNewCredit - drinkCost [thisPin];
LCD.Clear();
LCD.Print ("tarjeta en $");
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 ("expendedora bebida!");
pinMode (drinkPins [thisPin], salida);
Delay(300);
digitalWrite (drinkPins [thisPin], LOW);
Delay(300);
digitalWrite (drinkPins [thisPin], HIGH);
}
otra cosa
{
NotEnoughFunds();
}
}
}
}
otra cosa
{
TooktoLong();
}
}