บทความประกอบการเรียนรู้ => ไมโครคอนโทรลเลอร์ (Arduino) => ข้อความที่เริ่มโดย: admin ที่ เมษายน 20, 2014, 08:34:28 AM

หัวข้อ: งานครั้งที่ 5 เขียนโปรแกรมไฟวิ่ง LED 10 ตัว
เริ่มหัวข้อโดย: admin ที่ เมษายน 20, 2014, 08:34:28 AM
เขียนโปรแกรมไฟวิ่ง LED 10 ตัวขับออกผ่านพอร์ตดิจิตอล
 
ฟังก์ชั่นที่ใช้งาน
-pinMode() http://arduino.cc/en/Reference/PinMode (http://arduino.cc/en/Reference/PinMode)
-digitalWrite() http://arduino.cc/en/Reference/DigitalWrite (http://arduino.cc/en/Reference/DigitalWrite)
-delay() http://arduino.cc/en/reference/delay (http://arduino.cc/en/reference/delay)

โจทย์การทดลอง
-เชื่อมต่อ LED Bar 10 digit เข้ากับพอร์ตดิจิตอลตามวงจร
-เขียนโปรแกรมไฟวิ่งที่มีรูปแบบและเป็นระเบียบ (ไม่ใช่การติดดับแบบสุ่ม)
-โปรแกรมรายละเอียดพิเศษรายกลุ่ม (แจ้งให้ทราบเมื่อถึงชั่วโมงเรียน)

ผังขาต่อใช้งานของ Arduino Nano
(http://www.praphas.com/PhotoForum/arduino/nano.jpg)

วงจรที่ใช้ในการทดลองสำหรับผู้ที่ใช้บอร์ด Arduino
(http://www.praphas.com/PhotoForum/arduino/Lab-05-01.png)

วงจรที่ใช้ในการทดลองสำหรับผู้ที่ใช้ไอซี ATmega328 (ที่มี Boot Loader Arduino)
(http://www.praphas.com/PhotoForum/arduino/Lab-05-02.png)

บริเวณใช้งานบอร์ดทดลอง
(http://www.praphas.com/PhotoForum/arduino/Lab-05-03.png)

ตัวอย่างที่ 1
โค๊ด: [Select]
byte x;
byte LED_pin[] = {2,3,4,5,6,7,8,9,10,11 };
 
void setup() 
{               
  for (x=0; x<=10; x++)
  {
      pinMode(LED_pin[x], OUTPUT);
  }
}
void loop()                     
{
  for (x=0; x<=10; x++)
  {
    digitalWrite(LED_pin[x],HIGH);
  }
  delay(1000);
  for (x=0; x<=10; x++)
  {
    digitalWrite(LED_pin[x],LOW);
  }
  delay(1000);
}

ตัวอย่างที่ 2
สเต็ปการติดดับของ LED ที่ต่อไว้ที่ขาดิจิตอลที่กำหนดในแต่ละจังหวะเวลาโดยใช้เพียงคำสั่งพื้นฐาน

โค๊ด: [Select]
void setup()  
{               
  pinMode(2,OUTPUT);pinMode(3,OUTPUT);pinMode(4,OUTPUT);pinMode(5,OUTPUT);pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);pinMode(8,OUTPUT);pinMode(9,OUTPUT);pinMode(10,OUTPUT);pinMode(11,OUTPUT); 
}
void loop()                     
{
digitalWrite(2,LOW);digitalWrite(3,LOW);digitalWrite(4,LOW);digitalWrite(5,LOW);digitalWrite(6,LOW);
digitalWrite(7,LOW);digitalWrite(8,LOW);digitalWrite(9,LOW);digitalWrite(10,LOW);digitalWrite(11,LOW); 
delay(100);
digitalWrite(2,HIGH);digitalWrite(3,LOW);digitalWrite(4,LOW);digitalWrite(5,LOW);digitalWrite(6,LOW);
digitalWrite(7,LOW);digitalWrite(8,LOW);digitalWrite(9,LOW);digitalWrite(10,LOW);digitalWrite(11,HIGH); 
delay(100);
digitalWrite(2,HIGH);digitalWrite(3,HIGH);digitalWrite(4,LOW);digitalWrite(5,LOW);digitalWrite(6,LOW);
digitalWrite(7,LOW);digitalWrite(8,LOW);digitalWrite(9,LOW);digitalWrite(10,HIGH);digitalWrite(11,HIGH); 
delay(100);
digitalWrite(2,LOW);digitalWrite(3,HIGH);digitalWrite(4,HIGH);digitalWrite(5,LOW);digitalWrite(6,LOW);
digitalWrite(7,LOW);digitalWrite(8,LOW);digitalWrite(9,HIGH);digitalWrite(10,HIGH);digitalWrite(11,LOW); 
delay(100);
digitalWrite(2,LOW);digitalWrite(3,LOW);digitalWrite(4,HIGH);digitalWrite(5,HIGH);digitalWrite(6,LOW);
digitalWrite(7,LOW);digitalWrite(8,HIGH);digitalWrite(9,HIGH);digitalWrite(10,LOW);digitalWrite(11,LOW); 
delay(100);
digitalWrite(2,LOW);digitalWrite(3,LOW);digitalWrite(4,LOW);digitalWrite(5,HIGH);digitalWrite(6,HIGH);
digitalWrite(7,HIGH);digitalWrite(8,HIGH);digitalWrite(9,LOW);digitalWrite(10,LOW);digitalWrite(11,LOW); 
delay(100); 
digitalWrite(2,LOW);digitalWrite(3,LOW);digitalWrite(4,LOW);digitalWrite(5,LOW);digitalWrite(6,HIGH);
digitalWrite(7,HIGH);digitalWrite(8,LOW);digitalWrite(9,LOW);digitalWrite(10,LOW);digitalWrite(11,LOW); 
delay(100);   
}

ตัวอย่างฟังก์ชั่นการส่งค่าออกพอร์ตโดยการคำนวณค่า
โค๊ด: [Select]
char LED_pin[] = {2,3,4,5,6,7,8,9,10,11 };
...
...
void send2port(int data)
{
    if (data & 1 ){digitalWrite(LED_pin[0],HIGH);} else {digitalWrite(LED_pin[0],LOW);}
    if (data & 2 ){digitalWrite(LED_pin[1],HIGH);} else {digitalWrite(LED_pin[1],LOW);}
    if (data & 4 ){digitalWrite(LED_pin[2],HIGH);} else {digitalWrite(LED_pin[2],LOW);}
    if (data & 8 ){digitalWrite(LED_pin[3],HIGH);} else {digitalWrite(LED_pin[3],LOW);}
    if (data & 16 ){digitalWrite(LED_pin[4],HIGH);} else {digitalWrite(LED_pin[4],LOW);}
    if (data & 32 ){digitalWrite(LED_pin[5],HIGH);} else {digitalWrite(LED_pin[5],LOW);}
    if (data & 64 ){digitalWrite(LED_pin[6],HIGH);} else {digitalWrite(LED_pin[6],LOW);}
    if (data & 128 ){digitalWrite(LED_pin[7],HIGH);} else {digitalWrite(LED_pin[7],LOW);}
    if (data & 256 ){digitalWrite(LED_pin[8],HIGH);} else {digitalWrite(LED_pin[8],LOW);}
    if (data & 512 ){digitalWrite(LED_pin[9],HIGH);} else {digitalWrite(LED_pin[9],LOW);}
}
Example
https://www.youtube.com/v/lcIQHKC2cAA