Arduino การใช้งานอ่านค่าจากสวิตช์ โดยใช้คำสั่ง digitalRead()
การต่อสวิตช์มี 2 แบบ คือ pull up โดยจ่ายสัญญาณ 1 ให้กับสวิตช์ อีกแบบคือ pull down โดยจ่ายสัญญาณ 0 ให้กับสวิตช์ โดยผ่านตัวต้านทานเพื้อจำกัดกระแสไม่ให้มากจนทำให้บอร์ดพัง
การกำหนดค่า 0 หรือ 1 ให้กับสวิตช์ก็เพื่อป้องกันสัญญาณรบกวน ใน Arduino เข้าใจปัญหานี้ จึงออกแบบให้ต่อโหมด pull up ได้ โดยไม่ต้องมีอุปกรณ์เพิ่ม เรียกว่า โหมด INPUT_PULLUP
การต่อสวิตช์มี 2 แบบคือ
1. Pull UP คือการกำหนดสัญญาณ 1 ให้กับสวิตช์ตลอดเวลา เมื่อสวิตช์ถูกกดจะให้สัญญาณ 0
2. Pull Down คือ การกำหนดสัญญาณ 0 ให้กับสวิตช์ตลอดเวลา เมื่อสวิตช์ถูกกดจะให้สัญญาณ 1
ใช้ตัวต้านทานจ่ายไฟให้กับสวิตช์ ตัวอย่างดังรูป
Pull UP มีแถมพิเศษ
Arduino ออกแบบให้สามารถทำงานแบบ Pull UP ได้แบบไม่ต้องใช้ตัวต้านทานเพิ่ม เพียงแค่พิมพ์โคดคำสั่งให้เป็นโหมดนี้
pinMode(ขา,INPUT_PULLUP);
ตัวอย่าง ต้องการต่อสวิตช์กับขา 2 เมื่อกดปุ่มให้ LED ที่ขา 7 ติด และเมื่อปล่อยให้ LED ดับ
- เพื่อให้ง่ายต่อการใช้งาน กำหนดสวิตช์เป็นโหมด INPUT_PULLUP สวิตชจะมีสถานะ 1 ตลอดเวลา
- อ่านค่าสวิตช์โดยใช้คำสั่ง digitalRead(ขาสวิตช์);
- กำหนด LED ให้เป็นโหมด OUTPUT
- สั่งให้ไฟ LED ติด โดยใช้คำสั่ง digitalWrite(ขา LED,1);
โคดตัวอย่าง
1 2 3 4 5 6 7 8 9 10 11 12 13 |
void setup(){ pinMode(2,INPUT_PULLUP); pinMode(7,OUTPUT); } void loop(){ int sw = digitalRead(2); if(sw==0){ digitalWrite(7,1); }else{ digitalWrite(7,1); } } |
บทเรียนก่อนหน้าบทเรียนถัดไป
7 Response Comments
โคดตัวอย่างข้างบน คำสั่ง digitalwrite หลัง else ต้องเป็น (7,0) ไหมครับ
ทำได้ ถ้าเขียนคำสั่งว่า digitalWrite(7,0); แปลว่า สั่งให้ไฟออก 0V ที่ขา 7 ครับ
if(sw==0){
digitalWrite(7,1);
}else{
digitalWrite(7,1);
}
ตรงนี้ใน code ใน else ต้องเป็น digitalWrite(7,0); ใช่ป่ะครับ
ถูกต้องครับ ต้องเป็น digitalWrite(7,0);
ไม่มีตัวต้านทานจำกัดกระแส led เหรอครับ
กระแสไม่เยอะ และโวลต์อยู่ในช่วงของ led ทำงาน สามารถต่อตรงได้เลย แต่ถ้าจะต่อ R ก็ได้ครับ
Thankssssssssssss