## 讀取模擬信號、串口輸出操作
> 本例使用電位器(potentiometer ),來展示如何讀取現實世界中的**模擬信號**(Analog Read)。
> 電位器是一個在它的軸被轉動時,能夠提供變化的電阻值簡單的機械裝置。
> 通過給電位器加上電壓,并且把它連接上Arduino板的模擬信號輸入引腳,你就可以以**模擬值**(analog value)的方式來測量電位器的阻值了。?
> 在本例中,使用Arduino Software (IDE)的串口監視器,來建立**Arduino板**(或者**Genuino板**)和電腦的連接。
### 所需硬件
* Arduino 或 Genuino 板
* 10kΩ電位器
* 一些面包板線/杜邦線
### 電路
將電位器上三個引腳用線連接到板子上的方法如下。首先,將電位器兩側的任意一個引腳連接到板子的**GND**,另外一側的引腳連接到板子上的**5V**接口。將電位器中間的引腳連接到板子上的模擬輸入引腳**A0**上。

通過轉動電位器的軸,你能改變電位器劃片兩側的電阻(整個電位器是由其中間引腳分開的變阻器)。這樣一來就能改變中間引腳上的電壓。當旋轉轉軸,使中間引腳和5V引腳間的電阻接近于0時(中間引腳和另一側GND引腳的電阻此時接近于10kΩ),由此中間引腳的電壓就接近于5V。若相反(轉到靠近GND的一側),中間引腳的電壓就接近于0V。中間引腳的電壓就是你讀出的模擬信號**原始值**。
Arduino和Genuino板有一個叫作**數模轉換**(ADC)的內電路來將原始值轉換為0到1023間的數值。當轉軸向GND方向轉到底,這時中間引腳的電壓就是0V,因而模擬信號值也是0。當轉軸向**VCC**(5V)方向轉到底,這時中間引腳的電壓就是5V,因而模擬信號值就是1023。如果轉軸在之間某位置,那么返回值就是0-1023的某個數值。**[analogRead()](https://www.arduino.cc/en/Reference/AnalogRead)**通過模擬輸入引腳的電壓來返回一個從0到1023的值。
### 原理圖

### 代碼
在代碼中,**setup**函數所做的唯一事情就是使用**Serial.begin(9600)**。這個命令的作用是打開Arduino板和計算機的串口連接(波特率指定為9600)。
然后,在代碼的loop主循環中你要建立一個**變量**以存儲從電位器讀出的值(由于這個值是從0到1023,用[int](https://www.arduino.cc/en/Reference/Int)這種數據類型最妥當):
~~~
int sensorValue = analogRead(A0);
~~~
最后,你將需要在串口監視器中輸出這個值。你可以在代碼最后一行添加 Serial.println()這句代碼來做到:
~~~
Serial.println(sensorValue)
~~~
現在,當你打開Arduino IDE上的串口監視器(點擊窗口右上側的**放大鏡圖標**,或者按快捷鍵**Ctrl+Shift+M**),你可以看到一列穩定的數字流(0到1023之間的某個數字)。轉動電位器,你可以看到隨著電位器的轉動這些數值也立馬跟著變化。
~~~
/*
讀取模擬信號、串口操作
從A0讀取模擬值,并且將讀取結果輸出到串口監視器。
小貼士:串口消息已經可以通過串口繪圖器來圖形化顯示了,點選“工具>串口繪圖”即可開啟這項功能。
(Tools> Serial Plotter menu)
將電位器中間的引腳接到A0引腳,兩側的引腳接到板子上的+5V和GND引腳。
示例代碼是共享的。
*/
// setup函數在復位后運行一次
void setup() {
// 初始化串口連接,波特率9600
Serial.begin(9600);
}
// loop函數永遠循環運行
void loop() {
// 從A0口讀取模擬輸入值
int sensorValue = analogRead(A0);
// 輸出讀取的值
Serial.println(sensorValue);
delay(1); // 延時1毫秒以確保串口讀取穩定
}
~~~
## 參考
[setup()](https://www.arduino.cc/en/Reference/Setup)?
[loop()](https://www.arduino.cc/en/Reference/Loop)?
[analogRead()](https://www.arduino.cc/en/Reference/AnalogRead)?
[int](https://www.arduino.cc/en/Reference/Int)?
[serial](https://www.arduino.cc/en/Reference/Serial)?
[BareMinimum?
Blink?
DigitalReadSerial?
Fade]( )
- 說明
- 系統示例文件目錄結構及說明
- 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