การทดลองที่ 3.1
การต่อวงจรปุ่มกดและไดโอดเปล่งแสงสำหรับ Arduino
วัตถุประสงค์
1. ฝึกต่อวงจรปุ่มกดและไดโอดเปล่งแสง (LED) และเชื่อมต่อขาอินพุต-เอาต์พุต ดิจิทัลของบอร์ด Arduino
2. ฝึกเขียนโปรแกรมภาษา C, C++ เพื่อกำหนดพฤติกรรมการทำงานของบอร์ด Arduino ตามโจทย์ที่กำหนดให้
รายการอุปกรณ์
- บอร์ด Arduino (ใช้แรงดันลอจิก 5 V) 1 บอร์ด
- ปุ่มกดแบบสี่ขา 2 ตัว
- ไดโอดเปล่งแสงขนาด 5 มม. 4 ตัว
- ตัวต้านทาน 10 kΩ 2 ตัว
- ตัวต้านทาน 330 Ω หรือ 470 Ω 4 ตัว
- สายไฟสำหรับต่อวงจร 1 ชุด
- แผงต่อวงจร (เบรดบอร์ด) 1 อัน
ขั้นตอนการทดลอง
1. ยังไม่ต้องเชื่อมต่อ +5V และ Gnd จากบอร์ดArduino ไปยังเบรดบอร์ดเพื่อจ่ายเป็นแรงดันไฟเลี้ยง VCC และGND
2. ต่อวงจรปุ่มกดพร้อมตัวต้านทานแบบ Pull-Up 10 kΩ จำนวน 2 ชุด (PB1 และ PB2) บนเบรดบอร์ดแล้วนำไปต่อกับขา D2 และ D3 ของบอร์ด Arduino ตามลำดับ โดยใช้ลวดสายไฟสําหรับต่อวงจร (ดูตามผังวงจรในรูปที่3.1.1)
3.ต่อวงจรโดยใช้ไดโอดเปล่งแสง(LED) พร้อมตัวต้านทานแบบอนุกรม 330Ωหรือ470Ωจํานวน 4 ชุด(LED1, LED2, LED3, LED4) บนเบรดบอร์ด แล้วนําไปต่อกับขา D4, D5, D6, D7, D8 ของบอร์ด Arduino ตามลําดับ โดยใช้ลวดสายไฟสําหรับต่อวงจร(ดูตามผังวงจรในรูปที่3.1.1)2. ต่อวงจรปุ่มกดพร้อมตัวต้านทานแบบ Pull-Up 10 kΩ จำนวน 2 ชุด (PB1 และ PB2) บนเบรดบอร์ดแล้วนำไปต่อกับขา D2 และ D3 ของบอร์ด Arduino ตามลำดับ โดยใช้ลวดสายไฟสําหรับต่อวงจร (ดูตามผังวงจรในรูปที่3.1.1)
ผังวงจรที่ 3.1.1 |
4. เขียนโค้ดตามตัวอย่างโดยใช้Arduino IDE แล้วทําขั้นตอนคอมไพล์และอัพโหลดโปรแกรมไปยังบอร์ด Arduino
5. ตรวจสอบความถูกต้องของวงจรบนเบรดบอร์ดอีกครั้ง จากนั้นจึงเชื่อมต่อ+5V และGnd จากบอร์ด Arduino ไปยังเบรดบอร์ดเพื่อใช้เป็นแรงดันไฟเลี้ยง(VCC และGND) ให้ระวังการต่อสลับขั้วสายไฟ และ ระวังการต่อถึงกันทางไฟฟ้าของสายไฟทั้ง 2 เส้น
6. แก้ไขโค้ดให้ แสดงพฤติกรรมการทํางานตามข้อกําหนดต่อไปนี้ ตรวจสอบและสาธิตความถูกต้องในการทํางาน โดยใช้ฮาร์ดแวร์จริง
6.1 เมื่อเริ่มต้นทํางาน จะมีLED เพียงตัวเดียวที่อยู่ในสถานะ“ติด” (LED1) และที่เหลืออีก3 ตัว (LED2, LED3, LED4) อยู่ในสถานะ“ดับ”
6.2 ถ้ากดปุ่มPB1 แล้วปล่อยในแต่ละครั้ง จะทําให้ตําแหน่งของLED ที่“ติด” เลื่อนไปทางขวาทีละ หนึ่งตําแหน่ง หรือวนกลับมาเริ่มต้นใหม่ทางซ้ายสุด(LED1 -> LED2 -> LED3 -> LED4 -> …)
6.3 ถ้ากดปุ่มPB2 แล้วปล่อยในแต่ละครั้ง จะทําให้ตําแหน่งของLED ที่“ติด” เลื่อนไปทางซ้ายทีละ หนึ่งตําแหน่ง หรือวนกลับมาเริ่มต้นใหม่ทางขวาสุด(LED1 -> LED4 -> LED3 -> LED2 -> …)
7. แก้ไขโค้ดให้ แสดงพฤติกรรมการทํางานตามข้อกําหนดต่อไปนี้ ตรวจสอบและสาธิตความถูกต้องในการทํางาน
7.1 ใช้LED ทั้ง4 ตัว แสดงเลขในฐานสอง จํานวน4 หลัก(4-bit binary number) ซึ่งรับสัญญาณ เอาต์พุตมาจากบอร์ดArduino และกําหนดให้บิตที่มีค่า0 หมายถึงLED “ดับ” และ บิตที่มีค่าเป็น 1 หมายถึงLED “ติด”และเมื่อเริ่มต้นทํางาน ให้แสดงค่าเป็น0
7.2 เมื่อกดปุ่มPB1 แล้วปล่อยแต่ละครั้ง จะทําให้ค่าเพิ่มขึ้นที ละหนึ่ง จาก0000, 0001, 0010, …, 1111 ตามลําดับ แล้ววนกลั บไปเริ่มต้นที่0000 ใหม่ได้
7.3 แต่ถ้ากดปุ่มPB2 จะทําให้ได้ค่าเป็น0000 ทันที (หมายถึ ง การรีเซตค่าเป็นศูนย์)
ผลการทดลอง
รูปการต่อวงจรจริง |
การทดลองกรณีข้อ 6
ผลการทดลองในกรณีข้อ 6
โค้ด Arduino
const byte PB_1 = 2;
const byte PB_2 = 3;
const byte LEDS[4] = {4, 5, 6, 7};
void setup() {
pinMode(PB_1, INPUT);
pinMode(PB_2, INPUT);
for (int i = 0; i < 4; i++) {
pinMode(LEDS[i] , OUTPUT);
digitalWrite(LEDS[i], (i == 0) ? HIGH : LOW );
}
}
int j = 0;
void loop() {
if (button(PB_1)) {
digitalWrite( LEDS[j], LOW );
if (j == 3) { //LED4
j = 0;
}
else {
j += 1;
}
digitalWrite( LEDS[j], HIGH );
} else if (button(PB_2)) {
digitalWrite( LEDS[j], LOW );
if (j == 0) { //LED1
j = 4;
}
else {
j -= 1;
}
digitalWrite( LEDS[j], HIGH );
}
delay(100);
}
bool button(byte pin) {
int t = 5;
while (digitalRead(pin) == LOW) {
delay(1);
t -= 1;
if (t == 0) {
while (digitalRead(pin) == LOW) {
return true;
}
}
}
return false;
}
การทดลองกรณีข้อ 7
ผลการทดลองในกรณีข้อ 7
โค้ด Arduino
const byte PB_1 = 2;
const byte PB_2 = 3;
const byte LEDS[4] = {4, 5, 6, 7};
byte count = 0;
void setup() {
pinMode( PB_1, INPUT );
pinMode( PB_2, INPUT );
for (int i = 0; i < 4; i++) {
pinMode( LEDS[i], OUTPUT );
digitalWrite( LEDS[i], (i == 0) ? HIGH : LOW );
}
}
void loop() {
check();
disp();
}
void check() {
if (isButton(PB_1))
count = count + 1;
if (isButton(PB_2))
count = 0;
}
void disp() {
byte t = count;
for (int i = 0; i < 4; i++) {
digitalWrite(LEDS[i], t & 1);
t >>= 1;
}
}
bool isButton(byte pinNumber) {
byte t = 5;
while ((digitalRead(pinNumber) == LOW) && --t){
delay(1);
}
if (t == 0) {
while (digitalRead(pinNumber) == LOW);
return true;
}
return false;
}
อ้างอิง: เอกสารประกอบการสอน โดย ดร.เรวัต ศิริโภคาภิรมย์
ไม่มีความคิดเห็น:
แสดงความคิดเห็น