## **Switch和Case条件语句2**
If语句允许你根据条件的真假(真(TRUE)或假(FALSE))进行两个分支操作。当需要进行多个判断时,你就必须使用If嵌套。不过其实还有一种更为简洁的处理多条件判断的方法,那就是使用switch语句,switch语句允许你一次对多种情况进行区分。本例向你展示如何使用switch语句来根据串口收到的命令打开、关闭指定的LED。命令是一系列字符:a、b、c、d、e,分别对应5个LED。
### **所需硬件**
* Arduino或Genuino板
* 5个LED
* 5个220Ω电阻
* 跳线
* 面包板
* 连接线
### **电路**
![图片来自官网](http://img.blog.csdn.net/20160531125408452)
5个LED分别串接一个220Ω电阻并且分别连接到**2**、**3**、**4**、**5**、**6**引脚。板子应该与电脑,并且确保Arduino 串口监视器已经打开。你可以发送**a**、**b**、**c**、**d**、**e**来点亮指定LED,发送其他任意字符关闭所有LED。
### **原理图**
![图片来自官网](http://img.blog.csdn.net/20160531125353280)
### **代码**
~~~
/*
Switch和Case条件语句2
展示switch语句的使用,switch语句让你能够一次对变量的多个可能值进行分支处理,这和使用一系列if语句嵌套的功效相同。但使用switch将使代码更加简洁。
为了看到效果,请打开串口监视器。发送a b c d e中的任意一个字符可以打开指定LED。发送其他字符关闭所有LED。
电路搭建:
* 5个LED串接220Ω电阻连接到2-6引脚
代码公开
*/
void setup() {
// 初始化串口通信:
Serial.begin(9600);
// 初始化LED引脚:
for (int thisPin = 2; thisPin < 7; thisPin++) {
pinMode(thisPin, OUTPUT);
}
}
void loop() {
// 读取传感器:
if (Serial.available() > 0) {
int inByte = Serial.read();
// 根据收到的字符进行不同处理:
// case后应紧跟符合的条件(某个字符)
// 下面代码使用了单引号来告诉单片机:给我ASCII值,比如
// 'a' = 97, 'b' = 98 以此类推
switch (inByte) {
case 'a':
digitalWrite(2, HIGH);
//译者注:这个break很重要。如果不加,那么程序就会在执行这个case之后一路执行下去。例如:如果这里不加break而inByte又是‘a’,则b也会被执行。由于b后面有break,所以switch case就结束了。如果b也没有。那么程序就会 a->b->c 以此类推。所以一般case最后都要有break。读者可以全部不加break,然后在每一个case中输出调试信息来亲身体会。
break;
case 'b':
digitalWrite(3, HIGH);
break;
case 'c':
digitalWrite(4, HIGH);
break;
case 'd':
digitalWrite(5, HIGH);
break;
case 'e':
digitalWrite(6, HIGH);
break;
default:
// 将所有LED关闭:
//如果所有的case都没有匹配上,default后面就会被执行
for (int thisPin = 2; thisPin < 7; thisPin++) {
digitalWrite(thisPin, LOW);
}
}
}
}
~~~
### **相关资料**
[serial.begin()](https://www.arduino.cc/en/Serial/Begin)
[serial.read()](https://www.arduino.cc/en/Serial/Read)
[serial.available()](https://www.arduino.cc/en/Serial/Available)
[switch() case](https://www.arduino.cc/en/Reference/SwitchCase)
[digitalWrite()](https://www.arduino.cc/en/Reference/DigitalWrite)
[原文连接](http://www.arduino.cc/en/Tutorial/SwitchCase2)
- 说明
- 系统示例文件目录结构及说明
- 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