ต้องการสลับโหมด Manual กับ Auto โดยการใช้ปุ่มภายนอกครับ

ได้ครับ ๆ พอดีบางปุ่มยังไม่รู้ครับว่าทำอะไรได้บ้าง :joy:

ผมหมายถึงลักษณะทางกายภาพของปุ่นเหล่านี้ที่เราใช้นะครับ

ภาพ

มันคือ
PUSH = กดค้างไว้ไฟวิ่ง พอปล่อย ไฟหยุด หรือ
SWITCH = กดหนึ่งครั้งมันจะค้าง ไฟวิ่ง ต้องกดอีกครั้ง ไฟหยุด

ครับที่ผมต้องการสลับโหมดก็คือการ SWITCH ครับ โดยการกดปุ่ม 1 ครั้ง คือการสลับการทำงานครับ
ระหว่าง AUTO กับ MANUAL

ถ้าอย่างนั้นก็เข้ากรณีนี้ถูกไหม

ภาพ

บน Widget button สามารถตั้งได้ว่าจะเป็น SWITCH หรือ PUSH นะครับ ต้องดูด้วยว่าเราตั้งอะไรมันไว้ ค่า Define มันคือ PUSH

คือ การสลับโหมดระหว่าง AUTO กับ MANUAL บน Blynk ผมได้แล้วครับ ๆ โดยใช้ Switch นี่ล่ะครับ
ติดปัญหาแค่ปุ่มภายนอกครับ ที่ผมอยากสลับโหมดให้ทำงานเหมือน SWITCH บน Blynk

ครับผมก็ถึงอยากรู้ว่า ปุ่มที่เรามีนั้นมันกด แบบไหน ?? ไฟถึง On หน้า Contack ถึงต่อกัน โค้ตมันเขียนไม่เหมือนกัน ถ้าการกดไม่เหมือนกัน

งั้นเอางี้ เขียนโค้ต LED ON/OFF โดยใช้ปุ่มนี้มาให้ผมดูหน่อยครับ ยังไม่ต้องใส่ โค้ต หลักเข้าไป

หมายถึงประเภทของปุ่มภายนอกที่ผมใช้งานอยู่รึเปล่าครับ

ผมก็หมายถึงอย่างนั้นละครับ

เป็นกดติดปล่อยดับครับ ปุ่มเล็ก ๆ ก็เหมือนกันครับ ประเภทเดียวกันหมด
image

เขียนรับค่าปุ่มประเภทนี้ได้อยู่ใช่ไหมครับ

ได้ครับผมก็อาศัยหลักการเดียวกับการเปิด - ปิด ไฟ เลยครับ
แต่ทีนี้ก็คงต้องเปลี่ยนเป็นการกดปุ่มเป็นการส่งค่า 1 กับ 0 แทน

1 Likes

ก็นั้นแหละครับโค้ตก็ประมาณนี้

push button switch on-off led

int stateNow = 0;
int stateBefore = 0;
int i = 0;
int j = 0;

void setup() {
  pinMode (2, INPUT);
  pinMode (3, OUTPUT);
}

void loop() {
  stateNow = digitalRead(2);
  if (stateNow != stateBefore) {
    if (stateNow == HIGH and i == 0) {
      digitalWrite (3, HIGH);
      j = 1;
    }
    else if (stateNow == LOW and j == 1) {
      i = 1;
    }
    else if (stateNow == HIGH and i == 1) {
      digitalWrite (3, LOW);
      j = 0;
    }
    else if (stateNow == LOW and j == 0) {
      i = 0;
    }
  }
  stateBefore=stateNow;
}

ถ้าจะเอาไปใช้กับโจทย์ของเราก็

int stateNow = 0;
int stateBefore = 0;
int i = 0;
int j = 0;

void setup() {
  pinMode (2, INPUT);
}

void loop() {
  stateNow = digitalRead(2);
  if (stateNow != stateBefore) {
    if (stateNow == HIGH and i == 0) {
      Blynk.virtualWrite(V0,1);
      j = 1;
    }
    else if (stateNow == LOW and j == 1) {
      i = 1;
    }
    else if (stateNow == HIGH and i == 1) {
      Blynk.virtualWrite(V0,0);
      j = 0;
    }
    else if (stateNow == LOW and j == 0) {
      i = 0;
    }
  }
  stateBefore = stateNow;
}

ขอบคุณมากนะครับเดี๋ยวต้องไปทดลองดูก่อนครับ ขอบคุณที่มาตอบผมมากเลยนะครับ ถ้าถาม งง ๆ หรือพิมพ์ไม่รู้เรื่อง ขอโทษด้วยนะครับ :pray:t2:

เรื่องงงเป็นเรื่องปกติครับ เว็บนี้ชอบให้คนถามครับ ผิดถูกไม่มีใครว่า แต่ผิดแล้วได้ไอเดียร์อะไรก็เอามาแชร์กัน ครับ

อย่าลืมแจ้งผลด้วยนะครับ ว่าได้หรือยัง

ได้ครับผม ไว้จะมาบอกผลนะครับ

ตอนนี้สามารถทำงานได้แล้วนะครับสลับโหมดการทำงานได้ทั้งผ่าน Blynk และ ปุ่มกดภายนอก ครับ
ขอบคุณสำหรับโค้ดมาก ๆ ครับ ไม่ได้โค้ดจากที่นี่ก็ทำไม่สำเร็จแน่ๆครับ

1 Likes

วางโค้ตที่แก้ไขแล้ว ไว้หน่อยนะครับ เผื่อเป็นแนวทางกับคนอื่นๆ ต่อไป