/*
 * PIN Configuration
 * Arduino              P-10
 * -D6          ->      -A
 * -D7          ->      -B
 * -D8          ->      -SCLK
 * -D9          ->      -OE
 * -D11         ->      -DATA
 * -D13         ->      -CLK
 * -GND         ->      -GND
 * 
 * Arduino              RYS8830 EVB
 * -TX          ->      -RX
 * -RX          ->      -TX
 * -GND         ->      -GND
 */

#include <DMD.h>
#include <TimerOne.h>
#include <SPI.h>
#include <SystemFont5x7.h>
#include <angka6x13.h>

DMD dmd(1, 1); 

char inChar;
String gpsData;
String sGPRMC;
String utc_time;
int hour, minute, second, temp_min;
void ScanDMD()
{
  dmd.scanDisplayBySPI();
}


void setup()
{
  Serial.begin(115200);
  pinMode(2, OUTPUT);//----pin 2 make alarm ---connect a buzzer

  Timer1.initialize( 500 );
  Timer1.attachInterrupt( ScanDMD );
  dmd.clearScreen( true );


}

void loop() {  

  while (Serial.available()) {
    inChar = Serial.read();
    gpsData += inChar;
    if (inChar == '$') {
      gpsData = Serial.readStringUntil('\n');
      break;
    }
  }
  //sample gpsData = "$GPRMC,013856.000,A,000.9090,N,9090.90,E,0.0,038.1,310814,,,A*62";
  sGPRMC = gpsData.substring(0, 5);

  if (sGPRMC == "GPRMC") {
    Serial.flush();
    utc_time = gpsData.substring(6, 12);
    
    float utc_time_f = utc_time.toFloat(); 
    hour = int(utc_time_f)/10000;
    temp_min = int(utc_time_f)/100;
    minute = temp_min%100;
    second = int(utc_time_f)%100;
    
    //Serial.print(hour);
    //Serial.print(":");
    //Serial.print(minute);
    //Serial.print(":");
    //Serial.println(second);      
  }

  display_time();
  
}




//////////////////////==========================Program Jam==============

void display_time()
{
  long start = millis();
  dmd.clearScreen( true );
  while (millis() - start < 10000) {  //read rtc every 3 seconds

    long start = millis();

    ///display time///
    dmd.selectFont(angka6x13);
    //int minute_e = 24;
    //int hour = 8;
    //if(hour>12){hour = hour - 12;}
    //if(hour==0){hour = 12;}
    
    String xjam = convert(hour) ; //printing hour
    int pjg = xjam.length() + 1;
    char sjam[pjg];
    xjam.toCharArray(sjam, pjg);
    dmd.drawString(1, 0, sjam, pjg, 0);

    String xxjam = convert(minute) ; //printing minute
    int xpjg = xxjam.length() + 1;
    char xsjam[xpjg];
    xxjam.toCharArray(xsjam, xpjg);
    dmd.drawString(18, 0, xsjam, xpjg, 0);

    ///blinking second

    dmd.selectFont(SystemFont5x7);
    dmd.drawChar( 14,  4, ':', GRAPHICS_NOR   );   // clock colon overlay on
    delay( 1000 );
    dmd.drawChar( 14, 4, ':', GRAPHICS_OR   );   // clock colon overlay off
    delay( 1000 );

  }
}

//----------------------------------------------------------------------
///convert angka agar ada nol didepannya jika diawah 10

String convert(int sInput) {
  if (sInput < 10)
  {
    return "0" + String(sInput);
  }
  else
  {
    return String(sInput);
  }
}
