วันศุกร์ที่ 5 กันยายน พ.ศ. 2557

การทดลองที่ 3.1 การต่อวงจรปุ่มกดและไดโอดเปล่งแสงสำหรับ Arduino

วัตถุประสงค์

  • ฝึกต่อวงจรปุ่มกดและไดโอดเปล่งแสง (LED) และเชื่อมต่อกับขาอินพุต/เอาต์พุต-ดิจิทัลของบอร์ดArduino
  • ฝึกเขียนโปรแกรมภาษา C/C++ เพื่อกำหนดพฤติกรรมการทำงานของบอร์ด Arduino ตามโจทย์ที่กำหนดให้

รายการอุปกรณ์

  • แผงต่อวงจร (เบรดบอร์ด) 1 อัน
  • บอร์ด Arduino (ใช้แรงดันลอจิก +5V) 1 บอร์ด
  • ปุ่มกดแบบสี่ขา 2 ตัว
  • ไดโอดเปล่งแสงขนาด 5 มม. 4 ตัว
  • ตัวต้านทาน 10kΩ 2 ตัว
  • ตัวต้านทาน 330Ω หรือ 470Ω 4 ตัว
  • สายไฟสำหรับต่อวงจร 1 ชุด

ขั้นตอนการทดลอง
1. ยังไม่ต้องเชื่อมต่อ +5V และ Gnd จากบอร์ด Arduino ไปยังเบรดบอร์ดเพื่อจ่ายเป็นแรงดันไฟเลี้ยง
VCC และ GND
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) อยู่ในสถานะ “ดับ”
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
const byte PB_1 = 2;
const byte PB_2 = 3;
const byte LEDS[4] = {4, 5, 6, 7};

void setup() {
  for (int i = 0; i < 4; i++) {
    pinMode(LEDS[i], OUTPUT);
    //digitalWrite(LEDS[i], (i == 0) ? HIGH : LOW);
  }
}
int a=0;
void loop() {
  int SW_1 = digitalRead(PB_1);
  int SW_2 = digitalRead(PB_2);
  delay(100);
  if (SW_1 == LOW) {
    digitalWrite(LEDS[a], HIGH);
    if (a >= 3){
      a = 0;
    }
    else {
      a++;
    }
  }
    if (SW_2 == LOW) {
    digitalWrite(LEDS[a], HIGH);
    if (a <= 0){
      a = 3;
    }
    else {
      a--;
    }
  }
  for (int b = 0; b < 4; b++) {
    digitalWrite(LEDS[b], LOW);
  }
  digitalWrite(LEDS[a], HIGH);
}



การทำงานเมื่อกดสวิตซ์ LED 

โค้ดในข้อย่อย 7

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; }


รูปแบบวงจร



ไม่มีความคิดเห็น:

แสดงความคิดเห็น