首页 > 解决方案 > 将模拟值映射到条件内的 pwm 信号

问题描述

我正在尝试使用操纵杆来控制两个 LED 的亮度(最终将被步进电机取代)。X 轴上操纵杆的静止模拟值是 504,最小值和最大值当然分别为 0 和 1023。我的目标是使用条件来确定要点亮哪个 LED,以及它应该有多亮。随着模拟值接近 1023,它应该会变得更亮。当模拟值接近 0 时,另一个灯泡的亮度应该会增加。

到目前为止,这是相关的代码:

 if (xVal < 500) {
  analogWrite(7, map(xVal, 0, 500, 255, 0));
 }
 else if (xVal > 510) {
  analogWrite(6, map(xVal, 510, 1023, 0, 255));
 }

如果该值大于 510,则它的行为符合要求。亮度逐渐增加,直到达到最大值 1023。

但是,对于少于 500 的情况,该行为不起作用。它只是在真实时实现最大亮度,无需调整 PWM。如果我正确理解映射函数,它不应该将模拟值 0 映射到最大 PWM 值吗?

标签: arduinopwmarduino-c++

解决方案


答案很简单,实际上不属于代码问题。我是一个 arduino 菜鸟,我意识到引脚 7(对于小于条件)不支持 PWM。我将其更改为引脚 5,它开始工作。我还选择修改地图功能以使其更明智。

  analogWrite(5, map(xVal, 500, 0, 0, 255));
 }

这就是我改变它的方式。使用映射来反转值,我认为翻转第一个范围比 PWM 范围更有意义。


推荐阅读