ความรู้แน่น ฟรีสำหรับชุมชน ArduinoAll ที่นี่เท่านั้น

ฟรีและดีที่สุด คอร์สอบรม Arduino + NodeMCU
ทำเพื่อแบ่งปัน ห้ามนำไปจำหน่าย หรือเก็บเงินค่าเรียน
  !!!


  


AllNewStep รับประกันคุณภาพทุกชิ้น วันจันทร์-ศุกร์แจ้งชำระสินค้าก่อน 14.00 จัดส่งทันทีวันนี้ค่ะ

กรุงเทพ /ภาคกลาง ได้พรุ่งนี้


*** สินค้าทุกชิ้น ถ้าสามารถทำรายการสั่งซื้อได้ แสดงว่ามีครบทุกรายการค่ะ *** 

พิมพ์ค้นหาบทความ หัวข้อกระทู้ และสินค้าในเว็บ AllNewStep ได้ที่นี่
QUOTE 

สอบถามเกี่ยวกับ Code หน่อยครับ

Mirakelz-

โค้ดกดสวิตช์ กดติด ปล่อยดับ

แต่ไม่ได้กดบางทีมันก็ติดเอง เป็นเพราะอะไรครับ

 

const int buttonPin1 = 2;

const int buttonPin2 = 4;

int ledPin = 12;

int buttonState1 = 0; //ตัวแปรสถานะของปุ่ม ตั้งค่าเริ่มต้นให้เป็น 0 ไว้ก่อน

int buttonState2 = 0;

 

void setup() {

pinMode(ledPin, OUTPUT); //กำหนดให้ Pin 13 เป็น Output

pinMode(buttonPin1, INPUT); //กำหนดให้ Pin 2 เป็น Input

pinMode(buttonPin2, INPUT);

Serial.begin(9600);

 

}

 

void loop(){

buttonState1 = digitalRead(buttonPin1);

buttonState2 = digitalRead(buttonPin2);

 

delay (300);

if (buttonState1 == LOW && buttonState2 == LOW) {

digitalWrite(ledPin, LOW);

Serial.println("0");

delay (500);

}

  else if(buttonState1 == HIGH && buttonState2 == HIGH) {

    digitalWrite(ledPin, HIGH);

    Serial.println("1");

    delay (500);

}

}

QUOTE 
ความคิดเห็นที่ #1
เจ้าของร้าน

ปัญหานี้เกิดจาก 2 สาเหตุดังนี้ครับ

สาเหตุแรก ถ้าไม่ได้ต่อ R เพื่อกำหนดสถานะให้กับสวิตช์ จะต้องต่อให้ด้วย เพื่อกำหนดสถานะเป็น 0 หรือ 1 ให้กับสวิตช์ เรียกว่า pull up หรือ pull down ถ้าไม่ได้ต่อจะมีสัญญาณรบกวน 

วิธีที่สะดวกที่สุดคือ pull up แบบใช้โคด จะไม่ต้องต่อ R เพิ่ม

เขียนแบบนี้

pinMode(buttonPin1, INPUT_PULLUP);

 

ถ้าต่อแล้ว ยังมีอีกสาเหตุเรียกว่า Debounce ครับ คือหน้าสวิตช์ไม่ได้เรียบเนียน แต่มีผิวขรุขระ ทำให้กดไป 1 ครั้ง อาจมีสถานะ 0 หรือ 1 เกิดขึ้นในเสี้ยววินาที

 

ถ้าโปรแกรมไม่เยอะ วิธีแก้ง่าย ๆ ใช้คำสั่ง delay(200); ไว้หลังคำสั่งอ่านค่าจากปุ่มกด

เช่น

buttonState1 = digitalRead(buttonPin1); delay(200);

 

แต่ถ้าโปรแกรมซับซ้อน คำสั่ง delay จะหน่วงเวลาไว้ทำให้โปรแกรมไม่รื่นไหล ใช้คำสั่ง millis() ในการหน่วงเวลาแทน ตัวอย่างตามนี้ครับ

https://www.arduino.cc/en/Tutorial/Debounce

http://wiki.t-o-f.info/Arduino/%C3%89liminationDuRebondissement

 

 

QUOTE 
ความคิดเห็นที่ #2
Mirakelz-

ขอบคุณครับ เดี๋ยวจะลองทำดูครับ

QUOTE 
ความคิดเห็นที่ #3
Mirakelz-

ได้แล้วนะครับ ขอบคุณมากครับ

QUOTE 
ความคิดเห็นที่ #4
เจ้าของร้าน

ยินดีครับ 

แสดงความคิดเห็นที่ 1-4 จากทั้งหมด 4 ความคิดเห็น
ขาย ARDUINO
คุณภาพ อันดับ 1

ได้รับรางวัลร้านยอดเยี่ยม
ตั้งแต่ปี 2558
ขาย Arduino
วีดีโอสอน Arduino

สอน esp8266

สอน Arduino IoT
สอน Arduino แบบเร็ว

สอน NodeMCU

อุปกรณ์ Arduino

MEMBER ZONE

พูดคุย-สอบถาม