Arduino – Math game (sketch)

Qui potete trovare l’articolo completo
Il filmato lo potete trovare anche su youtube
Supportami su Patreon!
Seguimi anche sulla pagina di facebook! e sul canale di youtube

Di seguito trovate il codice sorgente del progetto

#include //importo la classe che gestisce il ricevitore ir
#include //importo la classe che gestisce il display
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //creo un oggetto della classe Liquid Crystal
int IRpin = 9; //Assegno il pin 13 al ricevitore infrarossi
IRrecv irrecv(IRpin); //creo un oggetto della classe IRrecv
decode_results results; //creo un oggetto per immagazzinare i segnali ricevuto dal ricevitore

const int contrastoPin = A0; //imposto il pin che regolerà il contrasto.
const int mosfetGate = 13; //imposto il pin che gestirà la tensione sul gate del mosfet
const int piezoHigh = 10; //imposto il pin che farà suonare il piezo con note alte
const int piezoLow = 6; //imposto il pin che farà suonare il piezo con note basse
const int greenLED = 7; //imposto il pin che gestirà il led verde
const int redLED = 8; //imposto il pin che gestirà il led rosso
int powerSwitch = 0; //creo una variabile "interruttore" che accende/spegne il gioco
int m = 0; //variabile che ospiterà il primo operando
int n = 0; //variabile che ospiterà il secondo operando
int risposta = 0; //variabile che ospiterà la risposta dell'utente
int rispostaEsatta = 0; //imposto una variabile per contenere la risposta corretta alle domande
int operazione = 0; //variabile che contiene il valore associato alle varie operazioni
int difficolta = 0; //variabile che ospiterà la difficoltà dell'utente
int contrasto = 15; //scegli il valore del contrasto.
int punteggio = 0; //variabile che tiene il punteggio del giocatore

void setup()
{
pinMode(contrastoPin, OUTPUT);
pinMode(mosfetGate, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(redLED, OUTPUT);
pinMode(piezoHigh, OUTPUT);
analogWrite(contrastoPin, contrasto);
digitalWrite(mosfetGate, HIGH);
digitalWrite(redLED, HIGH);
digitalWrite(greenLED, HIGH);
delay(1000);
digitalWrite(mosfetGate, LOW);
digitalWrite(redLED, LOW);
digitalWrite(greenLED, LOW);

irrecv.enableIRIn(); // avvio il ricevitore
lcd.begin(16, 2); // avvio il display dandogli le dimensioni (2 righe, 16 caratteri)
randomSeed(analogRead(3));
Serial.begin(9600);
}

void loop()
{
if(powerSwitch == 0) {
digitalWrite(mosfetGate, LOW);
if(irrecv.decode(&results)) {
if(results.value == 16753245) {
Serial.println(results.value);
powerSwitch = 1;
digitalWrite(mosfetGate, HIGH);
lcd.print("Benvenuto in");
lcd.setCursor(0, 1);
lcd.print("math game");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Imposta la");
lcd.setCursor(0,1);
lcd.print("Difficolta' 1-5:");
irrecv.resume(); //attendi il prossimo valore inserito
while(results.value == 16753245) {
if(irrecv.decode(&results)) {
switch(results.value) {
case 16753245: powerSwitch = 0;
results.value = 0;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Goodbye");
lcd.setCursor(0,1);
lcd.print("by Zamein");
delay(3000);
lcd.clear();
lcd.setCursor(0,0);
irrecv.resume();
break;
case 16724175: difficolta = 1;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Difficolta:");
lcd.setCursor(0, 1);
lcd.print(difficolta);
delay(1000);
break;
case 16718055: difficolta = 2;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Difficolta:");
lcd.setCursor(0, 1);
lcd.print(difficolta);
delay(1000);
break;
case 16743045: difficolta = 3;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Difficolta:");
lcd.setCursor(0, 1);
lcd.print(difficolta);
delay(1000);
break;
case 16716015: difficolta = 4;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Difficolta:");
lcd.setCursor(0, 1);
lcd.print(difficolta);
delay(1000);
break;
case 16726215: difficolta = 5;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Difficolta:");
lcd.setCursor(0, 1);
lcd.print(difficolta);
delay(1000);
break;
default: results.value = 16753245;
}
}
delay(10);
}
}
}

}
else {
irrecv.resume(); //metti in ascolto il sensore
switch(difficolta) {
case 1 : m = random(1, 10);
n = random(1, 10);
operazione = random(0,2);
break;
case 2 : m = random(1, 25);
n = random(1, 25);
operazione = random(0,2);
break;
case 3 : m = random(1, 50);
n = random(1, 50);
operazione = random(0,2);
break;
case 4 : m = random(1, 100);
n = random(1, 100);
operazione = random(0,2);
break;
case 5 : m = random(1, 150);
n = random(1, 150);
operazione = random(0,2);
break;
}
lcd.clear();
lcd.setCursor(0,0);
if(operazione == 0) {
lcd.print(m);
lcd.print(" + ");
lcd.print(n);
lcd.print(" = ? ");
}
else {
lcd.print(m);
lcd.print(" * ");
lcd.print(n);
lcd.print(" = ? ");
}

lcd.setCursor(0,1);

while(results.value != 16769565) {
if (irrecv.decode(&results)) {

switch (results.value) {
case 16753245: powerSwitch = 0;
results.value = 16769565;
punteggio = 0;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Goodbye");
lcd.setCursor(0,1);
lcd.print("by Zamein");
delay(3000);
lcd.clear();
irrecv.resume();
break;
case 16736925: risposta = 0;
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
break;
case 16738455: risposta = risposta * 10;
if(risposta > 0) {
lcd.print("0");
}
break;
case 16724175: risposta = risposta * 10;
risposta = risposta + 1;
lcd.print("1");
break;
case 16718055: risposta = risposta * 10;
risposta = risposta + 2;
lcd.print("2");
break;
case 16743045: risposta = risposta * 10;
risposta = risposta + 3;
lcd.print("3");
break;
case 16716015: risposta = risposta * 10;
risposta = risposta + 4;
lcd.print("4");
break;
case 16726215: risposta = risposta * 10;
risposta = risposta + 5;
lcd.print("5");
break;
case 16734885: risposta = risposta * 10;
risposta = risposta + 6;
lcd.print("6");
break;
case 16728765: risposta = risposta * 10;
risposta = risposta + 7;
lcd.print("7");
break;
case 16730805: risposta = risposta * 10;
risposta = risposta + 8;
lcd.print("8");
break;
case 16732845: risposta = risposta * 10;
risposta = risposta + 9;
lcd.print("9"); ;
break;

}

irrecv.resume();
}

}

if(powerSwitch !=0) {

if(operazione == 0) {
rispostaEsatta = m + n;
}
else {
rispostaEsatta = m * n;
}

lcd.clear();
lcd.setCursor(0,0);
if(risposta == rispostaEsatta) {
lcd.print("Risposta esatta");
punteggio = punteggio + (10*difficolta);
lcd.setCursor(0,1);
lcd.print(punteggio);
lcd.print(" punti");
digitalWrite(greenLED, HIGH);
analogWrite(piezoLow, 500);
delay(250);
analogWrite(piezoLow, 200);
}
else {
lcd.print("Risposta errata");
punteggio = 0;
lcd.setCursor(0,1);
lcd.print(punteggio);
lcd.print(" punti");
digitalWrite(redLED, HIGH);
analogWrite(piezoLow, 250);
delay(250);
analogWrite(piezoHigh, 250);
}
delay(500);
digitalWrite(greenLED, LOW);
digitalWrite(redLED, LOW);
digitalWrite(piezoHigh, LOW);
digitalWrite(piezoLow, LOW);
lcd.clear();
results.value = 0;
risposta = 0;
}

}

}

Lascia un commento

XHTML: Puoi usare questi tag: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>