|
Registrazione | Gallery | FAQ | Lista utenti | Social Groups | Calendario | Cerca | I messaggi di oggi | Segna forums come letti |
| Strumenti discussione | Visualizzazione |
23 agosto 12, 16:02 | #1 (permalink) Top |
User Data registr.: 03-10-2007 Residenza: Rovereto (TN)
Messaggi: 43
| Bussola elettronica CMPS10 + Arduino
Salve a tutti, stò interfacciando una bussola elettronica compensata modello CMPS10 ad un micro Arduino e non riesco a risolvere un problema. Premetto che il micro e il sensore dialogano perfettamente e riesco a vedere a monitor i gradi inviati dalla bussola. La mia necessità è di poter contare il numero di giri che il velivolo dove è installata la bussola può fare. La bussola invia un dato che va da 0 a 359 gradi; quando però viene completato un giro no so come memorizzare questo dato stessa cosa quando da un giro compiutosi passa ad uno parziale. In parole povere io vorrei avere un contatore che si incrementa ogni volta che da 359 si passa a 0 e si decrementa quando da 0 si passa a 359. Ringrazio anticipatamente tutti. Francesco |
23 agosto 12, 21:27 | #2 (permalink) Top | |
Adv Moderator Data registr.: 15-08-2007 Residenza: sto a Massa ma sono molto Positivo
Messaggi: 12.069
| Citazione:
suppongo tu abbia una funzione "leggibussola" chiamata da qualche interrupt Codice: int16_t giri=0; void leggibussola() { static int16_t oldheading=-1; int16_t actualheading=gpsheading(); //gpsheading la funzione che legge l'heading if (oldheading!=-1) { if ((oldheading-actualheading)>350) { giri++; } else if ((actualheading-oldheading)>350) { giri--; } } else { // inizializziamo la direzione iniziale oldheading=actualheading; } oldheading=actualheading; } allora è possibile aggirare il problema vedendo se si è passati almeno per i 180. Codice: #define false=0 #define true=1 int16_t giri=0; void leggibussola() { static int16_t oldheading=-1; static bool thru180=false; int16_t actualheading=gpsheading(); //gpsheading la funzione che legge l'heading if (actualheading>120 && actualheading<<240) { thru180=true; } if (oldheading!=-1) { if (((oldheading-actualheading)>350) & thru180) { giri++; thru180=false; } else if (((actualheading-oldheading)>350) && thru180) { giri--; thru180=false; } } else { // inizializziamo la direzione iniziale oldheading=actualheading; } // aggiorniamo la posizione precedente oldheading=actualheading; }
__________________ Vivere in qeusto mondo e molto belo belo e vale la pena starci ma a volte in questa UNICA vita che ci apartiene posono succedere cose brute brute alora mi chiedo perche siete incazziati domani pole esere anche lultimo Grazie "TRANQUILLO" FAI 15766 | |
26 agosto 12, 13:29 | #4 (permalink) Top |
Adv Moderator Data registr.: 15-08-2007 Residenza: sto a Massa ma sono molto Positivo
Messaggi: 12.069
| ps: vedo ora che mi ero dimenticato una & nel primo if ma per puro culo funziona lo stesso essendo entrambi bool..
__________________ Vivere in qeusto mondo e molto belo belo e vale la pena starci ma a volte in questa UNICA vita che ci apartiene posono succedere cose brute brute alora mi chiedo perche siete incazziati domani pole esere anche lultimo Grazie "TRANQUILLO" FAI 15766 |
Bookmarks |
Strumenti discussione | |
Visualizzazione | |
| |
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
chiave a bussola micro | -alessandro- | Modellismo | 8 | 25 settembre 10 19:32 |