## **Switch和Case條件語句**
> **If語句**允許你根據條件的真假(**真(TRUE)**或**假(FALSE)**)進行兩個分支操作。當需要進行多個判斷時,你就必須使用**If嵌套**。不過其實還有一種更為簡潔的處理多條件判斷的方法,那就是使用**switch**語句,**switch**語句允許你一次對多種情況進行區分。本例向你展示如何使用switch語句來一次根據光敏電阻的四種不同狀態(全黑,較暗,中等,較亮)進行不同的處理。
程序首先讀取光敏電阻的模擬信號值。然后它使用**map()**函數來將模擬值映射到四個數字:0,1,2,3。最終,一個**switch()**語句將會根據映射后的數字輸出不同的信息到電腦。
### **所需硬件**
* Arduino或Genuino板
* 光敏電阻 或 其他輸出模擬信號的傳感器
* 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毫秒
}
~~~
### **相關資料**
[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