#include <Wire.h>
#include <RTClib.h>
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();
                        

  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);
  Serial.println(currenttime);
  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+