Robotica
Robotica
- **Modalità di funzionamento:**
- PWM (Pulse Width Modulation) su pin 5 e 6.
- Contatore di sistema (usato per millis() e delay()).
- **Configurazione tipica:**
- Frequenza di clock: 16 MHz.
- Risoluzione: 8 bit.
#### Timer 1
- **Modalità di funzionamento:**
- PWM su pin 9 e 10.
- Contatore a 16 bit.
- Modalità di generazione di impulsi di output PWM.
- Modalità di conteggio del tempo.
- **Configurazione tipica:**
- Frequenza di clock: 16 MHz.
- Risoluzione: 16 bit.
#### Timer 2
- **Modalità di funzionamento:**
- PWM su pin 3 e 11.
- Contatore a 8 bit.
- Modalità di generazione di impulsi di output PWM.
- Modalità di conteggio del tempo.
- **Configurazione tipica:**
- Frequenza di clock: 16 MHz.
- Risoluzione: 8 bit.
- **`DDRx`**: Registro di direzione del pin (Data Direction Register). Un bit impostato su `1`
rende il pin corrispondente un output, mentre un bit impostato su `0` lo rende un input.
- **`PORTx`**: Registro di output del pin. Se un pin è configurato come output, il valore di questo
registro determina se il pin è HIGH (`1`) o LOW (`0`).
**`PINx`**: Registro di input del pin. Utilizzato per leggere lo stato del pin.
#### 2. Utilizzo dei Registri
- **Gestore Interrupt**: È una funzione dedicata che viene eseguita quando si verifica l'evento di
interrupt specificato. Deve essere veloce e non bloccante.
void interruptFunction() {
// Codice da eseguire quando si verifica l'interrupt
}
void setup() {
// Configurazione del pin 2 come input per il pulsante
pinMode(2, INPUT);
Serial.begin(9600);
}
void loop() {
// Esempio di utilizzo dell'interrupt
if (buttonPressed) {
Serial.println("Interrupt attivato!");
// Aggiungi qui le azioni da eseguire quando si verifica l'interrupt
buttonPressed = false; // Reimposta la variabile per gestire nuovi interrupt
}
// Altre operazioni da eseguire nel loop principale
}
### Spiegazione
- **`volatile`**: È una parola chiave utilizzata per dichiarare una variabile globale che può essere
modificata all'interno di un interrupt. Assicura che il compilatore non ottimizzi l'accesso alla
variabile.
- Nel loop principale (`loop()`), verifichiamo continuamente lo stato della variabile `buttonPressed`.
Quando questa variabile diventa `true`, eseguiamo delle azioni (nel nostro caso, stampiamo un
messaggio sulla console seriale) e reimpostiamo la variabile a `false` per prepararci a gestire nuovi
interrupt.