ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 读取模拟信号、串口输出操作 > 本例使用电位器(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]( )