## 读取模拟信号、串口输出操作
> 本例使用电位器(potentiometer ),来展示如何读取现实世界中的**模拟信号**(Analog Read)。
> 电位器是一个在它的轴被转动时,能够提供变化的电阻值简单的机械装置。
> 通过给电位器加上电压,并且把它连接上Arduino板的模拟信号输入引脚,你就可以以**模拟值**(analog value)的方式来测量电位器的阻值了。
> 在本例中,使用Arduino Software (IDE)的串口监视器,来建立**Arduino板**(或者**Genuino板**)和电脑的连接。
### 所需硬件
* Arduino 或 Genuino 板
* 10kΩ电位器
* 一些面包板线/杜邦线
### 电路
将电位器上三个引脚用线连接到板子上的方法如下。首先,将电位器两侧的任意一个引脚连接到板子的**GND**,另外一侧的引脚连接到板子上的**5V**接口。将电位器中间的引脚连接到板子上的模拟输入引脚**A0**上。
![](https://box.kancloud.cn/8049e3eb78927cb235ad957dc09c4cd3_321x372.png)
通过转动电位器的轴,你能改变电位器划片两侧的电阻(整个电位器是由其中间引脚分开的变阻器)。这样一来就能改变中间引脚上的电压。当旋转转轴,使中间引脚和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的值。
### 原理图
![](https://box.kancloud.cn/48da6ca52eb829146062480e12177d17_503x610.png)
### 代码
在代码中,**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