การทดลองที่ 3.1 (การต่อวงจรปุ่มกดและไดโอดเปล่งแสงสำหรับ Arduino)
วัตถุประสงค์
1. ฝึกการต่อวงจรปุ่มกดและวงจรไดโอดเปล่งแสงที่ใช้ไฟเลี้ยงจากคอมพิวเตอร์ และเชื่อมต่อเข้ากับขา input output ของบอร์ด Arduino
2. ฝึกการเขียนโปรแกรมภาษา C และ C++ เพื่อสั่งการทำงานของวงจรบอร์ด Arduino
3. เรียนรู้การทำงานของบอร์ด Arduino และโปรแกรมที่ใช้ในการสั่งการทำงานของบอร์ดดังกล่าว
อุปกรณ์ที่ใช้ในการทดลอง
1. แผงต่อวงจร (เบรดบอร์ด) 1 อัน
2. บอร์ด Arduino (ใช้แรงดันลอจิก +5V) 1 บอร์ด
3. ปุ่มกดแบบสี่ขา 2 ตัว
4. ไดโอดเปล่งแสงขนาด 5 มม. 4 ตัว
5. ตัวต้านทาน 10kΩ 2 ตัว
6. ตัวต้านทาน 330Ω หรือ 470Ω 4 ตัว
7. สายไฟสำหรับต่อวงจร 1 ชุด
ขั้นตอนการทดลอง
1. ยังไม่ต้องเชื่อมต่อ +5V และ Gnd จากบอร์ด Arduino ไปยังเบรดบอร์ดเพื่อจ่ายเป็นแรงดันไฟเลี้ยง VCC และ GND
2. ต่อวงจรปุ่มกดพร้อมตัวต้านทานแบบ Pull-up 10kΩ จำนวนสองชุด (PB1 และ PB2) บนเบรดบอร์ด แล้วนำไปต่อกับขา D2 และ D3 ของบอร์ด Arduino ตามลำดับ โดยใช้ลวดสายไฟสำหรับต่อวงจร (ดูตามผังวงจรในรูปที่ 3.1.1)
2. ต่อวงจรปุ่มกดพร้อมตัวต้านทานแบบ Pull-up 10kΩ จำนวนสองชุด (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)
4. เขียนโค้ดตามตัวอย่างโดยใช้ Arduino IDE แล้วทำขั้นตอนคอมไพล์และอัพโหลดโปรแกรมไปยังบอร์ด Arduino
5. ตรวจสอบความถูกต้องของวงจรบนเบรดบอร์ดอีกครั้ง จากนั้นจึงเชื่อมต่อ +5V และ Gnd จากบอร์ดArduino ไปยังเบรดบอร์ดเพื่อใช้เป็นแรงดันไฟเลี้ยง (VCC และ GND) ให้ระวังการต่อสลับขั้วสายไฟและ ระวังการต่อถึงกันทางไฟฟ้าของสายไฟทั้งสองเส้น
6. แก้ไขโค้ดให้แสดงพฤติกรรมการทำงานตามข้อกำหนดต่อไปนี้ ตรวจสอบและสาธิตความถูกต้องในการทำงาน โดยใช้ฮาร์ดแวร์จริง
6.1 เมื่อเริ่มต้นทำงาน จะมี LED เพียงตัวเดียวที่อยู่ในสถานะ “ติด” (LED1) และที่เหลืออีก 3 ตัว (LED2, LED3, LED4) อยู่ในสถานะ “ดับ”
4. เขียนโค้ดตามตัวอย่างโดยใช้ Arduino IDE แล้วทำขั้นตอนคอมไพล์และอัพโหลดโปรแกรมไปยังบอร์ด Arduino
5. ตรวจสอบความถูกต้องของวงจรบนเบรดบอร์ดอีกครั้ง จากนั้นจึงเชื่อมต่อ +5V และ Gnd จากบอร์ดArduino ไปยังเบรดบอร์ดเพื่อใช้เป็นแรงดันไฟเลี้ยง (VCC และ GND) ให้ระวังการต่อสลับขั้วสายไฟและ ระวังการต่อถึงกันทางไฟฟ้าของสายไฟทั้งสองเส้น
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.2-6.3
const byte PB_1 = 2;
const byte PB_2 = 3;
const byte LEDS [4] = {4, 5, 6, 7};
int y = 0;
void setup() {
pinMode (PB_1, INPUT);
pinMode (PB_2, INPUT);
delay (20);
for (int i = 0; i < 4; i++) {
pinMode (LEDS [i], OUTPUT);
digitalWrite (LEDS [i], (i == 0) ? HIGH : LOW);
}
}
void loop() {
if (digitalRead(PB_1) == LOW) {
while (digitalRead (PB_1) == LOW);
delay (20);
y++;
if (y == 4) y = 0;
for (int i = 0 ; i < 4 ; i++) {
digitalWrite (LEDS [i], (i == y) ? HIGH : LOW);
}
}
if (digitalRead(PB_2) == LOW) {
while (digitalRead (PB_2) == LOW);
delay (20);
y--;
if (y < 0) y = 3;
for (int i = 0 ; i < 4 ; i++) {
digitalWrite (LEDS [i], (i == y) ? HIGH : LOW);
}
}
}
**โค้ดสำหรับขั้นตอนการทดลองที่ 7.2-7.3
const byte PB_1 = 2;
const byte PB_2 = 3;
const byte LEDS [4] = {4, 5, 6, 7};
byte JIB[] = {B0000, B0001, B0010, B0011, B0100, B0101, B0110, B0111, B1000, B1001, B1010, B1011, B1100, B1101, B1110, B1111, B0000};
int a = 0;
void setup() {
pinMode (PB_1, INPUT);
pinMode (PB_2, INPUT);
delay (20);
for (int i = 0; i < 4; i++) {
pinMode (LEDS [i], OUTPUT);
digitalWrite (LEDS [i], (i == 0) ? HIGH : LOW);
}
}
void loop() {
a += (digitalRead(PB_1) == LOW)?((a==15)?-a:1):0;
a += (digitalRead(PB_2) == LOW)?((a==15)?-a:1):0;
byte b = JIB[a];
for(int i = 0; i < 4; i++){
digitalWrite(LEDS[i], b&1);
b >>= 1;
}
delay(100);
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น