Digital Input โดยใช้ปุ่ม
บอร์ด Arduino มี Digital I/O PINs สำหรับใช้รับค่าหรือควบคุมการทำงานของอุปกรณ์ ซึ่งสัญญาณดิจิตอล หมายถึง สัญญาณทางไฟฟ้าที่มีค่าการทำงาน 2 ค่า คือ 1 (High) และ 0 (Low) ดังนั้นเมื่อใช้ Digital Pins ของ Arduino เป็นตัวรับค่าสัญญาณ ค่าที่ Arduino อ่านได้จะมีเพียง 2 ค่า คือ HIGH และ LOW
Pull-Up และ Pull-Down
เมื่อนำสายสัญญาณต่อเข้ากับ Input Pin Arduino จะไม่สามารถตีความได้ชัดเจนว่าขณะนี้ค่าที่อ่านได้เป็น Low หรือ High เพราะบางครั้งแรงดันไฟจะอยู่ครึ่ง ๆ กลาง ๆ ระหว่าง HIGH กับ LOW เพื่อป้องกันปัญหานี้ จึงต้องนำตัวต้านทานมาต่อในวงจรเพื่อให้สามารถระบุสถานะได้อย่างชัดเจน และใช้กระแสลดลงด้วย ตัวต้านทานที่นำมาใช้จะมีค่าระหว่าง 5KΩ - 10KΩ ซึ่งการต่อตัวต้นทานจะมี 2 แบบ คือ Pull-Up และ Pull-Down
|
ที่มา : http://commandronestore.com/learning/arduino002.php |
Pull-Up
การต่อตัวต้านทานแบบนี้เมื่อไม่ได้กดปุ่ม Input pin จะอ่านสถานะเป็น High โดยกระแสปริมาณเล็กน้อยจะไหลจาก Vcc หรือแหล่งจ่ายไฟไปยัง Input pin โดยไม่ได้ไหลลง Ground ดังนั้นแรงดันที่ Input pin อ่านได้จะใกล้เคียงกับแหล่งจ่ายไฟ แต่เมื่อกดปุ่มกระแสจะไหลลง Ground แทน แรงดันที่ Input pin อ่านได้จะใกล้เคียง 0 จึงตีความเป็นสถานะ Low สาเหตุที่ต้องต่อตัวต้านทานไว้เพื่อป้องกันการลัดวงจร โดยตัวต้านทานจะทำหน้าที่จำกัดกระแส
Pull-Down
การต่อตัวต้นทานแบบนี้เมื่อไม่ได้กดปุ่ม Input pin จะอ่านสถานะเป็น Low โดยการทำงานจะตรงข้ามกับแบบ Pull-Up
อุปกรณ์
- Arduino UNO
- ปุ่มกดติดปล่อยดับแบบ 4 pin
- ตัวต้านทาน 10KΩ
วงจร
วงจรปุ่มกดติดปล่อยดับแบบ 4 pin
|
ที่มา : http://commandronestore.com/learning/arduino002.php |
|
ที่มา : http://se.farnell.com/omron-electronic-components/b3f4055/switch-projected-12x12x7-3-260gf/dp/1960973 |
- ขา 1 เชื่อมกับขา 2
- ขา 3 เชื่อมกับขา 4
- เมื่อกดปุ่ม ขา 1 และ 2 เชื่อมกับขา 3 และ 4
การต่อวงจร
|
การต่อวงจรแบบ Pull-Up |
|
การต่อวงจรแบบ Pull-Down |
ไลบรารี
-
ตัวอย่าง Code
เป็นตัวอย่างของวงจรแบบ Pull-Down
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| int pins[5] = {3,4,5,6,7};
#define NUMBUTTONS sizeof(pins)/sizeof(int)
int states[NUMBUTTONS], curStates[NUMBUTTONS];
long debouce[NUMBUTTONS];
void setup()
{
byte i;
for(i=0;i<4;i++) {
pinMode(pins[i], INPUT);
}
Serial.begin(9600);
}
void loop()
{
checkButton();
byte i;
for(i=0;i<NUMBUTTONS;i++) {
Serial.println(pins[i]);
Serial.println(states[i]);
}
execute(displayLCD,0,(char*)"Button 1");
execute(displayLCD,1,(char*)"Button 2");
execute(displayLCD,2,(char*)"Button 3");
execute(displayLCD,3,(char*)"Button 4");
execute(displayLCD,4,(char*)"Button 5");
}
void checkButton() {
byte i;
for(i=0;i<NUMBUTTONS;i++) {
int state = digitalRead(pins[i]);
if(state != HIGH) {
states[i] = LOW;
debouce[i] = millis();
continue;
}
if(debouce[i]-millis()>50) {
states[i] = HIGH;
}
}
}
void displayLCD(char* text) {
Serial.println(text);
}
void execute(void f(char* text), int i, char* text) // receive address of print
{
if(states[i]==HIGH) {
if(curStates[i]==LOW) {
curStates[i] = HIGH;
f(text);
}
} else {
curStates[i] = LOW;
}
}
|
บรรณานุกรม
ไม่มีความคิดเห็น:
แสดงความคิดเห็น