Hi everyone, i am trying to code the Neo 6m GPS with arduino nano and 4 7 segment display, i have activated display but its not working properly can anyone look into it for making it 4 display as well as proper GPS location.
#include <TinyGPS.h>
#include <SoftwareSerial.h>
TinyGPS gps;
SoftwareSerial ss(A0,A1);
int GPSBaudrate = 9600;
bool *digits[5];
int anodePins[4] = {2, 3, 4, 5};
// cathode pins A B C D E F G
int cathodePins[8] = {6, 7, 8, 9, 10, 11, 12, 13};
bool segments[17][7] = {
{0,0,0,0,0,0,1},
{1,0,0,1,1,1,1},
{0,0,1,0,0,1,0},
{0,0,0,0,1,1,0},
{1,0,0,1,1,0,0},
{0,1,0,0,1,0,0},
{0,1,0,0,0,0,0},
{0,0,0,1,1,1,1},
{0,0,0,0,0,0,0},
{0,0,0,0,1,0,0},
{0,0,0,0,0,1,0},
{1,1,0,0,0,0,0},
{0,1,1,0,0,0,1},
{1,0,0,0,0,1,0},
{0,1,1,0,0,0,0},
{0,1,1,0,0,0,0},
{0,1,1,1,0,0,0},
};
long timer1 = 0;
long timer2 = 0;
int count = 0;
int currentAnode = 0;
bool newData = false;
void setup() {
//set pins to OUTPUT
for(int i = 0; i < 7; i++){
pinMode(cathodePins[i], OUTPUT);
digitalWrite(cathodePins[i], HIGH);
}
for(int i = 0; i < 4; i++){
pinMode(anodePins[i], OUTPUT);
digitalWrite(anodePins[i], LOW);
}
ss.begin(GPSBaudrate);
Serial.begin(9600);
}
//172
void displayNumber(int num){
digits[0] = segments[int(num % 10)];
digits[1] = segments[int(num / 10) % 10];
digits[2] = segments[int(num / 100) % 10];
digits[3] = segments[int(num / 1000) % 10];
}
//Show one of the digits
void showDigit(int anode){
digitalWrite(anodePins[((anode+1) % 3)], LOW);
digitalWrite(anodePins[((anode+2) % 3)], LOW);
digitalWrite(anodePins[((anode+3) % 3)], LOW);
for(int i = 0; i < 7; i++){
digitalWrite(cathodePins[i], !digits[anode][i]);
}
digitalWrite(anodePins[anode], HIGH);
}
void loop() {
while(ss.available()){
char c = ss.read();
Serial.print(c);
if(gps.encode(c)){
newData = true;
}
}
//change the anode pin every 1 milisecond
if(abs(micros() - timer1) > 1000){
currentAnode = (currentAnode + 1)% 3;
showDigit(currentAnode);
timer1 = micros();
}
//increment every 1.0s
if(abs(millis() - timer2) > 1000){
if(!newData){
count++;
if(count > 3){
displayNumber(404);
}
}else{
count = 0;
displayNumber(int(gps.f_speed_kmph()));
}
timer2 = millis();
}
}