Ragazzi ho un problema: ho 4 programmi ddi acquisizione dati uno per il gps, uno per l'accellerometro, uno per il giroscopio ed uno per la bussola. Devo mettere tutto su un unico programma, ma il programma per il gps funziona con la SerialEvent1()ovvero legge solo quando vi sono nuovi dati sulla seriale, mentre agli altri devo imporre di leggere ogni tot millisecondi, così ho creato questo programma:
#include <SoftwareSerial.h>
#include <TinyGPS.h>
//timer
unsigned long time;
unsigned long time_gyro;
unsigned long time_accl;
unsigned long time_magn;
//gps
TinyGPS gps; //creo l'oggetto per l'oggetto gps per la libreria TinyGPS
void acquisizione(TinyGPS &gps); //dichiarazione della funzione acquisizione
void controllo();void setup()
{
Serial.begin(9600);
//gps
Serial1.begin(4800); // inizializzo la porta seriale Serial1 per la comunicazione con il gps
controllo(); //chiamo la funzione controllo per vedere se il gps è collegato
//timer
time=millis();
time_gyro=millis();
time_accl=millis();
time_magn=millis();}
void loop()
{time=millis();
if(time>(time_gyro+8)) //default 125hz
{
time_gyro=millis();
Serial.println("giro ");
}if(time>(time_accl+10)) //default 100hz
{
time_accl=millis();
Serial.println("accel ");
}
if(time>(time_magn+66)) //deafult 15hz
{
time_magn=millis();
Serial.println("megne ");
}}
void giroscopio()
{Serial.println("giro ");
}
void controllo()
{if(Serial1.available()==false)
Serial.println("Impossibile leggere dal gps");}
void serialEvent1()
{int c = Serial1.read(); // Carica i dati ricevuti nella variabile c
if(gps.encode(c)) // Verifica congruenza dati
{
acquisizione(gps); // chiamo la funzione acquisizione e passo i dati letti dalla Serial1}
}
void acquisizione(TinyGPS &gps)
{
float latitudine, longitudine; //dichiarazione delle var float
unsigned long vel, fix_age;
gps.f_get_position(&latitudine, &longitudine, &fix_age); //leggo la posizione lat. e long.{
vel= gps.f_speed_mps();
float alt=gps.f_altitude(); //leggo l'altitudine
Serial.println("------------------");
Serial.print("latitudine: "); Serial.println(latitudine); //stampo la lat
Serial.print("longitudine: "); Serial.println(longitudine); //stampo la long.
Serial.print("Altitudine: "); Serial.println(alt); //stampo l'altitudine
Serial.print("Velocita' m/s: "); Serial.println(vel); //stampo la velocitàint year;
byte month, day, hour, minute, second;
gps.crack_datetime(&year,&month,&day,&hour,&minute,&second); //leggo i dati ora e data//stampo di dati letti ora e data
Serial.print("Data: "); Serial.print(month, DEC); Serial.print("/");
Serial.print(day, DEC); Serial.print("/"); Serial.println(year);
}}
E' solo che non mi funziona la SerialEvent1, ovvero non legge i dati dal gps, perchè? grazie ancora