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

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

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

1. ฝึกต่อวงจรปุ่มกดและไดโอดเปล่งแสง (LED) และเชื่อมต่อกับขาอินพุต/เอาต์พุต-ดิจิทัลของ
บอร์ด Arduino
2. ฝึกเขียนโปรแกรมภาษา C/C++ เพื่อกําหนดพฤติกรรมการทํางานของบอร์ด 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) 

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 -> … ) 
โค้ด Arduino Sketch
const byte PB_1 = 2;
const byte PB_2 = 3;
const byte LEDS[4] = {4, 5, 6, 7};
byte n = 0;
void setup() {
  // put your setup code here, to run once:
  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 CheckButton(){
  if( isButtonclicked( PB_1 ))
  n=n+1;
  if( isButtonclicked( PB_2 ))
  n=n-1;
}

void displayLED(){
    digitalWrite(LEDS[n+1], 1);
    digitalWrite(LEDS[n-1], 1);
    digitalWrite(LEDS[n], 1);

}

bool isButtonclicked( byte pinnumber ){
  byte t=5;
  while((digitalRead(pinnumber)==LOW)&& --t)
    delay(1);
  if(t==0){
    while(digitalRead(pinnumber)==LOW);
    return true;
  }
  return false;
}
  
void loop() {
  // put your main code here, to run repeatedly:
  CheckButton();
  displayLED();
}

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 ทันที (หมายถงึ การรีเซตค่าเป็นศูนย์) 

โค้ด Arduino Sketch

const byte PB_1 = 2;
const byte PB_2 = 3;
const byte LEDS[4] = {4, 5, 6, 7};
byte n = 0;
void setup() {
  // put your setup code here, to run once:
  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 CheckButton(){
  if( isButtonclicked( PB_1 ))
  n=n+1;
  if( isButtonclicked( PB_2 ))
  n=0;
}

void displayLED(){
  byte t=n;
  for(int i=0;i<4;i++){
    digitalWrite(LEDS[i], t &1);
    t >>= 1;
  }
}

bool isButtonclicked( byte pinnumber ){
  byte t=5;
  while((digitalRead(pinnumber)==LOW)&& --t)
    delay(1);
  if(t==0){
    while(digitalRead(pinnumber)==LOW);
    return true;
  }
  return false;
}
  
void loop() {
  // put your main code here, to run repeatedly:
  CheckButton();
  displayLED();
}

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

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