#define led 19
#define sw1 25
int t1, old1, new1,count = 0;
int love =0;
void setup() {
pinMode(sw1, INPUT_PULLUP);
pinMode(led, OUTPUT);
digitalWrite(led, 0);
Serial.begin(115200);
Serial.println("");
Serial.println("");
Serial.println(count);
old1 = digitalRead(sw1); // เก็บค่าเก่าของ sw1 ก่อนเข้า loop
}
void loop() {
new1 = digitalRead(sw1); // รับค่าใหม่ของ sw1
if (old1 != new1 && new1 == 0) { // ถ้า sw1 ถูกกด
count++;
love = 0; // เพิ่มค่าในตัวแปร count ขึ้น 1
if (count > 3) { // ถ้าค่าในตัวแปร count ที่ถูกเพิ่มค่าแล้ว มีค่ามากกว่า 3
count = 0; // กำหนดให้ค่าในตัวแปร count กลับไปเป็น 0
}
Serial.println(count); // print ค่าในตัวแปร count ออกทาง Serail monitor
t1 = millis(); // เริ่มจับเวลา (ตัวแปร t1 เก็บเวลาปัจจุบัน)
}
old1 = new1;
if (count == 0) { // ถ้าค่าในตัวแปร count = 0
digitalWrite(led, 0); // ส่ง 0 ออกที่ขา led (ขา 19)
}
if (count == 1) { // ถ้าค่าในตัวแปร count = 1
blink(250, 750, 3); // เรียกฟังก์ชั่น blink กำหนดค่าตัวแปร dl1 = 250, dl2 = 750
}
if (count == 2) { // ถ้าค่าในตัวแปร count = 2
blink(250, 500, 5); // เรียกฟังก์ชั่น blink กำหนดค่าตัวแปร dl1 = 250, dl2 = 250
}
if (count == 3) { // ถ้าค่าในตัวแปร count = 3
blink(125, 250, 10); // เรียกฟังก์ชั่น blink กำหนดค่าตัวแปร dl1 = 125, dl2 = 125
}
}
void blink (int dl1, int dl2, int time) {
while(love < time) {
if ((millis() - t1) < dl1 ) { // ถ้าเวลาปัจจุบันเปรียบเทียบกับเวลาที่เก็บไว้ใน t1 แล้วน้อยกว่าค่าในตัวแปร dl1
digitalWrite(led, 1); // ส่ง 1 ออกที่ขา led (ขา 19)
}
if ((millis() - t1) >= dl1 ) { // ถ้าเวลาปัจจุบันเปรียบเทียบกับเวลาที่เก็บไว้ใน t1 แล้วมากกว่าหรือเท่ากับค่าในตัวแปร dl1
digitalWrite(led, 0); // ส่ง 0 ออกที่ขา led (ขา 19)
}
if ((millis() - t1) >= (dl1 + dl2) ) { // ถ้าเวลาปัจจุบันเปรียบเทียบกับเวลาที่เก็บไว้ใน t1 แล้วมากกว่าหรือเท่ากับค่าในตัวแปร dl1+dl2
t1 = millis();
love++; // เริ่มจับเวลารอบใหม่ (ตัวแปร t1 เก็บเวลาปัจจุบัน)
}
}
}