5.15-5.21学习记录

一、逻辑控制

利用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相连,固定在高电平。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值