Arduino教程中级 项目十 芝麻开门
## 项目十 芝麻开门本系列教程为DF创客社区版权所有,配套硬件套件:[新版Arduino中级套件](https://www.dfrobot.com.cn/goods-649.html)
所谓芝麻开门,就是这门不是轻易能打开的,存在着某些玄关需要你去破解。我们这里设计的这个门,是通过不断晃动手中的传感器才能开。有人会说,传感器我知道是那个数字震动传感器,那门呢?你没看错就是舵机,它能控制角度。所以,所谓的门的转动,是靠舵机来完成的。做个来看下效果就知道了~
### 所需材料
1×数字震动传感器
1×TowerPro SG50舵机
### 硬件连接
TowerPro SG50
连接数字引脚9
数字震动传感器
连接数字引脚3
### 输入代码
```
#include<Servo.h>
int sensorPin = 3; //震动传感器 – Digital 3
Servo myservo;
int pos = 0;
void setup() {
Serial.begin(9600);
pinMode(sensorPin, INPUT);
myservo.attach(9); //舵机 – Digital 9
}
void loop() {
int sensorState = digitalRead(sensorPin);//读取震动传感器的状态
Serial.println(sensorState);
if(!sensorState){//一旦状态发生变化,舵机加2°,直到加到180°
pos = pos +2;
if(pos >=180){
pos = 180;
}
myservo.write(pos); //写入舵机的角度
Serial.println(pos); //串口同时输出角度值
delay(100);
} else{ //状态不发生变化,舵机减2°,直到减到0°
pos = pos - 2;
if(pos <=0){
pos = 0;
}
myservo.write(pos);
Serial.println(pos);
delay(100);
}
delay(1);
}
```
不断的晃动震动传感器,可以看到舵机的角度会随之变大。停止晃动后,舵机角度又开始慢慢减小。好比一扇门慢慢打开,合上。
### 代码回顾
代码的开始先调用<Servo.h>库
`#include <Servo.h> `
这个库已经在Arduino IDE中了,可以打开Arduino-1.0.5/ libraries/ Servo/ Servo.h,这就是Servo库所在位置。
如果要在代码中用库中函数,是不能直接调用的,需要给库找个中介,让“他”建立代码和库中间的关系:
`Servo myservo;`
这里的myservo起到的就是这个作用。建立联系,之后调用库中的函数的话,就要按照下面这个模式进行:
`myservo.函数名();`
中间那“.”不要漏了!
如何定义舵机是接到那个引脚呢?用到就是attach()函数了。
`attach(pin);`
attach(pin)函数有一个参数——pin, 任意一个数字引脚(不建议使用数字0,1)。我们这里选择数字引脚9。
`myservo.attach(9);`
知道了如何定义一个舵机之后,如何把对应的角度写进去呢?
`write(pos);`
pos就是写入的角度值。 晃了半天舵机也没动,有没有哪位和我一样的情况?难道振动传感器坏的?
我没有动传感器我通过串口看 状态一直在变0和1这个怎么解决 这个代码是有问题的,震动的状态应该用中断来采集。 我要试一一
页:
[1]