Inviato 18 Aprile 201410 anni http://imageshack.com/a/img841/5434/br7m.png l'obbiettivo e quello di simulare in modo moolto semplificato il comportamento di un distributore di cibi e bevande. byte mon_1 = 5; //pin moneta 50 cent byte mon_2 = 7; //pin moneta 1 euro byte prod_1 = 9; //pin acqua byte prod_2 = 11; //pin panino float credito = 0; //variabile Credito float costo; //variabile costo prodotto boolean puls; //variabile pulsante (se premuto e letto uno dei pulsanti, non sara piu' //possibile nessuno dei 4 pulsanti fino al rilascio) void setup() { Serial.begin(9600 //dichiaro la velocita' di comunicazione con la porta seriale pinMode(mon_1,INPUT); //imposto i pin pinMode(mon_2,INPUT); pinMode(prod_1,INPUT); pinMode(prod_2,INPUT); digitalWrite(mon_1,HIGH); //assegno la resistenza di pull-up digitalWrite(mon_2,HIGH); digitalWrite(prod_1,HIGH); digitalWrite(prod_2,HIGH); Serial.println("INIZIO"); Serial.println("Inserisca monete o scelga un prodotto"); } void loop() { if(digitalRead(mon_1) && digitalRead(mon_2) && digitalRead(prod_1) && digitalRead(prod_2)) puls = 1; //se tutti i pulsanti sono HIGH -> puls = 1 delay(50); //ritardo contro i rimbalzi dei pulsanti if(!digitalRead(mon_1) && puls) { //se il pulsante moneta 1 e' LOW e puls = 1 credito += 0.50; //aggiungo al credito 50 cent puls = 0; //puls diventa stampa_credito (); //funzione che stampa sulla seriale il credito complessivo } if(!digitalRead(mon_2) && puls) { //stesse operazioni di prima credito += 1; puls = 0; stampa_credito (); } costo = 0; if(!digitalRead(prod_1) && puls) { costo = 0.50; puls = 0; Serial.println("Prodotto scelto -> ACQUA"); erog_prod_rest (); //funzione che eseguendo tutti i calcoli necessari decide se //il credito e' sufficiente, erogare il prodotto e/o il resto } if(!digitalRead(prod_2) && puls) { costo = 0.80; puls = 0; Serial.println("Prodotto scelto -> PANINO"); erog_prod_rest (); //stessa procedura di prima } } //spezzoni di codice ripetitivi, isolati in funzioni (per comodita') void stampa_credito () { Serial.print("Il suo credito e' di "); Serial.print(credito); Serial.println(" euro"); Serial.println(""); } void erog_prod_rest () { Serial.print("Costo prodotto -> "); Serial.print(costo); Serial.println(" euro"); Serial.println(""); if (credito >= costo) { Serial.println("Erogazione PRODOTTO"); float resto = credito - costo; if (resto) { Serial.print("Erogazione RESTO di "); Serial.print(resto); Serial.println(" euro"); } Serial.println(""); credito = 0; Serial.println("Inserisca monete o scelga un prodotto"); Serial.println(""); } else Serial.println("Credito insufficiente"); Serial.println(""); }
http://imageshack.com/a/img841/5434/br7m.png
l'obbiettivo e quello di simulare in modo moolto semplificato il comportamento di un distributore di cibi e bevande.
byte mon_1 = 5; //pin moneta 50 cent
byte mon_2 = 7; //pin moneta 1 euro
byte prod_1 = 9; //pin acqua
byte prod_2 = 11; //pin panino
float credito = 0; //variabile Credito
float costo; //variabile costo prodotto
boolean puls; //variabile pulsante (se premuto e letto uno dei pulsanti, non sara piu'
//possibile nessuno dei 4 pulsanti fino al rilascio)
void setup() {
Serial.begin(9600 //dichiaro la velocita' di comunicazione con la porta seriale
pinMode(mon_1,INPUT); //imposto i pin
pinMode(mon_2,INPUT);
pinMode(prod_1,INPUT);
pinMode(prod_2,INPUT);
digitalWrite(mon_1,HIGH); //assegno la resistenza di pull-up
digitalWrite(mon_2,HIGH);
digitalWrite(prod_1,HIGH);
digitalWrite(prod_2,HIGH);
Serial.println("INIZIO");
Serial.println("Inserisca monete o scelga un prodotto");
}
void loop() {
if(digitalRead(mon_1) && digitalRead(mon_2) && digitalRead(prod_1) && digitalRead(prod_2))
puls = 1; //se tutti i pulsanti sono HIGH -> puls = 1
delay(50); //ritardo contro i rimbalzi dei pulsanti
if(!digitalRead(mon_1) && puls) { //se il pulsante moneta 1 e' LOW e puls = 1
credito += 0.50; //aggiungo al credito 50 cent
puls = 0; //puls diventa
stampa_credito (); //funzione che stampa sulla seriale il credito complessivo
}
if(!digitalRead(mon_2) && puls) { //stesse operazioni di prima
credito += 1;
puls = 0;
stampa_credito ();
}
costo = 0;
if(!digitalRead(prod_1) && puls) {
costo = 0.50;
puls = 0;
Serial.println("Prodotto scelto -> ACQUA");
erog_prod_rest (); //funzione che eseguendo tutti i calcoli necessari decide se
//il credito e' sufficiente, erogare il prodotto e/o il resto
}
if(!digitalRead(prod_2) && puls) {
costo = 0.80;
puls = 0;
Serial.println("Prodotto scelto -> PANINO");
erog_prod_rest (); //stessa procedura di prima
}
}
//spezzoni di codice ripetitivi, isolati in funzioni (per comodita')
void stampa_credito () {
Serial.print("Il suo credito e' di ");
Serial.print(credito);
Serial.println(" euro");
Serial.println("");
}
void erog_prod_rest () {
Serial.print("Costo prodotto -> ");
Serial.print(costo);
Serial.println(" euro");
Serial.println("");
if (credito >= costo) {
Serial.println("Erogazione PRODOTTO");
float resto = credito - costo;
if (resto) {
Serial.print("Erogazione RESTO di ");
Serial.print(resto);
Serial.println(" euro");
}
Serial.println("");
credito = 0;
Serial.println("Inserisca monete o scelga un prodotto");
Serial.println("");
}
else
Serial.println("Credito insufficiente");
Serial.println("");
}