求高手指導, Timer1出脈沖, 加入方向(正/ 反) 和 步數的控制程序
求高手指導,如何在以下定时器中断翻转数字IO程式中(输出方波),加入方向(正/反) 和 步數的控制程序程序如下:
#include <TimerOne.h>
void setup()
{
pinMode(13, OUTPUT);
Timer1.initialize(100000); //设置定时器中断时间,基本单位为微秒,如设置为100000,则定时时间为0.1秒,频率为10Hz。
Timer1.attachInterrupt(timerIsr ); // 设置用户自定义的定时器中断服务函数,每发生一次定时器中断,均会执行一次定时器中断服务函数。
}
void loop()
{
//主函数,用于执行非周期性任务
}
void timerIsr()
{ // 反转I/O口电平
digitalWrite( 13,digitalRead( 13 ) ^ 1 );
}
謝謝 你的问题我都没理解 我想用Timer1出脈沖經控制器來推動步進電機, 因轉速可更快. 但不知道如何加入"方向"和"步數"設定于程序中, 求教 timer 用来产生脉冲,方向和步数就要从loop里面来做,有相应的条件,就改变方向和步数。loop加上if之类的语句就行。 謝164335413的指導, 那步數是否用FOR命令作控制呢 ? :$ 程序試寫了, 但用了delay控制步數有點怪怪的, 有更好方法嗎 ? :)
#include <TimerOne.h>
//针脚定义
const int pul_pin_x = 2;//X轴脉冲驱动口
const int dir_pin = 5;//方向控制
const int ena_pin = 8;//释放电机
boolean output =LOW;//脉冲方波状态
boolean dir = LOW;//方向状态
boolean ena = LOW;//释放电机锁死状态
/*---------=============函数定义==============----------*/
void wave_x()//摇杆x轴脉冲输出程序
{
output = !output;
digitalWrite(pul_pin_x,output);
}
void wave_stop() //脉冲停止程序
{
Timer1.stop();
output = LOW;
digitalWrite(pul_pin_x,output);
}
/*-----------============参数设置=============-------------*/
void setup()
{
/*输出端口配置*/
pinMode(pul_pin_x,OUTPUT);
pinMode(dir_pin,OUTPUT);
pinMode(ena_pin,OUTPUT);
/*输入端口配置 */
pinMode(9, INPUT);
/*端口初始化 */
digitalWrite(pul_pin_x,LOW);
digitalWrite(dir_pin,LOW);
digitalWrite(ena_pin,LOW);
Timer1.stop();
}
/*-----------=============主函数循环体=============-----------*/
void loop()
{
if(digitalRead( 9 ) == HIGH)// 檢查按鍵
{
for (int i=0; i < 630; i++ ) //反轉2圈
{
digitalWrite(dir_pin, HIGH);
Timer1.initialize(50);
Timer1.attachInterrupt(wave_x);
delay (1);
}
wave_stop();
delay (1000); //停1秒
for (int i=0; i < 630; i++ ) //正轉2圈
{
digitalWrite(dir_pin, LOW);
Timer1.initialize(50);
Timer1.attachInterrupt(wave_x);
delay (1);
}
wave_stop();
}
}
页:
[1]