La Candela Magica di Compleanno
Hai imparato a usare gli eventi per cambiare le variabili e i condizionali per prendere decisioni. Ora mettiamo tutto insieme in un progetto magico! In questa missione costruirai il ciclo completo di un programma interattivo: un evento (il tuo soffio) cambierà lo stato di una variabile (candelaAccesa), e un condizionale leggerà quello stato per decidere se la candela si mostra accesa o spenta. È ora di esprimere un desiderio e soffiare!
Livello Intermedio
Cosa faremo?
Sei un insegnante?
Corsi
- Classi dalla 6 alla 12
Materiali
- Telefono cellulare, tablet o computer
- Connessione a Internet
- Cartone, forbici e un paio di elastici per fissare il telefono al cartone
Descrizione
Questa è un'attività di sintesi fondamentale che unisce i concetti delle lezioni precedenti: eventi, variabili di stato e condizionali. Gli studenti costruiranno una candela digitale interattiva, e questo permetterà loro di vedere in azione il ciclo completo "Azione dell'Utente -> Aggiornamento dello Stato -> Reazione del Programma".
Obiettivi Educativi
- Sintetizzare l'uso di eventi, variabili e condizionali in un unico programma.
- Comprendere come questi tre elementi lavorino insieme per creare programmi interattivi dotati di uno stato.
- Realizzare una funzionalità di "interruttore" o "toggle" (accendere/spegnere) usando la logica booleana.
- Rafforzare l'architettura di un programma che separa il rilevamento degli eventi dalla logica che disegna sullo schermo.
Inizio (10 minuti) - Il Motore dell'Interazione
- Dai il benvenuto alla classe: "Oggi assembleremo il motore completo della programmazione interattiva. Costruiremo una candela di compleanno magica che possiamo soffiare per spegnerla e riaccenderla."
- Scomponi il ciclo: "Pensiamo a come funziona. Qual è la nostra 'azione'?" (Soffiare). "Questo è il nostro evento. Quale 'stato' della candela cambia?" (Da accesa a spenta). "Questa è la nostra variabile. E qual è la 'decisione' che prende il programma?" (Mostrare la fiamma oppure no). "Questo è il nostro condizionale. Oggi vedremo come questi tre pezzi lavorano in perfetta armonia."
Il Ciclo Interattivo Completo
La maggior parte delle applicazioni che usi, dai videogiochi ai social network, si basa su un ciclo fondamentale di tre passi:
- Azione dell'Utente (Evento): Fai qualcosa (un clic, un tocco, un soffio). Il programma lo rileva come un evento.
- Aggiornamento dello Stato (Variabile): In risposta all'evento, il programma aggiorna la sua memoria (una variabile) per ricordare quello che è successo.
- Reazione del Programma (Condizionale): Il programma, che è sempre in esecuzione, legge quella memoria e decide come cambiare ciò che vedi o senti. Oggi costruirai proprio questo ciclo!
La Logica dell'Interruttore (Toggle)
La nostra candela non si limita a spegnersi: può anche riaccendersi con un altro soffio! Questa si chiama logica dell'"interruttore", o "toggle".
Invece di impostare semplicemente la variabile candelaAccesa su FALSO, la impostiamo su (non candelaAccesa). Questo blocco speciale rovescia il valore booleano attuale:
- Se
candelaAccesaera VERO, diventa FALSO. - Se
candelaAccesaera FALSO, diventa VERO. Con un solo blocco possiamo accendere e spegnere la candela con la stessa identica azione!
L'Architettura del Nostro Programma
Il nostro programma ha due parti principali che lavorano in squadra:
- L'Ascoltatore di Eventi: è sempre "in ascolto" del microfono, in secondo piano. Il suo unico compito è rovesciare lo stato della variabile
candelaAccesaquando rileva un soffio. Dell'animazione non gli importa nulla. - Il Motore dell'Animazione (Loop Principale): è sempre "al lavoro" a disegnare sullo schermo. Il suo unico compito è guardare la variabile
candelaAccesaa ogni ciclo e decidere: disegno la fiamma o lascio lo schermo nero? Il ramo vero alterna due fotogrammi — la punta della fiamma in un punto a caso e la punta al centro — con 200 ms tra l'uno e l'altro. Prima di ogni punta la candela viene ridisegnata: è quel ridisegno che spegne la punta precedente. Se lo togli per semplificare, le punte si accumulano e la fiamma smette di tremolare. Da dove sia arrivato il cambiamento non gli importa nulla.
Sviluppo (20-30 minuti) - Programmiamo il Desiderio
- Ora che gli studenti hanno la mappa concettuale del ciclo interattivo, è tempo di costruirlo.
- Guidali attraverso le istruzioni per creare la candela e programmare l'interazione completa, come dettagliato qui sotto. È importante che notino come il blocco di evento e il loop principale siano indipendenti, ma comunichino attraverso la variabile.
Chiusura (5-10 minuti) - Seguiamo il Flusso dei Dati
- Una volta che tutti riescono a soffiare sulla propria candela, è tempo di analizzare il flusso delle informazioni.
- Avvia la discussione: "Descrivete il viaggio dell'informazione dentro al nostro programma. Che cosa dà il via al cambiamento? Dove viene conservato quel cambiamento? Chi legge quel cambiamento per agire di conseguenza?" (Evento -> Variabile -> Condizionale). Sottolinea che questo schema è alla base di quasi tutte le applicazioni che usano.
Rifletti
Descrivi il "ciclo interattivo" di questo progetto. Qual è l'evento, qual è la variabile di stato e qual è il condizionale che reagisce?
Che cosa fa esattamente il blocco imposta candelaAccesa a (non candelaAccesa)? Perché è più flessibile che impostare semplicemente la variabile su FALSO?
Se volessi che la candela si potesse spegnere una volta sola (senza mai riaccendersi), che cosa cambieresti nel blocco di evento?
Il Ciclo Interattivo Completo
La maggior parte delle applicazioni che usi, dai videogiochi ai social network, si basa su un ciclo fondamentale di tre passi:
- Azione dell'Utente (Evento): Fai qualcosa (un clic, un tocco, un soffio). Il programma lo rileva come un evento.
- Aggiornamento dello Stato (Variabile): In risposta all'evento, il programma aggiorna la sua memoria (una variabile) per ricordare quello che è successo.
- Reazione del Programma (Condizionale): Il programma, che è sempre in esecuzione, legge quella memoria e decide come cambiare ciò che vedi o senti. Oggi costruirai proprio questo ciclo!
La Logica dell'Interruttore (Toggle)
La nostra candela non si limita a spegnersi: può anche riaccendersi con un altro soffio! Questa si chiama logica dell'"interruttore", o "toggle".
Invece di impostare semplicemente la variabile candelaAccesa su FALSO, la impostiamo su (non candelaAccesa). Questo blocco speciale rovescia il valore booleano attuale:
- Se
candelaAccesaera VERO, diventa FALSO. - Se
candelaAccesaera FALSO, diventa VERO. Con un solo blocco possiamo accendere e spegnere la candela con la stessa identica azione!
L'Architettura del Nostro Programma
Il nostro programma ha due parti principali che lavorano in squadra:
- L'Ascoltatore di Eventi: è sempre "in ascolto" del microfono, in secondo piano. Il suo unico compito è rovesciare lo stato della variabile
candelaAccesaquando rileva un soffio. Dell'animazione non gli importa nulla. - Il Motore dell'Animazione (Loop Principale): è sempre "al lavoro" a disegnare sullo schermo. Il suo unico compito è guardare la variabile
candelaAccesaa ogni ciclo e decidere: disegno la fiamma o lascio lo schermo nero? Il ramo vero alterna due fotogrammi — la punta della fiamma in un punto a caso e la punta al centro — con 200 ms tra l'uno e l'altro. Prima di ogni punta la candela viene ridisegnata: è quel ridisegno che spegne la punta precedente. Se lo togli per semplificare, le punte si accumulano e la fiamma smette di tremolare. Da dove sia arrivato il cambiamento non gli importa nulla.
Crea
Spegniamo le candeline!
Costruisci il modellino di cartone— servono anche un paio di elastici per fissare il telefono al cartone
- Ci serviranno 2 componenti: LivelloRumore per rilevare il 'soffio' (un aumento improvviso di rumore) e DisegnoLED per mostrare la nostra candela e la sua fiamma.
- Ricorda di scansionare o aprire entrambi i componenti sul tuo dispositivo.
Siamo pronti per programmare il nostro desiderio!
Composizione del Codice
Nota l'elegante divisione dei compiti. Il blocco di evento quando il livello di rumore rileva aumenta improvviso si occupa soltanto di cambiare la variabile candelaAccesa. Nel frattempo il loop principale va avanti senza sosta, e il suo blocco se... altrimenti... si occupa soltanto di leggere quella stessa variabile candelaAccesa per decidere quale animazione mostrare sullo schermo. Un lavoro di squadra perfetto, che passa tutto attraverso una variabile!
Rifletti
Descrivi il "ciclo interattivo" di questo progetto. Qual è l'evento, qual è la variabile di stato e qual è il condizionale che reagisce?
Che cosa fa esattamente il blocco imposta candelaAccesa a (non candelaAccesa)? Perché è più flessibile che impostare semplicemente la variabile su FALSO?
Se volessi che la candela si potesse spegnere una volta sola (senza mai riaccendersi), che cosa cambieresti nel blocco di evento?