Come dicevo, ci troviamo in una sessione interattiva di debug. Abbiamo soltanto interrotto il programma. Possiamo riavviare il programma, anche adesso. Ad esempio, volete vedere come appare. Bene, potete vedere che non è in esecuzione in questo momento. Se si continua, possiamo lasciarlo continuare, per fermarlo di nuovo ed ora lo fermiamo sulla linea 750.
Fondamentalmente siamo in una sessione interattiva di debug, dove abbiamo pieno controllo della MCU. Come sapete, potevamo entrare attraverso su uno dei 3 fili USB o tramite qualche filo Ethernet o tramite Zigbee o altro, così da avere pieno controllo della MCU proprio come se stessimo usando un circuito emulatore interno. Possiamo arrestare e riavviare il programma.
Possiamo modificare il programma, modificare linee di programma sui quali stiamo lavorando e continuare le modifiche. In questo modo, le linee vengono ricompilate, reintegrate nel programma e continuare a modificare il programma da dove l'avevate lasciato. In ogni caso, possiamo anche modificare i pin, come abbiamo visto. Possiamo esaminare e modificare le variabili.
Abbiamo una copertura delle variabili che può comunicarci dove si trova l'accelerometro; possiamo vedere che siamo a 1696 mV e se ci portiamo alla fine del programma e lo riavviamo, vediamo che abbiamo 2571 mV. Quindi abbiamo accesso in tempo reale su tutti i pin. Possiamo controllare e leggere tutti i pin, poichè siamo in una sessione di debug davvero potente. Possiamo settare breakpoin, e possiamo anche realizzare delle dichiarazioni. Possiamo anche settare dei watch point, possiamo fare ogni operazione per il debug di questo programma. Ma non siamo qui per fare il debug. Siamo qui per vedere il programma. Quindi andiamo al listato. Andiamo verso l'inizio e ci addentreremo nel programma, sezione per sezione. Questo è l'inizio del programma, costituito da circa 93 linee; si inizia con la dichiarazione di alcune variabili in RAM. X e Y sono principalmente la posizione della palla in ogni momento. Xv e Yv sono le componenti della velocità. P è la posizione del pedale, che può assumere valore 1 o -1. I programmi tipicamente si avviano dichiarando le loro variabili, ma hanno delle funzionalità da pin anziché restare nella RAM. Quindi, configurando un uscita digitale su di un pin variabile, quando modifichiamo la variabile, il pin riflette istantaneamente la modifica. Configurando una ingresso nLog su di un pin variabile, quando leggiamo la variabile, legge istantaneamente la conversione da Analogico a Digitale del valore istantaneo su quel pin.
Ora dobbiamo collegare per prima cosa l'accelerometro. Per fare ciò, dobbiamo ricordare che l'accelerometro ha 3 ingressi da settare prima di utilizzarli.Questi andranno convertiti in uscite per l'MCU. Essi sono gcell1, gcell2 i quali hanno la sensibilità di gravità, e il pin sleep. Quello che andremo a fare è di legare il pin dcell1 con il pin ptc4, e poi lo configureremo come uscita digitale. Poco più in basso, andiamo ad assegnare 0 al pin, così da assegnare un livello basso di segnale a questo pin. Poi, andremo a legare il pin gcell2 al pin ptc5, e lo configuriamo come uscita digitale, e assegniamo 0 al pin, per dare livello basso di segnale al pin. Infine, dichiariamo la variabile sleep e la leghiamo al pin ptc3, e lo configuriamo come uscita digitale invertita. Fondamentalmente, è un segnale a livello basso chiamato sleep, quindi nel programma lo vogliamo abilitare rispetto a tutti gli altri segnali positivi. Se vogliamo andare a dormire, impostiamo sleep = 1. In caso contrario, il concetto va invertito se vogliamo prendere in considerazione il senso del programma, io voglio andare a dormire si traduce con un segnale a livello zero, anzichè uno. Quando setto questo a zero, significa "non voglio andare a dormire" logicamente. Quindi lasciate a uno il pin. Una volta impostato gcell1, gcell2, sleep e dopo averli assegnati, possiamo utilizzare l'accelerometro. Quindi possiamo utilizzare gli ingressi analogici del MCU collegato all'uscita dell'accelerometro. Quindi possiamo accederci. Ora dobbiamo creare ed assegnare una nuova variabile tilt al pin ptb5, il quale è un ingresso analogico e lo configuriamo come ingresso invertito. Principalmente, un ingresso analogico abilita il convertitore analogico-digitale per conoscere la tensione di questo valore analogico in millivolt. Invertito, invece, significa che ottengo 3300 meno questo valore. Quindi quando il pin è a tensione 0volt, ottengo un valore di 3300 sulla variabile tilt, quindi il pin è a 3.3 volt. Voglio ottenere un valore zero sulla variabile tilt. Basta rendere il programma un pò più semplice. Comunque, abbiamo l'accelerometro configurato. Ora ci interfacciamo al buzzer. Per interfacciarci al buzzer, abbiamo bisogno principalmente di un pin. Quindi creiamo una nuova variabile, chiamata audio e la leghiamo al pin ptf2 e la configuriamo come uscita di frequenza. Quindi, abilitiamo il timer sul pin, assegniamo un valore pari a 5000 per ottenere una frequenza di 5000Hz. Se lo settiamo a 500, otteniamo una frequenza di 500Hz. Se lo impostiamo a zero, disabilitiamo la frequenza. Finalmente un'ultima cosa da fare, abbiamo tutti i pin configurati, abbiamo bisogno di un timer virtuale. Ne abbiamo disponibili fino a 4, di cui uno lo configuriamo affinchè ogni 50 millisecondi effettuerà la chiamata del sub routine pedal. Ora il programma principale dovrà occuparsi di gestire la posizione della palla. Andiamo ad attirare la palla. Ogni 50 millisecondi andremo a richiamare in modalità asincrona per attirare il pedale, misurare l'accelerometro, prevedere dove il pedale deve muoversi, e altro. tutto questo mentre il programma main è in loop. Il loop del main è generato da una coppia di fili innestato. Uno d'ingresso ed uno di uscita. Quello di uscita va in auto avvio quando si inserisce la scheda badge, e quindi l'uscita resta ovviamente all'infinito, finchè non viene estratta la scheda badge. Quello d'ingresso è di gestione interna. Rimane attivo finchè è in esecuzione il ciclo.
Ora inizia il gioco. posizioniamo la palla nell'angolo in alto a sinistra. Impostiamo la velocità a 45 gradi in basso. Impostiamo il pedale in una posizione tale che se l'utente rimane fermo, andrà a colpire la palla la prima volta. In seguito avremo due istruzioni interessanti: possiamo eseguire la stessa versione del sistema operativo sui 51JM128, 5221 e sul 52233. Sono 3 istruzioni, due dei quali sono stati utilizzati per rendere unici l'utilizzo della scheda badge, pilotando la matrice di LED. Possiamo settare o pulire i pixel nella matrice LED singolarmente o in gruppi usando i comandi jmclear re jmset, inoltre possiamo spostare il testo in modalità asincrona attraverso la matrice di LED con il comando jmscroll. Quindi ora andiamo a ripulire la matrice e resettare i pixel così da rappresentare la posizione attuale della palla. Quindi attiviamo per 3 secondi il segnale sleep, impostiamo a 3000 il tempo per l'utente, e avviamo il ciclo in loop del main. Il gioco si avvia e rimane attivo finchè non viene perso. Quello che andremo a fare è di cancellare la vecchia posizione della palla, ricalcolare la posizione della palla aggiungendo la velocità X alla posizione X e la velocità Y alla posizione Y. Quindi se premiamo il bordo orizzontale dello schermo, andremo a far rimbalzare orizzontalmente, ovvero invertiamo la velocità X. Se premiamo la parte inferiore dello schermo, dovremo fare un paio di cose. Andremo per prima cosa a controllare se il pedale si trovava rilasciato, quindi abbiamo abbandonato il gioco. Richiamiamo la sub-routing lose, e interrompiamo il filo del loop d'ingresso, ritorniamo al filo del loop di uscita e facciamo ripartire una nuova partita. Altrimenti, se il pedale non è stato rilasciato, ma abbiamo realmente chiuso il bordo del pedale, dobbiamo prendere il pedale in una forma 3D facendo rimbalzare la palla non solo verticalmente ma anche orizzontalmente. quindi di nuovo invertiamo la velocità X.
Se abbiamo colpito la parte inferiore dello schermo, dobbiamo rimbalzare verticalmente invertendo la velocità Y. Quindi se ci troviamo in questo punto, non abbiamo perso la partita, quindi abbiamo necessariamente premuto il pedale. Finalmente possiamo settare la nuova posizione della palla, ed attendiamo pochi istanti prima di muovere di nuovo la palla. Quindi l'utente ha una chance in più per reagire. Ma andiamo anche a emettere un beep, ogni volta che muoviamo la palla. Settiamo un segnale da 100Hz per 100 millisecondi, seguito da un segnale a 0 Hz per altri 100 millisecondi. Quindi possiamo tornare indietro e far muovere di nuovo la palla. Quindi la palla si muoverà per 200 millisecondi, e per metà di questo tempo avremo un suono. Quindi il programma si esegue in loop, gestisce la posizione della palla, prevedere quando il gioco è finito, e in modalità asincrona abbiamo la routine del pedale eseguita ogni 50 millisecondi da un timer virtuale.
E' molto più facile quando qualcun altro lavora per te! CPUStick - Compralo ora! (24/48h delivery)
Leggi anche: CPUStick