#include <Wire.h>
#include <RTClib.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// OLED settings
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);



RTC_DS3231 rtc;

char startChar = '*';
char endChar = '#';
char slot1[6] = "";  
char slot2[6] = "";
char slot3[6] = "";
char slot4[6] = "";

int led1 = 12;
int led2 = 11;
int led3 = 10;
int led4 = 9;
int buzzer = 8;

String incomingData = "";
int comma1, comma2, comma3, comma4, comma5;

void setup() 
{
  Serial.begin(9600);
  Serial.println("HELLO");
  rtc.begin();
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
        while (1); 
          }
          display.clearDisplay();
                        

  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
  pinMode(led4,OUTPUT);
  pinMode(buzzer, OUTPUT);
}

void loop() 
{
  DateTime now = rtc.now();
  char currenttime[9];
  sprintf(currenttime, "%02d:%02d", now.hour(), now.minute());
  delay(1000);

  display.clearDisplay();  
    display.setTextSize(2);  
      display.setTextColor(SSD1306_WHITE); 
        display.setCursor(0, 0);  
          display.print("T:");
            display.println(currenttime); 

              display.display(); 
                delay(1000); 
  

  if (Serial.available() > 0) 
  {
    incomingData = Serial.readStringUntil(endChar);

    if (incomingData[0] == startChar) 
    {
      // Find the positions of commas
      comma1 = incomingData.indexOf(',', 1);
      comma2 = incomingData.indexOf(',', comma1 + 1);
      comma3 = incomingData.indexOf(',', comma2 + 1);
      comma4 = incomingData.indexOf(',', comma3 + 1);
      comma5 = incomingData.indexOf(',', comma4+ 1);
      
      // Convert substrings to integers and store them in variables
      incomingData.substring(comma1 + 1, comma2).toCharArray(slot1, 6);
      incomingData.substring(comma2 + 1, comma3).toCharArray(slot2, 6);
      incomingData.substring(comma3 + 1, comma4).toCharArray(slot3, 6);
      incomingData.substring(comma4 + 1, comma5).toCharArray(slot4, 6);
      

      // Print values to the Serial Monitor
      // give value in format [ *, HH:MM , HH:MM , HH:MM , HH:MM ,#]
      Serial.println("Seperated Values:");
      Serial.print("SLOT 1: ");
      Serial.println(slot1);
      Serial.print("SLOT 2: ");
      Serial.println(slot2);
      Serial.print("SLOT3: ");
      Serial.println(slot3);
      Serial.print("SLOT4: ");
      Serial.println(slot4);
      }
  }

if (strcmp(slot1, currenttime) == 0) {
  digitalWrite(led1, HIGH);
    delay(5000);
    digitalWrite(buzzer,1);
    delay(5000);
      digitalWrite(led1, LOW);
      digitalWrite(buzzer,0);
      }

      if (strcmp(slot2, currenttime) == 0) 
      {
        digitalWrite(led2, HIGH);
        delay(5000);
        digitalWrite(buzzer,1);
          delay(5000);
            digitalWrite(led2, LOW);
            digitalWrite(buzzer,0);
            }

            if (strcmp(slot3, currenttime) == 0) {
              digitalWrite(led3, HIGH);
                delay(5000);
              digitalWrite(buzzer,1);
              delay(5000);

                  digitalWrite(led3, LOW);
                  digitalWrite(buzzer,0);
                  }

                  if (strcmp(slot4, currenttime) == 0) {
                    digitalWrite(led4, HIGH);
                      delay(5000);
                      digitalWrite(buzzer,1);
                      delay(5000);
                        digitalWrite(led4, LOW);
                        digitalWrite(buzzer,0);
                        }

}
GND5VSDASCLSQWRTCDS1307+