这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
zh:learing:examples:analoginoutserial [2016/02/03 14:29] – 弘毅 | learing:examples:analoginoutserial [2023/06/07 04:23] (当前版本) – 外部编辑 127.0.0.1 | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== Analog In, Out Serial(模拟输入输出) ====== | ||
+ | |||
+ | <WRAP left round info 65%> | ||
+ | 这个例子展示了读取模拟脚输入,映射结果到0-255的范围,把读取结果以PWM输出来点亮LED。 | ||
+ | </ | ||
+ | |||
+ | <WRAP left round box 100%> | ||
+ | ===== ALPHA MEGA328-U核心 ===== | ||
+ | ==== 硬件 ==== | ||
+ | * [[ocrobot: | ||
+ | * [[ocrobot: | ||
+ | * [[ocrobot: | ||
+ | * [[ocrobot: | ||
+ | ==== 搭建电路 ==== | ||
+ | - ALPHA MEGA328-U模块插入并行扩展板1号槽位。 | ||
+ | - ALPHA 11 LED模块插入并行扩展版1号槽位,堆叠于MEGA328-U上。 | ||
+ | - ALPHA 电位器模块插入并行扩展版2号槽位。 | ||
+ | - USB线连接计算机与ALPHA MEGA328-U。 | ||
+ | ==== 代码 ==== | ||
+ | <code cpp>/* | ||
+ | | ||
+ | */ | ||
+ | |||
+ | |||
+ | // 设置引脚: | ||
+ | const int analogInPin = A0; | ||
+ | const int analogOutPin = 9; | ||
+ | |||
+ | int sensorValue = 0; // 电位器值 | ||
+ | int outputValue = 0; // PWM模拟输出值 | ||
+ | |||
+ | void setup() { | ||
+ | // 初始化串口通讯为9600波特率 | ||
+ | Serial.begin(9600); | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | // 读取模拟输入 | ||
+ | sensorValue = analogRead(analogInPin); | ||
+ | // 映射 | ||
+ | outputValue = map(sensorValue, | ||
+ | // 输出: | ||
+ | analogWrite(analogOutPin, | ||
+ | |||
+ | // 显示到串口 | ||
+ | Serial.print(" | ||
+ | Serial.print(sensorValue); | ||
+ | Serial.print(" | ||
+ | Serial.println(outputValue); | ||
+ | |||
+ | // 等待两毫秒秒让模数转换器稳定 | ||
+ | delay(2); | ||
+ | }</ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | <WRAP left round box 100%> | ||
+ | ===== ALPHA 8F328D-U核心 ===== | ||
+ | ==== 硬件 ==== | ||
+ | |||
+ | ==== 搭建电路 ==== | ||
+ | |||
+ | ==== 代码 ==== | ||
+ | </ | ||
+ | |||
+ | <WRAP left round box 100%> | ||
+ | ===== MangoII ===== | ||
+ | ==== 硬件要求 ==== | ||
+ | |OCROBOT控制器| | ||
+ | |电位器| | ||
+ | |LED| | ||
+ | |220欧姆电阻| | ||
+ | |||
+ | 连接电位器到控制器的5V,电位器中间脚接到A0口,电位器剩下的一个引脚连接到GND。连接220欧姆限流电阻到数字脚9,串联一个LED。LED的长脚应该从电阻连接到输出引脚,短的那一个引脚连接到GND。 | ||
+ | |||
+ | ==== 原理图 ==== | ||
+ | |||
+ | |||
+ | |||
+ | ==== 代码 ==== | ||
+ | |||
+ | |||
+ | 下面的程序中,声明引脚号的分配,变量,模拟值,输出值,然后就是串口通信了。 | ||
+ | |||
+ | 接下来,在主循环代码中,sensorvalue用来存储电位器的模拟值,因为模拟值是0-1023之间,analogWrite值只能为0-255,电位器出来的数据要来点亮LED就必须按比例缩小。 | ||
+ | |||
+ | 为了缩小这个值,我们用到map()函数来映射 | ||
+ | |||
+ | <code cpp> | ||
+ | |||
+ | outputValue是分配来存储映射后的电位器出来的值。map()函数有五个量,需要映射的值,数据上限和下限,映射之后的最大值和最小值。这里,传感器的值被从原始的0-1023映射到0-255 | ||
+ | |||
+ | 映射出来的值就被用来输出成PWM来点亮LED,这个值随电位器的旋钮而改变。最后,原始值和映射值都以稳定的数据流被发到串口监视器。 | ||
+ | |||
+ | <code cpp>/* | ||
+ | | ||
+ | */ | ||
+ | |||
+ | |||
+ | // 设置引脚: | ||
+ | const int analogInPin = A0; | ||
+ | const int analogOutPin = 9; | ||
+ | |||
+ | int sensorValue = 0; // 电位器值 | ||
+ | int outputValue = 0; // PWM模拟输出值 | ||
+ | |||
+ | void setup() { | ||
+ | // 初始化串口通讯为9600波特率 | ||
+ | Serial.begin(9600); | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | // 读取模拟输入 | ||
+ | sensorValue = analogRead(analogInPin); | ||
+ | // 映射 | ||
+ | outputValue = map(sensorValue, | ||
+ | // 输出: | ||
+ | analogWrite(analogOutPin, | ||
+ | |||
+ | // 显示到串口 | ||
+ | Serial.print(" | ||
+ | Serial.print(sensorValue); | ||
+ | Serial.print(" | ||
+ | Serial.println(outputValue); | ||
+ | |||
+ | // 等待两毫秒秒让模数转换器稳定 | ||
+ | delay(2); | ||
+ | }</ | ||
+ | </ | ||