Arduino ATmega328P回过头用这个写一个pwm波,以及检测输入的脉冲数。
1.设定指定占空比的脉冲波。
2脉冲波输入控制器,控制器接入电机。驱动电机转动。
3.转动的编码器向Arduino 中断口发送脉冲信号,脉冲计数(据说中断时间很短,虽然占用cpu,但几乎不影响主程序。
4.与此同时,timer2开始计时,每500ms执行一次计数i的打印,并把i重新置为零。
代码如下:
#include <MsTimer2.h>
int pbIn = 0; // 定义中断引脚为0,也就是D2引脚
int pin = 6; // 定义输出指示灯引脚
int ledpin = 13;
int i=0;
volatile int state = LOW; // 定义默认输入状态
void flash() {
printf("%d",i);
i=0;
}
void setup()
{
// 置ledOut引脚为输出状态
pinMode(pin, OUTPUT);
pinMode(ledpin, OUTPUT);
// 监视中断输入引脚的变化
attachInterrupt(0, stateChange, CHANGE);
MsTimer2::set(500, flash); // 500ms period
MsTimer2::start();
}
void loop()
{
digitalWrite(pin, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait for a second
digitalWrite(pin, LOW); // turn the LED off by making the voltage LOW
delay(100); // wait for a second
}
void stateChange()
{
state = !state;
digitalWrite(ledpin, state);
i++;
}