คือผมอยากสร้างปุ่ม digitalRead(sw3) เพื่อ เวลาเข้าโหมดไปแล้วจะมีปุ่มกด digitalRead(sw3) เพื่อกลับไปยังหน้าโหมดเลือกทำงานได้อะครับ คือผมทำยังไงก็ไม่สำเร็จช่วยหน่อยนะครับ
อันล่างเป็นโค้ทที่ผมเขียน ประมาณนี้
String state = "OFF"; // ตั้งค่าเริ่มต้นทั้งหมด
int sw = 1;
void loop()
{
lcd.clear();
lcd.print("Select A Mode");
Serial.println("Select a mode through buttons");
delay(1500);
while(digitalRead(sw1) == LOW) // กดปุ่มจะเข้าสู่โหมดทำงาน
{
if(digitalRead(sw2) == HIGH) //กดปุ่มจะเลือกโหมดถัดไป
{
delay(500);
count++; // จำนวนครั้งที่ปุ่มกด
if(sw >= 12){ sw = 1;}
}
lcd.clear();
lcd.print(" Mode: ");
lcd.print(sw);
delay(100);
}
switch(sw) // Enter the mode according to the number selected earlier
{
case 1: // Toggle mode
lcd.clear();
lcd.print(" Toggle mode ");
delay(1500);
{
delay(1000);
Serial.println("Toggle mode selected");
Serial.println("Press the button to switch the outlet on/off");
int a8 = 0;
while(a8 == 0)
{
lcd.clear();
lcd.print("Curr. State: ");
lcd.print(state);
lcd.setCursor(0,1);
lcd.print("Press Button");
if(digitalRead(10) == HIGH && state3 == 0) // เมื่อกดขะสั่งให้ on
{
digitalWrite(13, HIGH);
state = "ON";
state3++;
Serial.println("Switched on");
delay(1000);
}
if(digitalRead(10) == HIGH && state3 == 1) // เมื่อกดขะสั่งให้ off
{
digitalWrite(13, LOW);
state = "OFF";
state3--;
Serial.println("Switched off");
delay(1000);
}
delay(100);
}
}
break;
case 2:
break;
case 3:
break;
อันผมเอามาแบบคราวๆประมาณนี้ จะขอบคุณมากๆถ้าช่วยผม
โคดยังมีปัญหาหลายจุด แนะนำให้เขียนแยกเฉพาะส่วนของสวิตช์ เอาโคดของ lcd ออกก่อน
คำสั่ง delay จะมีปัญหาทำให้กดปุ่มเร็ว ๆ ไม่ได้ จึงอาจดูเหมือนกดปุ่มแล้วไม่ทำงาน แต่ถ้าไม่ใส่ปุ่มกดสวิตช์จะมีปัญหาเรื่อง Debounce ทำให้กดไปแล้วเหมือนกดหลายครั้งทั้งที่กดแค่ครั้งเดียว
วิธีแก้ง่าย ๆ คือใช้ C ค่า 0.1 uf คร่อมสวิตช์ปุ่มกด
อีกวิธีคือ เขียนโปรแกรมแก้ตามนี้ครับ
https://www.arduino.cc/en/Tutorial/Debounce
หรือใช้ไลบารีสำหรับแก้ปัญหานี้โคดก็จะง่ายขึ้น
https://github.com/JChristensen/Button
ขอตอนนี้ผมแก้ปัญหาสวิตซ์กดได้แล้ว แต่ผมยังไม่สารถสร้างปุ่มเพิ่มขึ้นมาอีกปุ่มเพื่อทำการออกจากโหมดที่เข้าไว้อะครับ ขอบคุณเป็นอย่างสูงครับ