วันพฤหัสบดีที่ 9 กุมภาพันธ์ พ.ศ. 2560

โปรแกรมไฟวิ่ง LED 10 ตัวขับออกผ่านพอร์ตดิจิตอล

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

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

ผังขาต่อใช้งานของ Arduino Nano 


วงจรที่ใช้ในการทดลองสำหรับผู้ที่ใช้บอร์ด Arduino


วงจรที่ใช้ในการทดลองสำหรับผู้ที่ใช้ไอซี ATmega328 (ที่มี Boot Loader Arduino)


บริเวณใช้งานบอร์ดทดลอง


ตัวอย่างที่ 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

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

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