找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 37|回复: 0

模拟量输入+PWM调光+呼吸灯

[复制链接]

15

主题

0

回帖

73

积分

管理员

积分
73
发表于 2026-6-24 09:17:37 | 显示全部楼层 |阅读模式
本课学习目标
1. 分清数字信号、模拟信号核心区别,吃透模拟IO使用规则
2. 掌握PWM调光原理、map映射函数两大高频语法
3. 完成电位器调光、自动呼吸灯两个实操项目
所需器材
Uno主板、10k旋转电位器、LED灯、220Ω限流电阻、杜邦线若干
一、核心理论(必背考点)
数字信号:只有高低两种状态,只有0/5V,只有开/
模拟信号:连续变化电压,0-5V无级变化,适配光线、温度、角度采集
模拟输入函数:analogRead(Ax),读取数值0-1023,无需引脚初始化
• PWM输出函数:analogWrite(引脚,0-255),仅带~波浪引脚可用
• map映射函数:map(原值,最小值,最大值,新最小值,新最大值),数值专属换算函数
二、图文接线
【插图点位6】图5-1 电位器PWM调光接线示意图
1.电位器:左端5V、右端GND、中间信号脚接A0
2.LED:长脚串联220Ω电阻→9PWM引脚,短脚接GND
硬性规则:模拟引脚A0-A5只能读信号、不能输出电压;只有带~引脚支持PWM调速调光
三、实操代码
实操1:电位器无级调光
arduino
//引脚定义
int potPin = A0;    //电位器信号脚
int ledPin = 9;     //LED PWM控制脚

void setup() {
  Serial.begin(9600); //串口打印数值
}

void loop() {
  //读取电位器原始数值 0-1023
  int potData = analogRead(potPin);
  //把0-1023转为灯光亮度0-255
  int light = map(potData,0,1023,0,255);
  analogWrite(ledPin,light);
  
  //串口调试查看数据
  Serial.print("原始值:");
  Serial.print(potData);
  Serial.print(" 亮度值:");
  Serial.println(light);
  delay(100);
}
实操2:全自动呼吸灯
arduino
int ledPin = 9;
void setup() {
  pinMode(ledPin,OUTPUT);
}
void loop() {
  //灯光渐亮
  for(int i=0;i<=255;i++){
    analogWrite(ledPin,i);
    delay(12);
  }
  //灯光渐灭
  for(int i=255;i>=0;i--){
    analogWrite(ledPin,i);
    delay(12);
  }
}
避坑要点
1.analogRead不需要pinMode初始化,直接读取即可;2.普通数字引脚无法使用analogWrite3.阈值调试必须依托串口监视器
课后作业
修改代码,用电位器控制LED闪烁快慢,旋钮越大闪烁越快
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表