Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <TinyGPS++.h>
- TinyGPSPlus gps;
- int d1a = 12;
- int d1b = 11;
- int d1c = 10;
- int d1d = 9;
- int d2a = 7;
- int d2b = 6;
- int d2c = 5;
- int d2d = 4;
- int d3a = 22;
- int d3b = 23;
- int d3c = 24;
- int d3d = 25;
- int d4a = 26;
- int d4b = 27;
- int d4c = 28;
- int d4d = 29;
- int ampmled = 30;
- int hr = 0;
- int mn = 0;
- int timezonehr = -6; //Timezone hour offset
- int timezonemn = 0; //Timezone minute offset
- int numbers[][4] = //Display codes
- {
- {0,0,0,0}, // 0
- {0,0,0,1}, // 1
- {1,0,0,0}, // 2
- {1,0,0,1}, // 3
- {0,1,0,0}, // 4
- {0,1,0,1}, // 5
- {1,1,0,0}, // 6
- {1,1,0,1}, // 7
- {0,0,1,0}, // 8
- {0,0,1,1}, // 9
- {1,1,1,1} // Clear
- };
- int num[4];
- void disp(int dispnum,int numtodisplay){
- for (int x = 0; x < 4; x++){
- num[x] = numbers[numtodisplay][x];
- }
- if (dispnum == 1){
- if (num[0] == 1){
- digitalWrite(d1a, HIGH);
- }
- else{
- digitalWrite(d1a, LOW);
- }
- if (num[1] == 1){
- digitalWrite(d1b, HIGH);
- }
- else{
- digitalWrite(d1b, LOW);
- }
- if (num[2] == 1){
- digitalWrite(d1c, HIGH);
- }
- else{
- digitalWrite(d1c, LOW);
- }
- if (num[3] == 1){
- digitalWrite(d1d, HIGH);
- }
- else{
- digitalWrite(d1d, LOW);
- }
- }
- if (dispnum == 2){
- if (num[0] == 1){
- digitalWrite(d2a, HIGH);
- }
- else{
- digitalWrite(d2a, LOW);
- }
- if (num[1] == 1){
- digitalWrite(d2b, HIGH);
- }
- else{
- digitalWrite(d2b, LOW);
- }
- if (num[2] == 1){
- digitalWrite(d2c, HIGH);
- }
- else{
- digitalWrite(d2c, LOW);
- }
- if (num[3] == 1){
- digitalWrite(d2d, HIGH);
- }
- else{
- digitalWrite(d2d, LOW);
- }
- }
- if (dispnum == 3){
- if (num[0] == 1){
- digitalWrite(d3a, HIGH);
- }
- else{
- digitalWrite(d3a, LOW);
- }
- if (num[1] == 1){
- digitalWrite(d3b, HIGH);
- }
- else{
- digitalWrite(d3b, LOW);
- }
- if (num[2] == 1){
- digitalWrite(d3c, HIGH);
- }
- else{
- digitalWrite(d3c, LOW);
- }
- if (num[3] == 1){
- digitalWrite(d3d, HIGH);
- }
- else{
- digitalWrite(d3d, LOW);
- }
- }
- if (dispnum == 4){
- if (num[0] == 1){
- digitalWrite(d4a, HIGH);
- }
- else{
- digitalWrite(d4a, LOW);
- }
- if (num[1] == 1){
- digitalWrite(d4b, HIGH);
- }
- else{
- digitalWrite(d4b, LOW);
- }
- if (num[2] == 1){
- digitalWrite(d4c, HIGH);
- }
- else{
- digitalWrite(d4c, LOW);
- }
- if (num[3] == 1){
- digitalWrite(d4d, HIGH);
- }
- else{
- digitalWrite(d4d, LOW);
- }
- }
- }
- void setup() {
- // put your setup code here, to run once:
- pinMode(d1a, OUTPUT);
- pinMode(d1b, OUTPUT);
- pinMode(d1c, OUTPUT);
- pinMode(d1d, OUTPUT);
- pinMode(d2a, OUTPUT);
- pinMode(d2b, OUTPUT);
- pinMode(d2c, OUTPUT);
- pinMode(d2d, OUTPUT);
- pinMode(d3a, OUTPUT);
- pinMode(d3b, OUTPUT);
- pinMode(d3c, OUTPUT);
- pinMode(d3d, OUTPUT);
- pinMode(d4a, OUTPUT);
- pinMode(d4b, OUTPUT);
- pinMode(d4c, OUTPUT);
- pinMode(d4d, OUTPUT);
- pinMode(ampmled, OUTPUT);
- Serial.begin(9600);
- Serial3.begin(9600);
- }
- uint32_t timer = millis();
- void loop() {
- // put your main code here, to run repeatedly:
- while (Serial3.available()) {
- gps.encode(Serial3.read());
- }
- if (timer > millis()) timer = millis();
- if (millis() - timer > 500) {
- timer = millis();
- hr = gps.time.hour();
- mn = gps.time.minute();
- //hr = 0; //DEBUG
- //mn = 0; //DEBUG
- mn = mn + timezonemn;
- if (mn > 59) {
- mn = mn - 60;
- hr = hr + 1;
- }
- else {
- if (mn < 0) {
- mn = mn + 60;
- hr = hr - 1;
- }
- }
- hr = hr + timezonehr;
- if (hr > 23) {
- hr = hr - 24;
- }
- else {
- if (hr < 0) {
- hr = hr + 24;
- }
- }
- if (hr > 12) {
- hr = hr - 12;
- digitalWrite(ampmled, LOW);
- }
- else {
- digitalWrite(ampmled, HIGH);
- }
- if (hr == 0) {
- hr = 12;
- }
- disp(1, int(hr / 10));
- disp(2, int(hr % 10));
- disp(3, int(mn / 10));
- disp(4, int(mn % 10));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment