22-10-2019, 10:29 PM
hola a todos
necesito ayuda con un proyecto
estoy intentando sacar un pulso con una frecuencia determinada por el puerto del arduino
esta frecuencia viene determinada por la señal recibida por el gps
pero se bloquea y se queda pillado en la ultima lectura
sabeis a que es debido? no tengo mucha experiencia en arduino
he usado el arduinoblock debido a su sencillez
#include <SoftwareSerial.h>
#include "ABlocks_TinyGPS.h"
#include <ABLocks_TimerFreeTone.h>
double velocidad;
double bucle;
double tiempo;
TinyGPS gps;
float gps_lat=0;
float gps_long=0;
float gps_speed_kmph=0;
float gps_speed_mph=0;
float gps_altitude=0;
float gps_course=0;
bool gps_fixed=false;
byte gps_day=0;
byte gps_month=0;
int gps_year=0;
byte gps_hour=0;
byte gps_min=0;
byte gps_sec=0;
byte gps_hund=0;
SoftwareSerial gps_serial(3,2);
void fnc_gps_update()
{
unsigned long fix_age;
gps_serial.listen();
while (gps_serial.available()){
if(gps.encode(gps_serial.read())){
gps_fixed=false;
gps_lat=gps_long=gps_speed_kmph=gps_speed_mph=gps_course=0;
gps_day=gps_month=gps_year=gps_hour=gps_min=gps_sec=0;
gps.f_get_position(&gps_lat, &gps_long, &fix_age);
if (fix_age != TinyGPS::GPS_INVALID_AGE && fix_age<5000){
gps_fixed=true;
gps.crack_datetime(&gps_year, &gps_month, &gps_day,&gps_hour, &gps_min, &gps_sec, &gps_hund, &fix_age);
gps_altitude=gps.f_altitude();
gps_course=gps.f_course();
gps_speed_kmph=gps.f_speed_kmph();
gps_speed_mph=gps.f_speed_mph();
}
}
}
}
void setup()
{
gps_serial.begin(9600);// asigna velocidad al serial
gps_serial.println("$PMTK220,1000*1F");
Serial.begin(9600);
pinMode(11, OUTPUT); // declara el pin 11 como salida
}
void loop()
{
fnc_gps_update();
velocidad = (unsigned long)(gps_speed_kmph); // convierte velocidad en numero entero y asigna a variable velocidad
Serial.println(gps_altitude);// envia a puerto serie la altitud
if (gps_fixed) {
Serial.println(velocidad); // envia a puerto serie variable velocidad
if ((velocidad == 1)) {
TimerFreeTone(11,650,3500);// si la velocidad es 1 envia al pin 11 la frecuencia determinada
}
if ((velocidad == 2)) {
TimerFreeTone(11,350,3500); // si la velocidad es 2 envia al pin 11 la frecuencia determinada
}
}
}
necesito ayuda con un proyecto
estoy intentando sacar un pulso con una frecuencia determinada por el puerto del arduino
esta frecuencia viene determinada por la señal recibida por el gps
pero se bloquea y se queda pillado en la ultima lectura
sabeis a que es debido? no tengo mucha experiencia en arduino
he usado el arduinoblock debido a su sencillez
#include <SoftwareSerial.h>
#include "ABlocks_TinyGPS.h"
#include <ABLocks_TimerFreeTone.h>
double velocidad;
double bucle;
double tiempo;
TinyGPS gps;
float gps_lat=0;
float gps_long=0;
float gps_speed_kmph=0;
float gps_speed_mph=0;
float gps_altitude=0;
float gps_course=0;
bool gps_fixed=false;
byte gps_day=0;
byte gps_month=0;
int gps_year=0;
byte gps_hour=0;
byte gps_min=0;
byte gps_sec=0;
byte gps_hund=0;
SoftwareSerial gps_serial(3,2);
void fnc_gps_update()
{
unsigned long fix_age;
gps_serial.listen();
while (gps_serial.available()){
if(gps.encode(gps_serial.read())){
gps_fixed=false;
gps_lat=gps_long=gps_speed_kmph=gps_speed_mph=gps_course=0;
gps_day=gps_month=gps_year=gps_hour=gps_min=gps_sec=0;
gps.f_get_position(&gps_lat, &gps_long, &fix_age);
if (fix_age != TinyGPS::GPS_INVALID_AGE && fix_age<5000){
gps_fixed=true;
gps.crack_datetime(&gps_year, &gps_month, &gps_day,&gps_hour, &gps_min, &gps_sec, &gps_hund, &fix_age);
gps_altitude=gps.f_altitude();
gps_course=gps.f_course();
gps_speed_kmph=gps.f_speed_kmph();
gps_speed_mph=gps.f_speed_mph();
}
}
}
}
void setup()
{
gps_serial.begin(9600);// asigna velocidad al serial
gps_serial.println("$PMTK220,1000*1F");
Serial.begin(9600);
pinMode(11, OUTPUT); // declara el pin 11 como salida
}
void loop()
{
fnc_gps_update();
velocidad = (unsigned long)(gps_speed_kmph); // convierte velocidad en numero entero y asigna a variable velocidad
Serial.println(gps_altitude);// envia a puerto serie la altitud
if (gps_fixed) {
Serial.println(velocidad); // envia a puerto serie variable velocidad
if ((velocidad == 1)) {
TimerFreeTone(11,650,3500);// si la velocidad es 1 envia al pin 11 la frecuencia determinada
}
if ((velocidad == 2)) {
TimerFreeTone(11,350,3500); // si la velocidad es 2 envia al pin 11 la frecuencia determinada
}
}
}