/* 创建硬件定时器 */
hw_timer_t * timer = NULL;
int angle=0;
int deltaR=1;
int servo1[12] = {2,3,4,5,6,7,8,9,10,11,12,13};
/* LED 引脚 */
int led = 18;
/* LED 状态 */
volatile byte state = LOW;
bool shouldMove=true;
void IRAM_ATTR onTimer(){
if(!shouldMove)
return;
for(int i=0;i<12;i++)
{
digitalWrite(servo1[i], HIGH);
}
motorLow();
}
void setup() {
Serial.begin(115200);
for(int i=0;i<12;i++)
{
pinMode(servo1[i], OUTPUT);
}
/* 1/(80MHZ/80) = 1us */
timer = timerBegin(0, 80, true);
/* 将onTimer函数附加到我们的计时器 */
timerAttachInterrupt(timer, &onTimer, true);
/* *设置闹钟每秒调用onTimer函数1 tick为1us => 1秒为1000000us * /
/ *重复闹钟(第三个参数)*/
timerAlarmWrite(timer, 20000, true);
/* 启动警报*/
timerAlarmEnable(timer);
Serial.println("start timer");
}
void motorLow()
{
delayMicroseconds((angle * 11) + 500);
for(int i=0;i<12;i++)
{
digitalWrite(servo1[i], LOW);
}
}
void loop() {
if(angle>=150)
{
deltaR=-1;
}
if(angle<=10)
{
deltaR=1;
}
angle+=deltaR;
delay(10);
Serial.println(millis());
}