程序試寫了, 但用了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();
}
} |