一、逻辑控制
利用if、else语句控制uno板上自带的led开关
//初始化工作
void setup() {
//设置单片机比特率为9600
Serial.begin(9600);
/*将接口2的模式调整为上拉输入
*将接口13的模式调整为输出*/
pinMode(2, INPUT_PULLUP);
pinMode(13, OUTPUT);
}
//配置循环函数
void loop() {
//设置整数sensorVal为2接口digitalRead的值
int sensorVal = digitalRead(2);
//将digitalRead的值打印在串口监视器上
Serial.println(sensorVal);
/*请记住,上拉意味着按钮的逻辑是颠倒的。
* 打开时变为高电平,按下时变为低电平。
按下按钮时引脚 13连接的led打开,未按下时led关闭*/
if (sensorVal == HIGH) {
digitalWrite(13, LOW);//熄灭led
}
else {
digitalWrite(13, HIGH);//点亮led
}
电路图如图·实物图如下:
未按下按钮时,led处于熄灭状态:
按下开关之后,led点亮:
疑点:为什么当loop函数代码变为
if (sensorVal == HIGH) {
digitalWrite(13, HIGH);
}
else {
digitalWrite(13, LOW);
}
后,led会常亮,而按下按钮之后不熄灭?sensorVal == HIGH改为sensorVal == LOW时达到与上一片代码同样的效果。如何将效果反过来,使开关断开时led长亮、闭合时led熄灭?
解决方法:不改变代码的前提下将13号接口处的电线接地(悲
*逻辑运算符(关系运算符)
!= 不等于
== 等于
< 大于
> 小于
<=小于或等于
>=大于或等于
(跟python一模一样,没什么好说的)
!【变量名】:逻辑非,即将非后变量与原变量相反变量
&&逻辑与:两个操作都为真的时候才返回True
||逻辑或:两个操作有一个为true即为true
1)逻辑与、逻辑或的应用实例:
①逻辑或:
pushButton2 = digitalRead(8);
if (!pushButton1 || !pushButton2){
两按键有任一被按下时,led亮起;
②逻辑与:
pushButton2 = digitalRead(8);
if (!pushButton1 && !pushButton2){
两按键同时按下时,led亮起。
二、超声波传感器
1.认识超声波传感器(HC-SR04)
1:使用电压:DC---5V
2:静态电流:小于2mA
3:电平输出:高5V
4:电平输出:底0V
5:感应角度:不大于15度
6:探测距离:2cm-450cm
7:高精度 可达0.2cm
- Arduino 连接方法
HC-SR04 引脚 VCC 连接到 Arduino 引脚 +5VDC
HC-SR04 引脚 Trig 连接到 Arduino 引脚 11
HC-SR04 引脚 Echo 连接到 Arduino 引脚 12
HC-SR04 引脚 GND 连接到 Arduino 引脚 GND
配置运行文件:
const int TrigPin = 8; //设置发射引脚对应端口
const int EchoPin = 9; //设置接受引脚对应端口
float cm; //定义距离变量
void setup() {
Serial.begin(9600);
pinMode(TrigPin,OUTPUT); //设置端口8为发射模式
pinMode(EchoPin,INPUT); //设置端口9为接收模式
}
void loop() {
digitalWrite(8,LOW); // 从传感器读取高脉冲信号
delayMicroseconds(2); // 持续时间,单位为毫秒
digitalWrite(8,HIGH);
delayMicroseconds(10);
digitalWrite(8,LOW);
cm = pulseIn(9,HIGH)/58.0;// 收其对物体的回声
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(200);
}
运行效果如图:
疑点:这段代码是怎么实现计时的?
digitalWrite(8,LOW); // 从传感器读取高脉冲信号
delayMicroseconds(2); // 持续时间,单位为毫秒
digitalWrite(8,HIGH);
delayMicroseconds(10);
digitalWrite(8,LOW);
cm = pulseIn(9,HIGH)/58.0;// 收其对物体的回声
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(200);
疑点自解答:上拉电阻是什么?
上拉电阻将一个不确定的信号(高或低电平),通过一个电阻与电源VCC相连,固定在高电平。