Speedometer Using Arduino Pro Micro
Speedometer Using Arduino Pro Micro
hackster.io/fanatic-series/gps-speedometer-using-arduino-pro-micro-0a8fde
Fanatic Series
Hardware components
× 1
SparkFun Arduino Pro Mini 328 - 5V/16MHz
× 1
GPS receiver (generic)
1/6
× 1
Oled 0.98 SSD1306
Arduino IDE
fritzing
Story
Hi to all.
Have designed and integrated GPS Speedometer using three modules which include
Arduino Pro Mini, GPS Module and 0.98 inch OLED.
Have a look:
2/6
Schematics
fritzing File
Circuit Diagram of the GPS Speedometer
Code
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH 16
char timeinmin[32];
String speedinkm;
int f=0;
int valid=0;
static const uint32_t GPSBaud = 9600;
TinyGPSPlus gps;
3/6
void Display_data(){
display.clearDisplay();
// text display tests
display.setTextSize(3);
display.setTextColor(WHITE);
if(f<10){display.setCursor(103,0);}
if(f>=10){if(f<100){display.setCursor(85,0);} else{display.setCursor(67,0); }}
display.println(speedinkm);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(95,22);
display.println("KM/H");
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,17);
display.println(timeinmin);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,8);
display.println("Time");
if(valid==0){
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(25,0);
display.println("Syncing");
}
if(valid!=0){
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(25,0);
display.println(" ");
}
display.display();
delay(2000);
}
void setup()
{ Serial.begin(115200);
Serial1.begin(GPSBaud);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32)
}
void loop()
{
Time(gps.time);
valid=gps.location.lat();
f = round( gps.speed.kmph());
speedinkm = String(f);
Serial.println();
4/6
smartDelay(500);
Display_data();
}
static void printFloat1(float val, bool valid, int len, int prec)
{
if (!valid)
{
while (len-- > 1)
}
else
{
int vi = abs((int)val);
int flen = prec + (val < 0.0 ? 2 : 1); // . and -
flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
for (int i=flen; i<len; ++i)
}
smartDelay(0);
}
5/6
sz[len] = 0;
for (int i=strlen(sz); i<len; ++i)
sz[i] = ' ';
if (len > 0)
sz[len-1] = ' ';
smartDelay(0);
}
if (!t.isValid())
{
}
else
{
char sz[32];
sprintf(sz, "%02d:%02d:%02d ", t.hour(), t.minute(), t.second());
}
Credits
6/6