If语句允许你根据条件的真假(真(TRUE)或假(FALSE))进行两个分支操作。当需要进行多个判断时,你就必须使用If嵌套。不过其实还有一种更为简洁的处理多条件判断的方法,那就是使用switch语句,switch语句允许你一次对多种情况进行区分。本例向你展示如何使用switch语句来一次根据光敏电阻的四种不同状态(全黑,较暗,中等,较亮)进行不同的处理。
程序首先读取光敏电阻的模拟信号值。然后它使用map()函数来将模拟值映射到四个数字:0,1,2,3。最终,一个switch()语句将会根据映射后的数字输出不同的信息到电脑。
硬件需求
Arduino板
光敏电阻 或 其他输出模拟信号的传感器
10kΩ电阻
跳线
面包板
连接线
电路
光敏电阻通过一个分压电路连接到A0口(使用10kΩ电阻进行分压)。在这个电路中,analogRead()函数在室内一般会返回0-600的数字。
原理图
代码
/*
Switch和Case条件语句
展示switch语句的使用,switch语句让你能够一次对变量的多个可能值进行分支处理,这和使用一系列if语句嵌套的功效相同。但使用switch将使代码更加简洁。
为了更好的看到效果,请在有良好照明的房间进行实验。实验过程中你只需要打开串口监视器,并且逐渐将你的手移到串口监视器上方。
电路搭建:
* 连接模拟信号传感器到A0口和+5V接口
* 连接10KΩ电阻到A0口和GND接口
代码公开。
*/
// 常量,定义了传感器的最大、最小值:
const int sensorMin = 0; // 最小值
const int sensorMax = 600; // 最大值
void setup() {
// 初始化串口通信:
Serial.begin(9600);
}
void loop() {
// 读取传感器:
int sensorReading = analogRead(A0);
// 将传感器值映射到0-3:
int range = map(sensorReading, sensorMin, sensorMax, 0, 3);
// 根据映射后的值进行不同处理:
switch (range) {
case 0: //0表示手应该在正上方 输出全黑
Serial.println("全黑");
break;
case 1: // 0表示手遮挡了部分光 输出较暗
Serial.println("较暗");
break;
case 2: // 2表示手遮挡了小部分光 输出中等
Serial.println("中等");
break;
case 3: // 3手未挡光 输出较亮
Serial.println("bright");
break;
}
delay(1); // 为串口稳定性延迟1毫秒
}
Switch和Case条件语句
展示switch语句的使用,switch语句让你能够一次对变量的多个可能值进行分支处理,这和使用一系列if语句嵌套的功效相同。但使用switch将使代码更加简洁。
为了更好的看到效果,请在有良好照明的房间进行实验。实验过程中你只需要打开串口监视器,并且逐渐将你的手移到串口监视器上方。
电路搭建:
* 连接模拟信号传感器到A0口和+5V接口
* 连接10KΩ电阻到A0口和GND接口
代码公开。
*/
// 常量,定义了传感器的最大、最小值:
const int sensorMin = 0; // 最小值
const int sensorMax = 600; // 最大值
void setup() {
// 初始化串口通信:
Serial.begin(9600);
}
void loop() {
// 读取传感器:
int sensorReading = analogRead(A0);
// 将传感器值映射到0-3:
int range = map(sensorReading, sensorMin, sensorMax, 0, 3);
// 根据映射后的值进行不同处理:
switch (range) {
case 0: //0表示手应该在正上方 输出全黑
Serial.println("全黑");
break;
case 1: // 0表示手遮挡了部分光 输出较暗
Serial.println("较暗");
break;
case 2: // 2表示手遮挡了小部分光 输出中等
Serial.println("中等");
break;
case 3: // 3手未挡光 输出较亮
Serial.println("bright");
break;
}
delay(1); // 为串口稳定性延迟1毫秒
}
请先
!