自己也在学习相关的Arduino程序,因为对c++知之甚少,再加上新入硬件领域,很多方面十分笨拙。在练习由Michael McRoberts所著的《Arduino从基础到实践》二版时,对其中的跑马灯项目十分困惑,再练习其推荐的“使LED灯带两端变量,并向对方向LED运动”一题中无从下手,持续两到三天的尝试中我完成这一个项目。给接下来的萌新一点帮助!
byte ledPin[]={3,4,5,6,7,8,9,10,11,12};/*与书中内容一样,把10个LED看做为一个主体*/
int ledDelay(100);
int direction1=-1;/*这里是对LED开始亮的方向定义,本次为从右到左,即从定义针脚12~5开始亮灯*/
int currrentLED1=9;/*此处9为其12号针脚所对为其最右面,原书有提到从0~9即为针脚3~12所对LED*/
int direction2=1;/*这里是从左到右,同上皆为定义方向*/
int currrentLED2=0;/*此处为3号针脚所对应,为最左*/
unsigned long changeTime;
void setup(){
for (int x=0;x<10;x++){
pinMode(ledPin[x],OUTPUT);}
changeTime=millis();
}
void loop(){
if ((millis()-changeTime)>ledDelay){
changeLED();
changeTime=millis();
}
}
void changeLED(){
for (int x=0;x<10;x++){
digitalWrite(ledPin[x],LOW);
}
//上部分不再阐述,与原版书籍一致;下列程序只复制重复了一部分,此处参照书籍
//本题本人主要是把10个LED分为两组,分别重新定义各自运行。
digitalWrite(ledPin[currrentLED1],HIGH);
currrentLED1+=direction1;
if (currrentLED1==9) {direction1=-1;}
if(currrentLED1==5) {direction1=1;}
digitalWrite(ledPin[currrentLED2],HIGH);
currrentLED2+=direction2;
if (currrentLED2==4) {direction2=-1;}
if(currrentLED2==0) {direction2=1;}
}
上述为本人对对向碰撞LED的尝试方式,程序结构较为简陋,设计方式十分粗暴,但也不失一种方案,以此纪念自己第一小步,希望与大家共勉。谢谢!