.. note::
Ciao! Benvenuto nella community di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Esplora più a fondo Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
**Perché Unirsi?**
- **Supporto Esperto**: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra community e del nostro team.
- **Impara e Condividi**: Scambia consigli e tutorial per migliorare le tue competenze.
- **Anteprime Esclusive**: Ottieni accesso anticipato agli annunci di nuovi prodotti e anteprime.
- **Sconti Speciali**: Approfitta di sconti esclusivi sui nostri nuovi prodotti.
- **Promozioni e Omaggi Festivi**: Partecipa a promozioni e omaggi durante le festività.
👉 Pronto per esplorare e creare con noi? Clicca su [|link_sf_facebook|] e unisciti oggi stesso!
3.1.13 GIOCO – 10 Secondi
===========================
Introduzione
--------------------
Ora realizzeremo un dispositivo di gioco per mettere alla prova la
tua concentrazione. Collega l'interruttore di inclinazione a una
bacchetta per creare una "bacchetta magica". Agita la bacchetta e
il display a 4 cifre inizierà a contare; agitandola nuovamente il
conteggio si fermerà. Se riesci a far sì che il conteggio visualizzato
sia esattamente **10.00**, vinci la sfida. Puoi giocare con i tuoi amici
per scoprire chi è il "mago del tempo".
Componenti
----------------
.. image:: img/list_GAME_10_Second.png
:align: center
Schema Circuitale
------------------------
============ ======== ======== ===
T-Board Name physical wiringPi BCM
GPIO17 Pin 11 0 17
GPIO27 Pin 13 2 27
GPIO22 Pin 15 3 22
SPIMOSI Pin 19 12 10
GPIO18 Pin 12 1 18
GPIO23 Pin 16 4 23
GPIO24 Pin 18 5 24
GPIO26 Pin 37 25 26
============ ======== ======== ===
.. image:: img/Schematic_three_one13.png
:align: center
Procedura Sperimentale
---------------------------------
**Step 1**: Costruisci il circuito.
.. image:: img/image277.png
:width: 800
**Step 2**: Vai nella cartella del codice.
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/c/3.1.13/
**Step 3**: Compila il codice.
.. raw:: html
.. code-block::
gcc 3.1.13_GAME_10Second.c -lwiringPi
**Step 4**: Esegui il file eseguibile.
.. raw:: html
.. code-block::
sudo ./a.out
Agita la bacchetta per avviare il conteggio sul display a 4 cifre;
agitandola di nuovo interromperai il conteggio. Se il conteggio si
ferma esattamente su **10.00**, vinci. Agitala un'altra volta per
iniziare un nuovo round.
.. note::
Se il programma non funziona dopo l’avvio o compare un messaggio di errore come : \"wiringPi.h: File o directory inesistente\", consulta :ref:`faq_c_nowork`.
**Spiegazione del Codice**
.. code-block:: c
void stateChange(){
if (gameState == 0){
counter = 0;
delay(1000);
ualarm(10000,10000);
}else{
alarm(0);
delay(1000);
}
gameState = (gameState + 1)%2;
}
Il gioco è suddiviso in due modalità:
gameState=0 è la modalità "start", nella quale il tempo viene calcolato
e visualizzato sul display, e scuotendo l’interruttore di inclinazione
si passa alla modalità "mostra".
gameState=1 è la modalità "mostra", in cui il conteggio si ferma e viene
visualizzato sul display. Scuotendo nuovamente l’interruttore, il timer
si resetta e il gioco ricomincia.
.. code-block:: c
void loop(){
int currentState =0;
int lastState=0;
while(1){
display();
currentState=digitalRead(sensorPin);
if((currentState==0)&&(lastState==1)){
stateChange();
}
lastState=currentState;
}
}
Loop() è la funzione principale. Visualizza il tempo sul display a 4 cifre
e legge il valore dell’interruttore di inclinazione. Se lo stato dell’interruttore
cambia, viene chiamata la funzione stateChange().