Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 23 agosto 12, 16:02   #1 (permalink)  Top
User
 
L'avatar di franz64
 
Data registr.: 03-10-2007
Residenza: Rovereto (TN)
Messaggi: 40
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
franz64 non è collegato   Rispondi citando
Vecchio 23 agosto 12, 21:27   #2 (permalink)  Top
Adv Moderator
 
L'avatar di romoloman
 
Data registr.: 15-08-2007
Residenza: sto a Massa ma sono molto Positivo
Messaggi: 12.072
Thumbs up

Citazione:
Originalmente inviato da franz64 Visualizza messaggio
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
Il discorso è semplice e complesso allo stesso tempo...
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;
}
Tuttavia il codice sopra ha problemi di possibili rimbalzi attorno allo 0
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;
}
E' scritto in pseudo C ma non dovrebbe essere difficile adattarlo ad arduino.
__________________
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
romoloman non è collegato   Rispondi citando
Vecchio 26 agosto 12, 12:47   #3 (permalink)  Top
User
 
L'avatar di franz64
 
Data registr.: 03-10-2007
Residenza: Rovereto (TN)
Messaggi: 40
Ringrazio moltissimo romoloman per il suo aiuto. Funziona.
Ancora grazie
Francesco
franz64 non è collegato   Rispondi citando
Vecchio 26 agosto 12, 13:29   #4 (permalink)  Top
Adv Moderator
 
L'avatar di romoloman
 
Data registr.: 15-08-2007
Residenza: sto a Massa ma sono molto Positivo
Messaggi: 12.072
Citazione:
Originalmente inviato da franz64 Visualizza messaggio
Ringrazio moltissimo romoloman per il suo aiuto. Funziona.
Ancora grazie
Francesco
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
romoloman non è collegato   Rispondi citando
Rispondi

Bookmarks



Strumenti discussione
Visualizzazione

Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


Discussioni simili
Discussione Autore discussione Forum Commenti Ultimo Commento
chiave a bussola micro -alessandro- Modellismo 8 25 settembre 10 19:32



Tutti gli orari sono GMT +2. Adesso sono le 05:30.


Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002