Utente:Tiaguzz29/Quiz con arduino
Questa risorsa è stata scritta dagli studenti dell'Istituto ITIS "Enrico Mattei" di Urbino, della classe 3B/EN nell'a.s. 2021/2022, all'interno del corso di Sistemi automatici per le superiori 1.
Per favore, prima di apportare modifiche, attendi sino alla fine dell'anno scolastico (termina il 30 giugno 2022) oppure contatta il docente di riferimento Giacomo Alessandroni nel caso venissero rilevati contenuti non in linea con le linee guida della comunità. Se leggi questo avviso ad anno scolastico concluso puoi rimuoverlo. |
Questa lezione descrive come realizzare un quiz con Arduino, in modo da poter creare un gioco e mettere alla prova i vostri amici.
Descrizione progetto
[modifica]Il progetto sfrutta la comunicazione seriale tra Arduino e il computer, in modo che l'utente possa leggere le domande che gli vengono poste. Attraverso l'utilizzo dei 2 pulsanti (blu e verde), con corrispettivi led che si illuminano quando vengono premuti, il concorrente può rispondere alle domande che gli vengono poste. I due led sono collegati a un resistore da 220 Ω e i due pulsanti a un resistore da 4.7kΩ.
Sensori e attuatori
[modifica]Il progetto utilizza 2 led che mostrano il pulsante premuto.
Schema di montaggio
[modifica]Entrambi i pulsanti sono collegati all'alimentazione di Arduino e a 2 dei pin di Arduino in modo che quando vengono premuti possano comunicare un'informazione alla scheda. I led sono invece collegati a 2 dei pin di Arduino; quando un bottone viene premuto il led che gli corrisponde si accende per una manciata di secondi.
Numero componenti | componenti |
---|---|
Led | 2 |
Pulsanti | 2 |
Resistori (220Ω) | 2 |
Resistoti (4.7kΩ) | 2 |
Codice
[modifica]A seguire viene mostrato il codice che permette il funzionamento del quiz.
int bottoneblu = 10;
int ledblu = 11;
int bottoneverde = 3; //assegnazione variabili e punteggio. In questo caso le variabili sono tutte intere
int ledverde = 2;
int A;
void setup() {
pinMode(ledverde, OUTPUT);
pinMode(bottoneverde, INPUT); //Dichiaro i pin dei led in output e quelli dei bottoni in input
pinMode(ledblu, OUTPUT);
pinMode(bottoneblu, INPUT);
A=0; //Inizializzo il punteggio uguale a 0
Serial.begin (9600); //Inizializzo la comunicazione seriale alla velocità di 9600 caratteri al secondo
}
void loop() {
//Domanda 1
Serial.println("Ciao,facciamo un gioco.Io ti farò una domanda e tu dovrai rispondere premendo il bottone corretto");
delay(6000);
Serial.println("Iniziamo! Qual è la capitale della Francia?"); //Il comando serial print scrive sulla comunicazione seriale ciò che è scritto all'interno delle parentesi.La scritta \n serve ad andare a capo
//Il comando delay corrisponde all'attesa (in millisecondi) tra un'istruzione e l'altra
delay(3000);
Serial.println("Blu) Marsiglia");
Serial.println("Verde) Parigi");
Serial.print("\n");
while(digitalRead(bottoneverde)== LOW && digitalRead(bottoneblu) == LOW){
//Mentre nessun bottone è premuto non fare niente
}
if (digitalRead(bottoneverde) == HIGH) {
digitalWrite(ledverde,HIGH);
delay(3000); //Attraverso 2 comandi if Arduino riesce a capire quali dei 2 pulsanti è stato premuto
A++;
Serial.println("Risposta esatta");
Serial.print("\n");
}
if (digitalRead(bottoneblu) == HIGH) {
digitalWrite(ledblu,HIGH); //Se la risposta è esatta incremento il punteggio di 1
delay(3000); //Se la risposta è errata lascio invariato il punteggio
Serial.println("Risposta errata");
Serial.print("\n");
}
digitalWrite(ledverde,LOW); //Dichiaro entrambi i led spenti. Da qui in poi il programma si ripete in modo analogo alla parte precedente(cambiano solo le domande).
digitalWrite(ledblu,LOW);
delay(3000);
//Domanda 2
Serial.println("Ok,passiamo alla seconda domanda");
Serial.print("\n");
delay(4000);
Serial.println("Quale opera è stata scritta da Dante Alighieri?");
Serial.print("\n");
delay(3000);
Serial.println("Blu)Il Convivio");
Serial.println("Verde)Il Decameron");
Serial.print("\n");
while(digitalRead(bottoneverde)== LOW && digitalRead(bottoneblu) == LOW){
}
if (digitalRead(bottoneverde) == HIGH) {
digitalWrite(ledverde,HIGH);
delay(3000);
Serial.println("Risposta errata,il Decameron è stato scritto da Boccaccio");
Serial.print("\n");
}
if (digitalRead(bottoneblu) == HIGH) {
digitalWrite(ledblu,HIGH);
delay(3000);
A++;
Serial.println("Risposta esatta");
Serial.print("\n");
}
digitalWrite(ledverde,LOW);
digitalWrite(ledblu,LOW);
delay(3000);
//Domanda 3
Serial.println("Ok,passiamo alla terza domanda");
Serial.print("\n");
delay(4000);
Serial.println("Qual è l'equazione corretta della legge di Ohm?");
Serial.print("\n");
delay(3000);
Serial.println("Blu)Il I=V/R");
Serial.println("Verde)Il I=V*R");
Serial.print("\n");
while(digitalRead(bottoneverde)== LOW && digitalRead(bottoneblu) == LOW){
}
if (digitalRead(bottoneverde) == HIGH) {
digitalWrite(ledverde,HIGH);
delay(3000);
Serial.println("Risposta errata");
Serial.print("\n");
}
if (digitalRead(bottoneblu) == HIGH) {
digitalWrite(ledblu,HIGH);
delay(3000);
A++;
Serial.println("Risposta esatta");
Serial.print("\n");
}
digitalWrite(ledverde,LOW);
digitalWrite(ledblu,LOW);
delay(3000);
//Domanda 4
Serial.println("Ok,passiamo alla quarta domanda");
Serial.print("\n");
delay(4000);
Serial.println("Qual'é l'operazione inversa dell'elevamento a potenza?");
Serial.print("\n");
delay(3000);
Serial.println("Blu)Divisione");
Serial.println("Verde)Radice");
Serial.print("\n");
while(digitalRead(bottoneverde)== LOW && digitalRead(bottoneblu) == LOW){
}
if (digitalRead(bottoneverde) == HIGH) {
digitalWrite(ledverde,HIGH);
delay(3000);
A++;
Serial.println("Risposta esatta");
Serial.print("\n");
}
if (digitalRead(bottoneblu) == HIGH) {
digitalWrite(ledblu,HIGH);
delay(3000);
Serial.println("Risposta errata");
Serial.print("\n");
}
digitalWrite(ledverde,LOW);
digitalWrite(ledblu,LOW);
delay(3000);
//Domanda 5
Serial.println("Ok,passiamo alla quinta ed ultima domanda");
Serial.print("\n");
delay(5000);
Serial.println("Cosa prevede la ricetta originale della carbonara?");
Serial.print("\n");
delay(3000);
Serial.println("Blu)Pancetta");
Serial.println("Verde)Guanciale");
Serial.print("\n");
while(digitalRead(bottoneverde)== LOW && digitalRead(bottoneblu) == LOW){
}
if (digitalRead(bottoneverde) == HIGH) {
digitalWrite(ledverde,HIGH);
delay(3000);
A++;
Serial.println("Risposta esatta");
Serial.print("\n");
}
if (digitalRead(bottoneblu) == HIGH) {
digitalWrite(ledblu,HIGH);
delay(3000);
Serial.println("Risposta errata");
Serial.print("\n");
}
digitalWrite(ledverde,LOW);
digitalWrite(ledblu,LOW);
Serial.print("Hai totalizzato ");
Serial.print(A);
Serial.print(" punti!");
while(10==10){ //Quando 10 è uguale a 10 ovvero sempre non fare niente,serve solo a non far ripartire il programma (:
}
}
Espansioni suggerite
[modifica]Per migliorare il progetto si potrebbe usare uno schermo esterno (evitando la comunicazione seriale) che permetterebbe di giocare senza l'obbligo di usare il computer. Inoltre si potrebbero cambiare le domande a proprio piacimento e/o aggiungerne delle altre.