From 4867d36b44c363f49180ab8cf6ebbe9a3bdf6fa6 Mon Sep 17 00:00:00 2001 From: RuhNet Date: Sat, 29 Dec 2018 17:07:18 -0500 Subject: [PATCH] Initial Commit --- GPS_Counter_Clock.ino | 210 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 GPS_Counter_Clock.ino diff --git a/GPS_Counter_Clock.ino b/GPS_Counter_Clock.ino new file mode 100644 index 0000000..3857901 --- /dev/null +++ b/GPS_Counter_Clock.ino @@ -0,0 +1,210 @@ +//#include + + +#include +#include +#include +LCDi2cW lcd = LCDi2cW(4, 20, 0x4C, 0); + +uint8_t rows = 4; +uint8_t cols = 20; + +uint8_t timeset = 0; +int clearneeded; + +//LiquidCrystal lcd(12,11,10,9,8,7); +bool ledState = LOW; +volatile bool ppsTriggered = false; +char serialBuffer[100]; + +/////////////////////// +void ppsHandler(void); + +void ppsHandler(void) +{ + ppsTriggered = true; +} +////////////////////////////////// +void pulseTheTime(int); + + +void pulseTheTime(long counter) { + digitalWrite(4, HIGH); //pulse the reset output + delay(10); + digitalWrite(4, LOW); + for (int x = 0; x < counter; x++) { //count up the time for right now. + //digitalWrite(5,HIGH); + //delay(1); + digitalWrite(5, LOW); + digitalWrite(5, HIGH); + digitalWrite(5, LOW); + + } + return; +} + + +///////////////////////////////////////////////////////////////////////// +void setup() { + + //lcd.begin(20, 2); + lcd.init(); + lcd.clear(); + lcd.write(" ---[RuhNet GPS]---"); + lcd.setCursor(0, 1); + //lcd.write("PROGRAM STARTING..."); + lcd.print("PROGRAM STARTING..."); + Serial.begin(4800); + pinMode(13, OUTPUT); + pinMode(6, OUTPUT); + pinMode(5, OUTPUT); + pinMode(4, OUTPUT); + pinMode(3, OUTPUT); + digitalWrite(5, LOW); + + + + + //pulseTheTime(1000); + + + + + + + + pinMode(2, INPUT); + attachInterrupt(digitalPinToInterrupt(2), ppsHandler, RISING); + for (int x = 0; x < 20; x++) { + digitalWrite(13, HIGH); + delay(10); + digitalWrite(13, LOW); + delay(10); + } + lcd.clear(); + +} + + +////////////////////////////////////////////// +void loop() { + + lcd.setCursor(0, 0); + if (ppsTriggered) { + ppsTriggered = false; + ledState = !ledState; + digitalWrite(13, ledState); + digitalWrite(5, LOW); + digitalWrite(5, HIGH); + digitalWrite(5, LOW); + + //digitalWrite(7, ledState); + } + + if (Serial.available()) { + // wait a bit for the entire message to arrive + delay(400); + + while (Serial.available() > 0) { + for (int n = 0; n < 100; n++) { + serialBuffer[n] = Serial.read(); + } + } + String gpsString = serialBuffer; + char gpsValid = gpsString.charAt(18); + lcd.print(gpsString.substring(7, 9)); + lcd.print(":"); + lcd.print(gpsString.substring(9, 11)); + lcd.print(":"); + lcd.print(gpsString.substring(11, 13)); + lcd.print(" UTC"); + + lcd.print(" ruel.io"); + + + + + + + + String timestring = gpsString.substring(7, 9) + gpsString.substring(9, 11) + gpsString.substring(11, 13); + // int timeint = (gpsString.substring(7,9) + gpsString.substring(9, 11) + gpsString.substring(11, 13)).toInt(); + long timeint = timestring.toInt(); + long advance = 0; + + if (!timeset) { + advance = 2; + pulseTheTime(advance); + advance = timeint; + pulseTheTime(advance); + timeset = 1; + } + + if (gpsString.substring(11, 13) == "00") { + advance = 40; + pulseTheTime(advance); + } + if (gpsString.substring(9, 11) == "00") { + advance = 4040; + pulseTheTime(advance); + } + + + //String test = gpsString.substring(11,13); + + lcd.setCursor(0, 3); + //lcd.print(timeint); + + //clearneeded = 0; + + clearneeded--; + + if (advance > 0) { + lcd.setCursor(0, 3); + lcd.print("Advance Pulse:"); + clearneeded = 2; + lcd.print(advance); + } else if (!clearneeded) { + lcd.print("GPS SYNC TIME"); + lcd.print(" "); + lcd.write(127); + lcd.print(" |"); + //lcd.print(gpsString.substring(11,13)); + } + lcd.setCursor(0, 2); + + + + + + if (gpsValid == 'V') { + lcd.print(" NO POSITION LOCK "); + lcd.setCursor(0, 1); + if (ledState) { + lcd.print("--****--"); + } else { + lcd.print("Searching for GPS..."); + } + // digitalWrite(8,LOW); //lock indicator LED + } else { + lcd.print(" GPS LOCK"); + lcd.setCursor(0, 1); + lcd.print(gpsString.substring(20, 22)); + lcd.print("."); + lcd.print(gpsString.substring(22, 24)); + lcd.print(gpsString.substring(25, 27)); + lcd.print("N "); + lcd.print(gpsString.substring(33, 35)); + lcd.print("."); + lcd.print(gpsString.substring(35, 37)); + lcd.print(gpsString.substring(38, 40)); + lcd.print("W "); + lcd.print(gpsString.substring(40, 42)); + //digitalWrite(8,HIGH); //lock indicator LED + } + } + + + +} +