ไฟวิ่งวนกลับไปกลับมา Arduino ไฟวิ่งฝนดาวตก

  • รายละเอียดและการทำงานของโปรแกรมที่เขียนขึ้น

Arduino มีโค๊ดที่เป็นตัวอย่างค่อนข้างเยอะ แล้วก็ค่อนข้างจะครบถ้วนให้เราศึกษางานทางด้าน Embedded System เราก็จะนำตัวอย่างโค๊ดของ Arduino ที่ชื่อว่า Fading มาทำการประยุกต์ในการทำไฟวิ่งฝนดาวตก กัน

หลักการคร่าวๆ ก็คือ ในการทำให้หลอด LED สว่างมาก-น้อย เราจะทำการเปลี่ยนแปลงแรงดันขาออก ให้อยู่ในรูบ Analog output ซึ่งที่ขาของ digital output แล้วไม่สามารถทำได้ตรงๆ แต่เราสามารถเปลี่ยนแปลงแรงดันค่าเฉลี่ยได้ ด้วยหลักการของ PWM ซึ่งเมื่อเราเปลี่ยนแปลงค่า %duty cycle แล้วจะทำให้เสมือนว่า แรงดันเฉลี่ยที่ออกมาดูเหมือนเปลี่ยนแปลงตามไปด้วย ด้วยผลลัพธ์นี้ เมื่อเรานำมาขับหลอด LED เราจะเห็นว่า หลอด LED ดูเหมือน สว่างมาก สว่างน้อย ตามการเปลี่ยนเปลงของ %duty cycle

  • ใส่ Source Code (Copy/Paste)

int fadeArr[] = {255, 200, 150, 100, 50, 10, 0, 0, 0, 0, 0, 0, 0};
int ledArr_fwd[] = {11,10,9,6,5,3}; // Led0 ….. Led5
int ledArr_rwd[] = {3,5,6,9,10,11}; // Led5 ….. Led0
int dl = 100;
void setup(){ }

void loop()
{
for(int i = 0 ; i <13; i++){
if(i<6){
analogWrite(ledArr_fwd[i],255);// forward
for(int k=0;k<i;k++){
analogWrite(ledArr_fwd[k],fadeArr[i-k]); //update previous
}
}else{
//analogWrite(ledArr[i-1],fadeArr[i-k]);// forward
for(int j=0;j<6;j++){
analogWrite(ledArr_fwd[j],fadeArr[i-j]); // update previous
}
}
delay(dl);
}
delay(300);
for(int i = 0 ; i <13; i++){
if(i<6){
analogWrite(ledArr_rwd[i],255);// forward
for(int k=0;k<i;k++){
analogWrite(ledArr_rwd[k],fadeArr[i-k]); //update previous
}
}else{
for(int j=0;j<6;j++){
analogWrite(ledArr_rwd[j],fadeArr[i-j]); // update previous
}
}
delay(dl);
}
}

  • แสดงหน้า OUTPUT ของ UnoArduSim ที่รันผลออกมาได้

ไฟวิ่งฝนดาวตก

TODSATON OJUN
at GlurGeek.Com

Leave a Reply

Copyright © 2021 GlurGeek.Com. All Rights Reserved.