Paso 9:
Y finalmente el esbozo, que no es muy complicado y debe explicarse.
También he adjuntado el bosquejo .ino para su conveniencia.
********************************************************************
Biblioteca de //math #include para función redondear
#include "TinyGPS.h" biblioteca del módulo //GPS
#include / / biblioteca LCD
TinyGPS gps; crear un objeto de gps
flotador plano, fLong; flotadores para longitud y latitud; se utilizará para determinar si los datos GPS están actualizados o no
fix_age largo sin firmar; Devuelve +-latitud y longitud en grados
int digit1, digit2, digit3; enteros para mantener los tres dígitos que componen la velocidad de
iSpeed int; entero que contenga el valor de la velocidad del módulo GPS
void setup()
{
Serial.Begin(9600); iniciar la comunicación serial
inicializar la biblioteca, escribe no invertida píxeles sobre una pantalla transparente
GLCD. Init(NON_INVERTED);
}
void loop()
{
mientras (Serial.available())
{
datos entrantes en serie del GPS
int c = Serial.read();
Si (gps.encode(c))
{
procesar nueva información de gps, en caso de que usted desea que se muestren más detalles
}
}
GPS.f_get_position (plano & fLong & fix_age); obtener longitud y latitud, utilizado para determinar si los datos son hasta la fecha
Si (fix_age == TinyGPS::GPS_INVALID_AGE || fix_age > 2000)
{
datos no se ha actualizado desde hace tiempo, asume que se pierde la conexión de GPS
iSpeed = 0;
}
otra cosa
{
Conexión GPS es hasta la fecha, la información de velocidad y redondear al valor entero más cercano
iSpeed = round(gps.f_speed_kmph()); velocidad en km/h
}
cuando no se mueva, el módulo GPS leerá todavía algún valor de "velocidad", no necesariamente cero
en ese caso asumir que el coche no se mueve; Mostrar sólo valores mayores que 2
Si (iSpeed == 1) iSpeed = 0;
displaySpeed(iSpeed); llamar a función para mostrar la velocidad, dígito por dígito
}
void displaySpeed(int iSpeed)
{
matemáticas "simple" para extraer el valor de cada dígito
digit1 = iSpeed / 100;
iSpeed = iSpeed - (digit1 * 100);
digit2 = iSpeed / 10;
digit3 = iSpeed - (digit2 * 10);
Mostrar mapa de bits "en blanco" cuando es necesario, en lugar del número cero
Si (digit2 == 0 & & digit1 == 0) digit2 = -1; dígito 2 está en blanco
Si (digit1 == 0) digit1 = -1; dígito 1 está en blanco
función de llamada para mostrar cada dígito en la posición deseada
drawDigit (digit1, 0);
drawDigit (digit2, 45);
drawDigit (digit3, 90);
}
void drawDigit (int dígitos, int pos)
{
interruptor (dígitos)
{
caso 0:
GLCD. DrawBitmap (Number0, pos, 0);
rotura;
caso 1:
GLCD. DrawBitmap (número1, pos, 0);
rotura;
caso 2:
GLCD. DrawBitmap (número2, pos, 0);
rotura;
caso 3:
GLCD. DrawBitmap (Number3, pos, 0);
rotura;
caso 4:
GLCD. DrawBitmap (Number4, pos, 0);
rotura;
caso 5:
GLCD. DrawBitmap (Number5, pos, 0);
rotura;
caso 6:
GLCD. DrawBitmap (Number6, pos, 0);
rotura;
caso 7:
GLCD. DrawBitmap (Number7, pos, 0);
rotura;
caso 8:
GLCD. DrawBitmap (Number8, pos, 0);
rotura;
caso 9:
GLCD. DrawBitmap (Number9, pos, 0);
rotura;
por defecto:
GLCD. DrawBitmap (NumberBlank, pos, 0);
rotura;
}
}