逻辑控制
2-逻辑表达式
if (sensorVal ==HIGH) { //(sensorVal == HIGH)为逻辑表达式,结果只有真(1)或假(0)
digitalWrite(13,LOW); //为真,运行这一段
} else {
digitalWrite (13,HIGH); //为假,运行这一段
}
3-1布尔运算
boolean pushButton; //创建布尔型变量
void setup() {
pinMode(2,INPUT_PULLUP);
pinMode(13,OUTPUT);
}
void loop(){
pushButton=digitalRead(2); //读取引脚2的电频状态赋值给布尔变量。
if (pushButton) {
digaitalWrite(13,HIGH); //点亮LED
} else {
digitalWrite(13,LOW);
}
代码实现:开关断开时,引脚2为高电平,pushButton等于1,逻辑表达式为真,LED亮;反之,熄灭
通过布尔型变量实现对led的控制
3-2逻辑运算符&&、||、!
以&&(与)为例,在上一段代码的基础上,创建一个新的布尔型变量pushButton2,设置8号引脚为输入上拉模式,逻辑表达式改为( ! pushButton1 && ! pushButton2)可实现如视频所示效果。即当pushButton1和pushButton2都为假时(两开关都按下),led才会亮。
逻辑“与”控制LED亮暗
猜数字
1-LED数码管
1位8段共阴极LED数码管(可分为八段)
2-while
void setup() {
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
}
可以用while循环语句实现上述代码得到相同的运行效果:
void setup() {
int pinNumber = 3;
while (pinNumber <= 9) {
pinNumber(pinNumber,OUTPUT);
pinNumber = pinNumber + 1;
}
}
3-switch case语句
void loop() {
int myNumber = 1; //修改数字,使显示不同数字
if (myNumber == 1) { //显示1
digitalWrite(4,HIGH);
digitalWrite(7,HIGH);
delay(500);
//.....清理内容
} else if(myNumber == 2){ //显示2
...}
}
这段代码可实现让数码管持续显示赋值给myNumber的数字,过多的else if过于繁琐,使用switch case语句可实现相同效果:
void loop(){
int myNumber = 1;
switch(myNumbr) { //判断myNumber等于哪个值
case 1: //显示1 //myNumber=1时
digitalWrite(4,HIGH);
digitalWrite(7,HIGH);
break; //跳出该段程序
case 2: //显示2
...
break;
case 3:
...
default: //myNumber !=1或2或3时,数码管显示的数字,自定义(不做要求)
..... //加不加break都一样,都会跳出switch
}
delay(500);
//清理上一次显示内容 //非常关键
delay(500);
}
4-自定义函数
- 无参数
在loop{}外
void displayClear(){ //没有参数,故()内为空
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
}
需要调用时,在需要的位置写displayClear();即可 //一定不要忘记()
- 有参数
switch(ledNumbr) { //注意此处的变量名称要与参数名称相同
case 1:
digitalWrite(4,HIGH);
digitalWrite(7,HIGH);
break;
case 2:
...
break;
case 3:
...
default:
...
}
}
需要调用时,在需要的位置写displayNumber(myNumber);即可 //此处参数名与loop()函数内给定的要相同
- 有参数有返回值
int getRandomNumber(int minNumber,int maxNumber) {
int randomNumber;
randomNumber = random(minNumber,maxNumber);
return randomNumber;
} //该自定义函数运行效果与random函数相同
调用该函数时,把它当成random函数即可,用法相同,只是名称不同
5-完成代码
可在太极创客官网下载查看:
lesson 19:
数码管持续显示0-9,按下开关,显示d
lesson 24:
猜数字
模拟输出
1-analogWrite
boolean pushButton1; // 创建布尔型变量用来存储按键开关1的电平状态
boolean pushButton2; // 创建布尔型变量用来存储按键开关2的电平状态
int ledPin = 9; //LED引脚号
int brightness = 128; //LED亮度参数
void setup() {
// put your setup code here, to run once:
pinMode(2, INPUT_PULLUP); //将引脚2设置为输入上拉模式
pinMode(8, INPUT_PULLUP); //将引脚8设置为输入上拉模式
pinMode(ledPin, OUTPUT); //将LED引脚设置为输出模式
Serial.begin(9600); //启动串口通讯
}
void loop() {
// put your main code here, to run repeatedly:
pushButton1 = digitalRead(2); //读取引脚2电平状态并将其赋值给布尔变量
pushButton2 = digitalRead(8); //读取引脚8电平状态并将其赋值给布尔变量
if (!pushButton1 && brightness > 0){ // 当按下按键开关1并且LED亮度参数大于0
brightness--; // 减低LED亮度参数
} else if (!pushButton2 && brightness < 255) { //当按下按键开关2并且LED亮度参数小于255
brightness++; //增加LED亮度参数
}
analogWrite(ledPin, brightness); //模拟输出控制LED亮度
Serial.println(brightness); //将LED亮度参数显示在串口监视器上
delay(10);
}
代码运行效果如视频所示:
analogWrite()模拟输出