#include <Servo.h>//เรียกใช้module servo
Servo myservo;//ตั้งชื่อฟังก์ชันservo
#include <LiquidCrystal_I2C.h>//เรียกใช้ฟังก์ชัน
LiquidCrystal_I2C lcd(0x27, 16, 2);
int H = 0, M = 0, S = 0;
int sec = 15, minutes = 0, hours = 0;
void setup() {
myservo.attach(9);
lcd.begin(16, 1);
Serial.begin(9600);
DDRB = 0xFF; // Set PORTB เป็น outputs
TCCR1A = 0; // initialize timer1
//TCCR1A=Timer/Counter 1 Control Register Aเริ่มต้น=0
TCCR1B = 0; // clear all bit
//TCCR1B Timer/Counter 1 Control Register Bเริ่มต้น=0
OCR1A = 62500; //กำหนดค่าความถี่เป็น 1 Hz Timer1
//จะนับจาก 0 จนถึง OCR1A ที่ค่าprescaler=256
TIMSK1 = 0; // disable all interrupts คำสั่งยกเลิกการinterrupts
// Reset Counter
TCCR1B |= (1 << WGM12); // set to CTC mode (look at Table 2-2)
TCCR1B |= (1 << CS12); // กำหนดค่าprescaler=256 (look at Table 2-1)
}
void loop() {
// put your main code here, to run repeatedly:
if(TIFR1 & (1 <<OCF1A)){ //เงื่อนไขตรวจสอบ interrupt & 1 <<OCF1A
//เมื่อTimer1 นับจนถึง OCR1Aที่ตั้งค่าไว้
TIFR1 = (1 << OCF1A);
S++;}
//สร้างฟังก์ชันความสัมพันธ์การนับเวลา ตามความถี่ที่กำหนดในTimer
if (S >= 60) {
M++;
S = 0;
}
if (M >= 60) {
H++;
M = 0;
}
if (H == hours && M == minutes && S == sec) {
H = 0;
M = 0;
S = 0;
myservo.write(180); // สั่งให้ Servo หมุนไปองศาที่ 180
delay(500); // หน่วงเวลา 500ms
myservo.write(90); // สั่งให้ Servo หมุนไปองศาที่ 90
}//แสดงผลผ่านจอLCD
lcd.setCursor(0, 0);
lcd.print(H); lcd.print(":");
lcd.print(M); lcd.print(":");
lcd.println(S);
lcd.setCursor(0, 1);
lcd.println("open");
lcd.print(hours); lcd.print(":");
lcd.print(minutes); lcd.print(":");
lcd.println(sec);
}