本帖最后由 最帅的老饼 于 2017-10-6 22:33 编辑
步进电机驱动代码
今天测试了一段步进电机驱动代码,不敢私藏。
digitalWrite ( left_Enbl , LOW ); //开启左边步进电机使能
delay(500);
digitalWrite ( left_Dir , LOW ); //方向 LOW 是开门.
pinMode ( left_Puls , OUTPUT ); //把脉冲针脚定义为输出,26号针脚。
randNumber = random(140 , 165);
randNumber = randNumber * 5 ; //生成一个700 — 825 之间的随机数,用于开门的角度。
tone (left_Puls , 4800 , 400 ); //26号脚开始输出脉冲,开左门动作开始。
delay (300 );
tone (left_Puls , 9600 , 400 ); //加速
delay (300 );
tone (left_Puls , 15000 , 400 );
delay (300 );
tone (left_Puls , 22000 , 400 );
delay (300 );
tone (left_Puls , 30000 ); //中段的开门速度,再高就会出现失步,当然这是对于我这个物理环境。
do{
*p_vl = analogRead(A0); //不断读出左边电位器值。
//这里用了个指针变量,这不是必须的。只是想工作效率高点。
delay (50 ); //这里用了个do...while 当开门量达到就跳出循环。
}while ( *p_vl < randNumber ); //randNumber是开门的量,这量我用随机产生。
//左电位器达到随机值,跳出 do—while
tone (left_Puls , 22000 , 400 ); //减速
delay (300 );
tone (left_Puls , 15000 , 400 ); //减速
delay (300 );
tone ( left_Puls , 9600 , 400 );
delay ( 300 );
tone (left_Puls , 4800 , 400);
delay ( 300 );
// noTone 函数好象不给力,我用下面方法来停止脉冲输出。
pinMode( left_Puls , INPUT ); //把脉冲针脚定义为输入来停止脉冲的输出。
注:
tone () ; 脉冲输出比 digitalWrite ( ); + delay( ); 给力很多。
以上是我测试了两天的代码,工作时感觉很好、很给力,合适这个项目使用。
|