11
社区成员
发帖
与我相关
我的任务
分享OK,今天做了一个实验,就是舵机和按键控制led灯的实验
本来是把舵机程序放在定时中断2中的
后来发觉舵机在工作,也就是进入延时的时候
按键是不工作的
我的理解是定时中断应该是同时动作
后来把舵机放在了主函数里
按键放在了定时中断里
搞定了
现在附上代码:
#include<Servo.h>
#include<TimerOne.h>
#include<MsTimer2.h> //调用定时器T2的库文件
#include<avr/io.h>
Servo myservo;
const int GB = 12;
const int RB = 13;
int SensorState = 0;
int ok1=1;
int ok2=1;
void duoji()
{
sei();
Serial.println("anjian");
if(digitalRead(GB)==LOW)
{
delay(1000);
if(digitalRead(GB)==LOW)
{
ok1=-ok1;
Serial.println("GB");
}
}
if(digitalRead(RB)==LOW)
{
delay(1000);
if(digitalRead(RB)==LOW)
{
ok2=-ok2;
digitalWrite(4,HIGH);
Serial.println("RB");
}
}
if(ok1==-1)
{
digitalWrite(2,HIGH);
}
else
{
digitalWrite(2,LOW);
}
if(ok2==-1)
{
digitalWrite(4,HIGH);
}
else
{
digitalWrite(4,LOW);
}
}
void setup() {
// put your setup code here, to run once:
myservo.attach(9);
myservo.write(0);
pinMode(GB, INPUT);
pinMode(RB, INPUT);
pinMode(2,OUTPUT);
pinMode(4,OUTPUT);
MsTimer2::set(100,duoji); //每100ms触发中断进入一次LED1函数
MsTimer2::start();
//计时开始
Serial.begin(115200);
delay(1000);
}
void loop() {
myservo.write(0);
delay(1000);
myservo.write(15);
delay(1000);
myservo.write(30);
delay(1000);
myservo.write(45);
delay(1000);
myservo.write(60);
delay(1000);
myservo.write(75);
delay(1000);
myservo.write(90);
delay(1000);
myservo.write(75);
delay(1000);
myservo.write(60);
delay(1000);
myservo.write(45);
delay(1000);
myservo.write(30);
delay(1000);
myservo.write(15);
delay(1000);
myservo.write(0);
}
代码附上
接口:
舵机 arduino 按键 led 电源模块
pwm 9
12 GB
13 RB
2 I/O
4 I/O
ok,实验结果就是舵机
正15°每次,从0-90,然后再从90-0,每15°旋转回来
按下GB和RB相应的灯点亮和关闭
想知道怎么连主板,看不懂