## **Switch和Case条件语句**
> **If语句**允许你根据条件的真假(**真(TRUE)**或**假(FALSE)**)进行两个分支操作。当需要进行多个判断时,你就必须使用**If嵌套**。不过其实还有一种更为简洁的处理多条件判断的方法,那就是使用**switch**语句,**switch**语句允许你一次对多种情况进行区分。本例向你展示如何使用switch语句来一次根据光敏电阻的四种不同状态(全黑,较暗,中等,较亮)进行不同的处理。
程序首先读取光敏电阻的模拟信号值。然后它使用**map()**函数来将模拟值映射到四个数字:0,1,2,3。最终,一个**switch()**语句将会根据映射后的数字输出不同的信息到电脑。
### **所需硬件**
* Arduino或Genuino板
* 光敏电阻 或 其他输出模拟信号的传感器
* 10kΩ电阻
* 跳线
* 面包板
* 连接线
### **电路**
![图片来自官网](http://img.blog.csdn.net/20160527091409508)
光敏电阻通过一个分压电路连接到A0口(使用10kΩ电阻进行分压)。在这个电路中,**analogRead()**函数在室内一般会返回0-600的数字。
### **原理图**
![图片来自官网](http://img.blog.csdn.net/20160527091420165)
### **代码**
~~~
/*
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毫秒
}
~~~
### **相关资料**
[serial.begin()](https://www.arduino.cc/en/Serial/Begin)
[analogRead()](https://www.arduino.cc/en/Reference/AnalogRead)
[map()](https://www.arduino.cc/en/Reference/Map)
[Serial.println()](https://www.arduino.cc/en/Serial/Print)
[原文链接](https://www.arduino.cc/en/Tutorial/SwitchCase)
- 说明
- 系统示例文件目录结构及说明
- 01.Basics
- AnalogReadSerial
- BareMinimum
- Blink
- DigitalReadSerial
- Fade
- ReadAnalogVoltage
- 02.Digital
- BlinkWithoutDelay
- Button
- Debounce
- DigitalInputPullup
- StateChangeDetection
- toneKeyboard
- toneMelody
- toneMultiple
- tonePitchFollower
- 03.Analog
- AnalogInOutSerial
- AnalogInput
- AnalogWriteMega
- Calibration
- Fading
- Smoothing
- 04.Communication
- ASCIITable
- Dimmer
- Graph
- Midi
- MultiSerial
- PhysicalPixel
- ReadASCIIString
- SerialCallResponse
- SerialCallResponseASCII
- SerialEvent
- SerialPassthrough
- VirtualColorMixer
- 05.Control
- Arrays
- ForLoopIteration
- IfStatementConditional
- switchCase
- switchCase2
- WhileStatementConditional
- 06.Sensors
- ADXL3xx
- Knock
- Memsic2125
- Ping
- 07.Display
- barGraph
- RowColumnScanning
- 08.Strings
- CharacterAnalysis
- StringAdditionOperator
- StringAppendOperator
- StringCaseChanges
- StringCharacters
- StringComparisonOperators
- StringConstructors
- StringIndexOf
- StringLength
- StringLengthTrim
- StringReplace
- StringStartsWithEndsWith
- StringSubstring
- StringToInt
- 09.USB
- Keyboard
- KeyboardLogout
- KeyboardMessage
- KeyboardReprogram
- KeyboardSerial
- KeyboardAndMouseControl
- Mouse
- ButtonMouseControl
- JoystickMouseControl
- 10.StarterKit_BasicKit (与特定硬件相关,暂无)
- p02_SpaceshipInterface
- p03_LoveOMeter
- p04_ColorMixingLamp
- p05_ServoMoodIndicator
- p06_LightTheremin
- p07_Keyboard
- p08_DigitalHourglass
- p09_MotorizedPinwheel
- p10_Zoetrope
- p11_CrystalBall
- p12_KnockLock
- p13_TouchSensorLamp
- p14_TweakTheArduinoLogo
- p15_HackingButtons
- 11.ArduinoISP(暂无)
- ArduinoISP