CCCPaste

GPSTime rev_116

/********* Pleasedontcode.com **********

	Pleasedontcode thanks you for automatic code generation! Enjoy your code!

	- Terms and Conditions:
	You have a non-exclusive, revocable, worldwide, royalty-free license
	for personal and commercial use. Attribution is optional; modifications
	are allowed, but you're responsible for code maintenance. We're not
	liable for any loss or damage. For full terms,
	please visit pleasedontcode.com/termsandconditions.

	- Project: GPSTime
	- Source Code compiled for: Arduino Uno
	- Source Code created on: 2023-11-24 23:41:51
	- Source Code generated by: Francesco Alessandro

********* Pleasedontcode.com **********/
/****** DEFINITION OF LIBRARIES *****/
#include 
#include 
#include 
#include 
#include 

/****** SYSTEM REQUIREMENT 1 *****/
// Reads hour, minutes and seconds from GPS module using MicroNMEA library.
// Display hours, minutes and seconds on a 6-digit 7-segment LED display.
// Activates contact closure for about 1 second when minutes and seconds are 00 00.


/****** FUNCTION PROTOTYPES *****/
void setup();
void loop();

/***** DEFINITION OF DIGITAL OUTPUT PINS *****/
const uint8_t CONTACT_CLOSURE_PIN = 7;

/***** DEFINITION OF Software Serial *****/
const uint8_t GPS_MODULE_PIN_RX = A1;
const uint8_t GPS_MODULE_PIN_TX = A0;
SoftwareSerial GPS_MODULE(GPS_MODULE_PIN_RX, GPS_MODULE_PIN_TX);

/***** DEFINITION OF I2C PINS *****/
const uint8_t LCD_I2C_PIN_SDA = A4;
const uint8_t LCD_I2C_PIN_SCL = A5;
const uint8_t LCD_I2C_SLAVE_ADDRESS = 0x27; // I2C slave address of the LCD module

/****** DEFINITION OF LIBRARY CLASS INSTANCES *****/
MicroNMEA nmea;
LiquidCrystal_I2C lcd(LCD_I2C_SLAVE_ADDRESS, 16, 2);

void setup() {
  // Set contact closure pin as output
  pinMode(CONTACT_CLOSURE_PIN, OUTPUT);

  // Initialize the GPS module
  GPS_MODULE.begin(9600);

  // Initialize the LCD module
  lcd.init();

  // Turn on the backlight
  lcd.backlight();

  // Clear the LCD display
  lcd.clear();

  // Print initial message on LCD
  lcd.print("GPS Time: ");
}

void loop() {
  if (GPS_MODULE.available()) {
    char c = GPS_MODULE.read();
    
    // Process the GPS data
    nmea.process(c);
  }

  // Check if valid time data is available
  if (nmea.getYear() != 0) {
    // Display the time on the LCD
    lcd.setCursor(10, 0);
    lcd.print(nmea.getHour());
    lcd.print(":");
    lcd.print(nmea.getMinute());
    lcd.print(":");
    lcd.print(nmea.getSecond());

    // Check if minutes and seconds are 00:00
    if (nmea.getMinute() == 0 && nmea.getSecond() == 0) {
      // Activate contact closure for 1 second
      digitalWrite(CONTACT_CLOSURE_PIN, HIGH);
      delay(1000);
      digitalWrite(CONTACT_CLOSURE_PIN, LOW);
    }
  }

  // Adjust the delay if needed
  delay(1000);
}