#include "Clock.h"
#include <TimerOne.h>
#include <Keypad.h>

Clock myClock(0, 0, 0);

int h = 23;
int m = 59;
int s = 59;
int x = 99;
int h1 = 0;
int m1 = 0;
int s1 = 0;
int x1 = 0;
int time = 0;
int tamp = 0;
int count = 0;

bool _update = false;
bool _update2 = false;
bool check = false;
bool _switch = false;
bool nitial = true;

const uint8_t ROWS = 4;
const uint8_t COLS = 3;
char keys[ROWS][COLS] = {
  { '1', '2', '3'},
  { '4', '5', '6' },
  { '7', '8', '9' },
  { '*', '0', '#' }
};

uint8_t colPins[COLS] = { 5, 4, 3 };
uint8_t rowPins[ROWS] = { 9, 8, 7, 6 };

Keypad pad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
char key = pad.getKey();

void setup() {

  myClock.init();
  Serial.begin(9600);
  Serial.println(" ");
  Timer1.initialize(10000);
  Timer1.attachInterrupt(clk);

  myClock.setTime(h, m, s, x);

}


void loop() {

  myClock.autoTime();
  myClock.displayTime();
  if (nitial == true) { //初始時會直接進入倒數  但是後面按了#後就不會再進入此
    if (_update == true) {
      myClock.setTime(h, m, s, x);
      nitial == false;
    }
  }

  char key = pad.getKey();
  if (key != NO_KEY) {
    Serial.println(key);
    if (key == '#') {
      h1 = h;
      m1 = m;
      s1 = s;
      x1 = x;//保存上一刻的最新時間
      nitial = false;
      _switch = false;
      check = true; // 進入設置模式
      Serial.println(check);
    }
  }

  while (check) {
    myClock.autoTime();
    myClock.displayTime();
    if (_update2 == true) {
      myClock.blink();
      _update2 = false;
    }
    char key = pad.getKey();
    if (key != NO_KEY) {
      if (key >= '0' && key <= '9') { // 將按鍵的值轉換為數字

        int num = key - '0';

        if (count == 0) {
          tamp = num * 10 ;
          h1 = tamp + h1 % 10;
          myClock._display(0, num);
          myClock.setTime(h1, m1, s1, x1);
        } else if (count == 1) {
          tamp = h1 - h1 % 10 + num ;
          h1 = tamp ;
          myClock._display(1, num);
          myClock.setTime(h1, m1, s1, x1);//正式更新完小時
        } else if (count == 2) {
          tamp = num * 10 ;
          m1 = tamp + m1 % 10;
          myClock._display(2, num);
          myClock.setTime(h1, m1, s1, x1);
        } else if (count == 3) {
          tamp = m1 - m1 % 10 + num ;
          m1 = tamp ;
          myClock._display(3, num);
          myClock.setTime(h1, m1, s1, x1);//正式更新完分鐘
        } else if (count == 4) {
          tamp = num * 10 ;
          s1 = tamp + s1 % 10;
          myClock._display(4, num);
          myClock.setTime(h1, m1, s1, x1);
        } else if (count == 5) {
          tamp = s1 - s1 % 10 + num ;
          s1 = tamp ;
          myClock._display(5, num);
          myClock.setTime(h1, m1, s1, x1);//正式更新完秒鐘
        }

        count++; // 增加計數器,用於標記設置的項目
        tamp = 0;
        if (count > 5) {
          count = 0; // 重置計數器
        }

      } else if (key == '*') {
          count = 0;//如果突然中止 必須確保計數器歸0
          check = false;
          h = h1;
          m = m1;
          s = s1;
          x = x1;
          _switch = true;// 退出設置模式
      }

    }
  }

  if (_switch == true) {
    if (_update == true) {
      myClock.setTime(h, m, s, x);
      _update == false;
    }
  }

}

void clk() {//這裡應該只放更新時間的邏輯

  x--;
  time++;
  if (x <= 0) {
    x = 99;
    s--;

    if (s <= 0) {
      s = 59;
      m--;

      if (m <= 0) {
        m = 59;
        h--;

        if (h <= 0 ) {
          h = 23;
        }
      }
    }
  }

  _update = true;
  if (time == 50) {
    _update2 = true;
    time = 0;
  }

}



uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
GND5VSDASCLSQWRTCDS1307+
rtc1:GND
rtc1:5V
rtc1:SDA
rtc1:SCL
rtc1:SQW
keypad1:R1
keypad1:R2
keypad1:R3
keypad1:R4
keypad1:C1
keypad1:C2
keypad1:C3