I am trying to get the current speed of my car using the GPS Neo, but my code always returns that the speed from the GPS is invalid. The green led of the GPS Neo is blinking. What is the isValid() function? Below the code:
#include <EEPROM.h>
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
//LOAD WIRE LIB
#include<Wire.h>
static const int RXPin = 10, TXPin = 9;
static const uint32_t GPSBaud = 9600;
// The TinyGPS++ object
TinyGPSPlus gps;
// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);
//***************************************************************
int aux = 0;
int vel_prog = 20; //programed SPEED
float vel_atual;// actual SPEED
int val_inc = 0;
int val_dec = 0;
int led0 = 2;//led pin
int led20 = 3;//led pin
int led60 = 4;//led pin
int led80 = 5;//led pin
int ledsinal = 6;//led pin
int buzzer = 7;//buzzer pin
int incrementa = 8;//button pin
//****************************************************************
void setup()
{
Serial.begin(115200);
ss.begin(GPSBaud);
pinMode(incrementa, INPUT);
pinMode(led0, OUTPUT); // declare LED as output
pinMode(led20, OUTPUT); // declare LED as output
pinMode(led60, OUTPUT); // declare LED as output
pinMode(led80, OUTPUT); // declare LED as output
pinMode(ledsinal, OUTPUT); // declare LED as output
pinMode(buzzer, OUTPUT); // dbuzeer
delay(10);
}
void loop()
{
smartDelay(1000);
val_inc = digitalRead(incrementa); // read increment button
if (val_inc == 1) {
if (vel_prog > 80) {
vel_prog = -20;
}
vel_prog = vel_prog + 20;
}
if (vel_prog == 0) {
digitalWrite(led0,HIGH);
digitalWrite(led20,LOW);
digitalWrite(led60,LOW);
digitalWrite(led80,LOW);
} else if (vel_prog == 20) {
digitalWrite(led0,LOW);
digitalWrite(led20,HIGH);
digitalWrite(led60,LOW);
digitalWrite(led80,LOW);
} else if (vel_prog == 60) {
digitalWrite(led0,LOW);
digitalWrite(led20,LOW);
digitalWrite(led60,HIGH);
digitalWrite(led80,LOW);
} else if (vel_prog == 80) {
digitalWrite(led0,LOW);
digitalWrite(led20,LOW);
digitalWrite(led60,LOW);
digitalWrite(led80,HIGH);
}
if (gps.speed.isValid()){
Serial.print(gps.speed.kmph());
} else {
Serial.print("*");
}
if (gps.speed.isValid()) {
if (gps.speed.kmph() >= vel_prog && aux == 0) { //comparacao da velocidades
digitalWrite(ledsinal, HIGH); // turn LED OFF
tone(buzzer, 2200);
delay(5000);
digitalWrite(ledsinal, LOW); // turn LED OFF
noTone(buzzer);
aux = 1;
}
}
}
static void smartDelay(unsigned long ms)
{
unsigned long start = millis();
do
{
while (ss.available())
gps.encode(ss.read());
} while (millis() - start < ms);
}