#include <SPI.h>
#include <Wire.h>
#include <Adafruit_SH110X.h>
#include <Adafruit_GFX.h>
#define BUZZER_PIN 13
#define SCREEN_WIDTH 128 // pixel ความกว้าง
#define SCREEN_HEIGHT 64 // 
#define OLED_RESET     -1 //ขา reset เป็น -1 ถ้าใช้ร่วมกับขา Arduino reset
Adafruit_SH1106G OLED(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const int ledPin =  13;
int Hour=0;
int Minute=0;
int Sec=0;
int Hour2=0;
int Minute2=0;
int Sec2=0;
int Step=0;
const int analogInPin = A1; 
int sensorValue = 0;  
void setup() 
{  pinMode(ledPin, OUTPUT);
   digitalWrite(ledPin, HIGH);
  #define BUZZER_PIN 13
  Serial.begin(9600);
  if (!OLED.begin()) 
  { // Use default I2C address 0x3C
    Serial.println("OLED allocation failed");
  } else {
    Serial.println("OLED initialized");
  }
 oled1();
 delay(1000); 
 ok(); oled();
 
}
void loop() 
{
sensorValue = analogRead(analogInPin);
Serial.print("sensor = ");
Serial.println(sensorValue);  
if(Step<6)
{
if(sensorValue<=0)//ซ้าย
{
if(Step==0&&Hour>10)
{
Hour=Hour-10;  
}
else if(Step==1&&Minute>10)
{
Minute=Minute-10;  
}
else if(Step==2&&Sec>10)
{
Sec=Sec-10;  
}
else if(Step==3&&Hour2>10)
{
Hour2=Hour2-10;  
}
else if(Step==4&&Minute2>10)
{
Minute2=Minute2-10;  
}
else if(Step==5&&Sec2>10)
{
Sec2=Sec2-10;  
}
BZ(); oled();
}
//////////////////////////////////////////////////////
else if(sensorValue<200)//บน
{
if(Step==0&&Hour<20)
{
Hour=Hour+10;  
}
else if(Step==1&&Minute<60)
{
Minute=Minute+10;  
}
else if(Step==2&&Sec<60)
{
Sec=Sec+10;  
}
else if(Step==3&&Hour2<23)
{
Hour2=Hour2+10;  
}
else if(Step==4&&Minute2<60)
{
Minute2=Minute2+10;  
}
else if(Step==5&&Sec2<60)
{
Sec2=Sec2+10;  
}
BZ(); oled();
}
/////////////////////////////////////////////
else if(sensorValue<400)//ล่าง
{
if(Step==0)
{
Hour-10;  
}
else if(Step==1)
{
Minute-10;  
}
else if(Step==2)
{
Sec-10;  
}
else if(Step==3)
{
Hour2-10;  
}
else if(Step==4)
{
Minute2-10;  
}
else if(Step==5)
{
Sec2-10;  
}
BZ(); oled();
}
else if(sensorValue<600)//ขวา
{
if(Step==0)
{
Hour++;  
}
else if(Step==1)
{
Minute++;  
}
else if(Step==2)
{
Sec++;  
}
else if(Step==3)
{
Hour2++;  
}
else if(Step==4)
{
Minute2++;  
}
else if(Step==5)
{
Sec2++;  
}
BZ(); oled();
}
else if(sensorValue<800)//ok
{
  Step++; 
hl(); oled();
}
}
////////////////////////////////////////////
if(Step==6)
{
if(Sec==60)
{
  Sec=0;
  Minute++;
}
else if(Minute==60)
{
  Minute=0;
  Hour++;
}
else if(Hour==24)
{
  Hour=0;
}
else
{
Sec++;  
}
oled();
if(Hour==Hour2&&Minute==Minute2&&Sec==Sec2)
{
ok();digitalWrite(ledPin, LOW);    ////สั่งมอเตอร์ทำงาน
}
if(Hour==Hour2&&Minute==Minute2+15&&Sec==Sec2)
{
ok();digitalWrite(ledPin, HIGH);    ////สั่งมอเตอร์หยุดทำงาน
}
}  
}
void oled() 
{
  OLED.clearDisplay(); // ลบภาพในหน้าจอทั้งหมด
  OLED.setTextColor(SH110X_WHITE);  //กำหนดข้อความสีขาว
  OLED.setCursor(0, 0); // กำหนดตำแหน่ง x,y ที่จะแสดงผล
  OLED.setTextSize(2); // กำหนดขนาดตัวอักษร
  OLED.println("T"); // แสดงผลข้อความ
  OLED.setCursor(20,0);
  OLED.print(Hour); // แสดงผลข้อความ
  OLED.setCursor(40,0);
  OLED.print(":"); // แสดงผลข้อความ
  OLED.print(Minute); // แสดงผลข้อความ
  OLED.setCursor(80,0);
  OLED.print(":"); // แสดงผลข้อความ
  OLED.print(Sec); // แสดงผลข้อความ
   OLED.setCursor(0, 24); // กำหนดตำแหน่ง x,y ที่จะแสดงผล
  OLED.println("S"); // แสดงผลข้อความ
  OLED.setCursor(20,24);
   OLED.print(Hour2); // แสดงผลข้อความ
    OLED.setCursor(40,24);
  OLED.print(":"); // แสดงผลข้อความ
  OLED.print(Minute2); // แสดงผลข้อความ
   OLED.setCursor(80,24);
  OLED.print(":"); // แสดงผลข้อความ
  OLED.print(Sec2); // แสดงผลข้อความ
  
    OLED.setTextSize(1);
    OLED.setCursor(0,55);
    OLED.print("Smart robotic   "); // แสดงผลข้อความ
    OLED.println(Step);
    /////////////////////////////////////////////////////////
     if(Step==0)
 {  OLED.setTextSize(2);
    OLED.setCursor(25,4);
    OLED.println("_");
  }
    else if(Step==1)
 {  OLED.setTextSize(2);
    OLED.setCursor(50,4);
    OLED.println("_");
  }
    else if(Step==2)
 {  OLED.setTextSize(2);
    OLED.setCursor(90,4);
    OLED.println("_");
  }
    else if(Step==3)
 {  OLED.setTextSize(2);
    OLED.setCursor(25,25);
    OLED.println("_");
  }
    else if(Step==4)
 {  OLED.setTextSize(2);
    OLED.setCursor(50,25);
    OLED.println("_");
  }
    else if(Step==5)
 {  OLED.setTextSize(2);
    OLED.setCursor(90,25);
    OLED.println("_");
  }
    else if(Step==6)
 {  OLED.setTextSize(1);
    OLED.setCursor(0,45);
    OLED.print("RUN "); // แสดงผลข้อความ
  }
  OLED.display(); // สั่งให้จอแสดงผล
  delay(1000);
  
    
}
void oled1() 
{
  OLED.clearDisplay(); // ลบภาพในหน้าจอทั้งหมด
  OLED.setTextColor(SH110X_WHITE);  //กำหนดข้อความสีขาว
  OLED.setCursor(0, 0); // กำหนดตำแหน่ง x,y ที่จะแสดงผล
  OLED.setTextSize(2); // กำหนดขนาดตัวอักษร
    OLED.setCursor(0,20);
    OLED.println("Smart"); // แสดงผลข้อความ
    OLED.println("robotic"); // แสดงผลข้อความ
  OLED.display(); // สั่งให้จอแสดงผล
  delay(1000);
    
}
 void BZ()
{
 tone(BUZZER_PIN, 1000, 200);
  delay(200);
} 
 void hl()
{
 tone(BUZZER_PIN, 800, 200);
  delay(200);
   tone(BUZZER_PIN, 800, 200);
  delay(200);
} 
 void ok()
{
 tone(BUZZER_PIN, 1000, 500);
  delay(200);
   tone(BUZZER_PIN, 500, 800);
  delay(200);
}