Descrizione delle procedure di gestione della bussola elettronica

Una volta implementate le routine I2C, è stato facile aggiungere anche il controllo del modulo Devantech CMPS03 per la lettura dell'angolo del robot rispetto al nord magnetico.
(settings.h)
Nel main viene avviata la procedura di lettura dell'angolo della bussola ogni 100 ms e solo se i buffer di ricezione e trasmissione I2C relativi sono vuoti.
Questi buffer sono gestiti in modo asincrono dalle procedure I2C.

Il colloquio I2C con il modulo CMPS03 è molto semplice (per i dettagli vedi il sito Devantech). La routine, la prima volta che viene chiamata, imposta la lettura del registro numero 1. Finita la lettura (buffer vuoti) il main richiama la routine per avere indietro il valore dell'angolo ad un byte:
0 - 359° = 0 - 255.
(sensor.h)

C'è la possibilità di leggere anche il valore a 2 byte:
0 - 359,9 = 0 - 3599.
Ma, dal momento che la precisione della bussola dopo la calibrazione è indicata in 3-4°, mi è sembrato inutile avere una granularità così spinta.

Se nella fase di avvio, quando si preme uno dei bumpers per iniziare il ciclo explorer, si tengono premuti tutti i quattro pulsanti del keypad, invece della routine SequenzaStart() si avvia la routine di calibrazione della bussola.
(terminal.h)
Come indicato dal costruttore, per procedere alla calibrazione della bussola occorre scrivere il valore 255 nel registro 15 per ogni punto cardinale, non importa in quale sequenza, l'importante è che venga effettuato per tutti i quattro punti.

Avviata la procedura come descritto in precedenza, ci sono 10 secondi di pausa per posizionare manualmente il robot in direzione nord-sud. Scaduto questo tempo avviene la prima scrittura del valore 255 nel registro 15 del modulo CMPS03 per registrare la direzione del campo magnetico in corrispondenza del nord. Dopo 5 secondi il robot gira di 90° esatti ed effettua la calibrazione per l'est. La sequenza procede per il sud e per l'ovest.
A questo punto il modulo è calibrato per il campo magnetico alla latitudine attuale, garantendo una precisione di 3-4°.

Seguendo la metodologia di movimento ben collaudata, non è stato difficile inserire un particolare tipo di pausa motori che nel frattempo scrive il valore 255 nel registro 15 del modulo.
Questa sarà ovviamente usata solo quando si avvierà il robot in modalità calibrazione.
aggiornato il 05 - 01 - 2006