Strumenti Utente

Strumenti Sito


simon

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
Prossima revisioneEntrambe le parti successive la revisione
simon [2020/02/14 16:15] – [Software] adminsimon [2020/02/14 16:54] – [Software] admin
Linea 559: Linea 559:
   // cambia la modalità di funzionamento del timer che passa da normal    // cambia la modalità di funzionamento del timer che passa da normal 
   // a PWM phase correct (WGM0[2:0]=001) dove conta in su e in giù fino   // a PWM phase correct (WGM0[2:0]=001) dove conta in su e in giù fino
-  // a 0xFF (poi il valore massimo diventerà quello del reistro OCR0A  +  // a 0xFF (nella funzione play() conterà fino al valore contenuto nel 
-  // nella funzione play() per cambiare la frequenza della nota)+  // registro OCR0A per modificare la frequenza e produrre più note))
   // Si imposta il compare output mode del waveform generator in modo    // Si imposta il compare output mode del waveform generator in modo 
   // che il pin del buzzer PB1/OC0B (COM0B[1:0]=10) vada basso sul   // che il pin del buzzer PB1/OC0B (COM0B[1:0]=10) vada basso sul
   // match col valore del registro OCR0B mentre conta in su e alto    // match col valore del registro OCR0B mentre conta in su e alto 
   // mentre conta in giù (OCR0B è impostato nella funzione play() come   // mentre conta in giù (OCR0B è impostato nella funzione play() come
-  // OCR0A) +  // OCR0A) generando un onda quadra con la frequenza desiderata 
-  // NB il segnale PWM è presente solo se il pin è impostato come usicta+  // NB il segnale PWM è presente solo se il pin è impostato come uscita
   // (pag 68) quindi il buzzer non suona finche non si chiama play()   // (pag 68) quindi il buzzer non suona finche non si chiama play()
   TCCR0A = (1 << COM0B1) | (0 << COM0B0) | (0 << WGM01)  | (1 << WGM00);    TCCR0A = (1 << COM0B1) | (0 << COM0B0) | (0 << WGM01)  | (1 << WGM00); 
Linea 572: Linea 572:
   // LETTURA O RESET DELL'HIGH SCORE DA EEPROM PREMENDO START+ROSSO   // LETTURA O RESET DELL'HIGH SCORE DA EEPROM PREMENDO START+ROSSO
    
-  // maxLvl viene scritto/letto negato (operatore ~) perché il valore +  // maxLvl viene scritto letto negato (con l'operatore ~) perché il  
-  // contenuto inizialmente nella EEPROM è sempre 0xFF (255 e non zero)+  // valore di default della EEPROM è sempre 0xFF (255 e non zero)
   // (uint8_t*) 0 è un puntatore a un byte che parte dall'indirizzo 0   // (uint8_t*) 0 è un puntatore a un byte che parte dall'indirizzo 0
   maxLvl = ~eeprom_read_byte((uint8_t*) 0);    maxLvl = ~eeprom_read_byte((uint8_t*) 0); 
Linea 584: Linea 584:
     // non premuti sono al livello alto (pull-up) quindi controlliamo      // non premuti sono al livello alto (pull-up) quindi controlliamo 
     // se PB3 (LED rosso) è premuto e nel caso resettiamo l'high score     // se PB3 (LED rosso) è premuto e nel caso resettiamo l'high score
-    case 0b00010101: // PB3 premuto dopo il reset+    case 0b00010101: // PB3 premuto dopo il reset -> azzera high-score
       eeprom_write_byte((uint8_t*) 0, 255); // scrive 255 -> livello 0       eeprom_write_byte((uint8_t*) 0, 255); // scrive 255 -> livello 0
       maxLvl = 0;       maxLvl = 0;
Linea 619: Linea 619:
       // finché non si preme un bottone       // finché non si preme un bottone
       while (!pressed) {       while (!pressed) {
-  // provo i quattro bottoni+        // provo i quattro bottoni
         for (uint8_t i = 0; i < 4; i++) {         for (uint8_t i = 0; i < 4; i++) {
-    // controlla se il pulsante i è premuto +          // controlla se il pulsante i è premuto 
-    // buttons & maschera -> bit a 1 solo per il pin/pulsante i +          // buttons & maschera -> bit a 1 solo per il pin/pulsante i 
-    // PINB ha tutti i bit a 1 (resistenze di pull-up attivate +          // PINB ha tutti i bit a 1 (resistenze di pull-up attivate 
-    // nella funzione play) tranne quello del pulsante premuto +          // nella funzione play) tranne quello del pulsante premuto 
-    // l'espressione logica tra le parentesi interne vale 0 se +          // l'espressione logica tra le parentesi interne vale 0 se 
-    // il pulsante i è premuto, poi viene complementata+          // il pulsante i è premuto, poi viene complementata
           if (!(PINB & buttons[i] & 0b00011101)) {           if (!(PINB & buttons[i] & 0b00011101)) {
             // DEBOUNCE             // DEBOUNCE
             // se sono passati 16ms (tempo max per eventuali rimbalzi o             // se sono passati 16ms (tempo max per eventuali rimbalzi o
-      // se è stato premuto un pulsante diverso (non è rimbalzo)+            // se è stato premuto un pulsante diverso (non è rimbalzo)
             if (time > 1 || i != lastKey) {             if (time > 1 || i != lastKey) {
               // accendi il LED i e registra la pressione del tasto               // accendi il LED i e registra la pressione del tasto
-        play(i);+              play(i);
               pressed = true;               pressed = true;
-        // genera di nuovo l'indice LED della sequenza riprodotta+              // genera di nuovo l'indice LED della sequenza riprodotta
               uint8_t correct = simple_random4();               uint8_t correct = simple_random4();
               // se si è premuto il pulsante sbagliato               // se si è premuto il pulsante sbagliato
-        if (i != correct) { +              if (i != correct) { 
-    // accendi il LED giusto tante volte pari al livello raggiunto+                // accendi il LED giusto tante volte pari al livello raggiunto
                 for (uint8_t j = 0; j < lvl; j++) {                 for (uint8_t j = 0; j < lvl; j++) {
                   _delay_loop_2(65536); // 33ms                   _delay_loop_2(65536); // 33ms
Linea 645: Linea 645:
                 }                 }
                 _delay_loop_2(65536); // 218ms                 _delay_loop_2(65536); // 218ms
-    // animazione game over+                // animazione game over
                 gameOver();                 gameOver();
               }               }
-        // è stato premuto il pulsante giusto +              // è stato premuto il pulsante giusto 
               time = 0; // azzera time               time = 0; // azzera time
               lastKey = i; // memorizzo l'indice dell'ultimo LED               lastKey = i; // memorizzo l'indice dell'ultimo LED
               break; // esce dal ciclo for e smette di controllare se è                break; // esce dal ciclo for e smette di controllare se è 
-               // premuto un pulsante; passa al LED successivo  +                     // premuto un pulsante; passa al LED successivo  
-         // della sequenza+                     // della sequenza
             }             }
             time = 0; // azzera il conteggio per poweroff e debouncing             time = 0; // azzera il conteggio per poweroff e debouncing
           }           }
         }         }
-  // se passano 64s (time = 4000) e non succede niente poweroff+        // se passano 64s (time = 4000) e non succede niente poweroff
         if (time > 4000) {         if (time > 4000) {
           sleepNow();           sleepNow();
simon.txt · Ultima modifica: 2023/10/27 18:02 da admin