พูดคุยกันเรื่องบอร์ด Arduino
ผมทำปุ่มส่งกลับไม่ได้ครับ TvT ไม่เข้าใจวิธีอ่านค่าของมันเลยครับ
จุดสำคัญ ตรงที่ void SW_case() ของใน case ผมทำให้มันไปอ่านฟังก์ชั่น Mode_Select_Complete() ใหม่อีกรอบเมื่อกด หรือรอ millis นับเสร็จ ทดลองแล้วครับว่าไม่ได้ พึ่งหัดเขียนโค้ดครับ ดูอาจจะมั่วๆหน่อย
ขอบคุณครับ
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include <SimpleTimer.h>
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include <EEPROM.h>
#include <BluetoothSerial.h>
#include <OneWire.h>
//=========Timer========
SimpleTimer timer;
int timeCH = 0;
int timex = 0;
bool timex_ = false ;
bool timestate = false ;
bool SWNUM = false ;
int buttonState;
int Read_SW1_ch = 0 ;
unsigned long timez = millis();
#define relay 5 //ใช้LEDทดสอบไปก่อน
//#define VPINSW1 V1
#define VPIN_RELAY1 V2
#define VPIN_TIMECOOLDOWN V3
//======define SW===========
#define SW1 26
#define SW2 25
#define SW3 33
#define SW4 32
int Read_SW1 ;
int Read_SW2 ;
int Read_SW3 ;
int Read_SW4 ;
int k = 1 ;
int b = 1 ;
bool Mode_SL = true;
bool Mode_Enter = false;
bool Mode_Clear = true;
//char auth[] = "iDFMhoHR_59Qp6ep3vMJVAan0g6W2KMe";
// Your WiFi credentials.
// Set password to "" for open networks.
//char ssid[] = "Toraneko";
//char pass[] = "mushadan";
void setup()
{
//======lcd Main==============
//for_go;
//timer.setInterval(1000L, for_go);
// Debug console
Serial.begin(115200);
// Blynk.begin(auth, ssid, pass);
// pinMode (VPINSW1,INPUT_PULLUP);
pinMode (relay, OUTPUT);
pinMode (VPIN_RELAY1, OUTPUT);
pinMode (VPIN_TIMECOOLDOWN, OUTPUT);
pinMode(SW1, INPUT_PULLUP);
pinMode(SW2, INPUT_PULLUP);
pinMode(SW3, INPUT_PULLUP);
pinMode(SW4, INPUT_PULLUP);
EEPROM.begin(256);
//==========timer In=============
//timer.setInterval(1000L, SwitchSelect);
//timer.setInterval(1000L, SwitchPush);
lcd.begin();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Welcome :D");
lcd.setCursor(0, 1);
lcd.print("by Phiyaphon");
lcd.clear();
delay(2000);
lcd.setCursor(0, 0);
lcd.print("Waiting 3 Second");
lcd.clear();
delay(3000);
timer.setInterval(1000L,Mode_Select_Complete);
}
void loop()
{
//Mode_Select_Complete();
timer.run();
}
//=============== Button ============
void Mode_Select_Complete(){
if (Mode_Enter) {
CountS();
ModeUpDown();
} else {
Enter_Press();
}
SW_case();
}
void Enter_Press(){
lcd.setCursor(0,1);
lcd.print("Project Select ");
lcd.clear();
Read_SW1 = digitalRead(SW1);
if (Read_SW1 == LOW) {
lcd.setCursor(0,0);
lcd.print("Press Button");
lcd.setCursor(0,1);
lcd.print("Button >");
Mode_Enter = true;
//delay(500);
Mode_Clear = false;
}
}
void ModeUpDown(){
if (Mode_SL) {
Read_SW2 = digitalRead(SW2);
if (Read_SW2 == LOW) {
//delay(100);
timex = millis();
if (digitalRead(SW2) == LOW)
k = k + 1;
while (digitalRead(SW2) == LOW);
}
Read_SW3 = digitalRead(SW3);
if (Read_SW3 == LOW) {
// delay(100);
timex = millis();
if (digitalRead(SW3) == LOW)
k = k - 1;
while (digitalRead(SW3) == LOW);
}
lcd.setCursor(0, 1);
lcd.print("Project : ");
lcd.setCursor(10, 1);
lcd.print(k);
}
}
void CountS() {
if (Mode_SL) {
if (k >= 6) {
k = 6;
// delay(1);
timex = millis();
}
if (k <= 1) {
k = 1;
//delay(1);
timex = millis();
}
}
}
//===========END of BUTTON MODE================
void SW_back(){
Read_SW1 = digitalRead(SW1);
if (Read_SW1 == LOW){
delay(100);
b = 0 ;
if(Read_SW1 = LOW && b == 0){
Enter_Press();
}
}
}
//===================SW CASE===================
void SW_case() {
unsigned long timer2 = millis();
Read_SW4 = digitalRead(SW4);
while (Read_SW4 == LOW){
//if(Read_SW4 == LOW){
switch (k) {
case 1 :
Mode_SL = false;
lcd.setCursor(0, 1);
lcd.print("Blynk Control");
Set_Time_Project1();
Blynk.run();
SW_back();
break;
case 2 :
Mode_SL = false;
lcd.setCursor(0, 1);
lcd.print("Bluetooht Mode");
SW_back();
break;
case 3 :
Mode_SL = false;
lcd.setCursor(0, 1);
lcd.print("Waithing Update");
timez = millis();
if (millis() - timer2 >= 2000)
{
timer2 =+ 500;
b = 0 ;
Read_SW1 = LOW ;
if(Read_SW1 = LOW && b == 0){
Enter_Press();
}
}
break;
case 4 :
Mode_SL = false;
lcd.setCursor(0, 1);
lcd.print("Waithing Update");
timez = millis();
if (millis() - timer2 >= 2000)
{
timer2 =+ 500;
b = 0 ;
Read_SW1 = LOW ;
if(Read_SW1 = LOW && b == 0){
Enter_Press();
}
}
break;
case 5 :
Mode_SL = false;
lcd.setCursor(0, 1);
lcd.print("Waithing Update");
timez = millis();
if (millis() - timer2 >= 2000)
{
timer2 =+ 500;
b = 0 ;
Read_SW1 = LOW ;
if(Read_SW1 = LOW && b == 0){
Enter_Press();
}
}
break;
case 6 :
Mode_SL = false;
lcd.setCursor(0, 1);
lcd.print("Waithing Update");
timez = millis();
if (millis() - timer2 >= 2000)
{
timer2 =+ 500;
b = 0 ;
Read_SW1 = LOW ;
if(Read_SW1 = LOW && b == 0){
Enter_Press();
}
}
break;
default:
Mode_SL = false;
lcd.setCursor(0, 0);
lcd.print("Comeback again");
lcd.setCursor(0, 1);
lcd.print(">>>>>>>");
timez = millis();
if (millis() - timer2 >= 2000)
{
timer2 =+ 500;
b = 0 ;
Read_SW1 = LOW ;
if(Read_SW1 = LOW && b == 0){
Enter_Press();
}
}
break;
}
}
}
//========PROJECT 1 BLYNK============================================================
void chargeCounter() {
if ( timex_ == true) {
timex++;
if (timex >= 30) {
digitalWrite(relay, LOW);
Blynk.virtualWrite(V1, LOW);
Blynk.virtualWrite(VPIN_RELAY1, 0);
timex_ = false ;
}
}
}
void timecheack() {
if (timestate == true) {
timeCH++;
Blynk.virtualWrite(VPIN_TIMECOOLDOWN, timeCH);
if (timeCH >= 10) {
Blynk.virtualWrite(VPIN_TIMECOOLDOWN, 0);
timestate == false;
}
}
}
//=================BLYNK========
BLYNK_WRITE(V1) {
buttonState = param.asInt();
Blynk_relay();
}
void Blynk_relay() {
if (buttonState == 1) {
timex = 0;
timex_ = true;
timeCH = 0;
timestate = true;
digitalWrite(relay, HIGH);
Blynk.virtualWrite(VPIN_RELAY1, 1);
Blynk.virtualWrite(VPIN_TIMECOOLDOWN, timeCH);
}
else
{
digitalWrite(relay, LOW);
Blynk.virtualWrite(VPIN_RELAY1, 0);
Blynk.virtualWrite(VPIN_TIMECOOLDOWN, 0);
timex_ = false;
timestate = false ;
}
delay(100);
}
//=================BLYNK END==========================================================
void Set_Time_Project1() {
timer.setInterval(1000L, chargeCounter);
timer.setInterval(1000L, timecheack);
timer.setInterval(1000L, Blynk_relay);
}