首页 > 解决方案 > 两个引脚之间的 Arduino 模拟写入()仅在一个方向上工作

问题描述

我有一组 LED,每隔一个 LED 就反向设置,所以当我施加电源时,单向灯 1,3,5... 灯。更改电源和 2,4,6... 我正在尝试使用数字引脚上的 PWM 设置亮度。这是我的代码:

unsigned long flashCount = 0;
bool bSwitch = true;

void setup()
{
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
}

void loop()
{
  if((flashCount + 1000) < millis())
  {
    if(bSwitch)
    {
      analogWrite(6, 0);
      analogWrite(7, 1);
      bSwitch = false;
    }
    else
    {
      analogWrite(7, 0);  
      analogWrite(6, 1);
      bSwitch = true;
    }
    flashCount = millis();
  }
}

如果我将模拟写入更改为 255 而不是 1,它将切换两组 LED。如果我将模拟写入更改为 127 或更少,则只有一组会亮起。如果我将 LED 线切换到引脚,则问题会切换到另一组灯。

LED灯是这样的:

GPIO pin 6 --------.-LED+.---.-LED+.---.-LED+.---.-LED+.---|
GPIO pin 7 ---.+LED-.---.+LED-.---.+LED-.---.+LED-.--------|

标签: arduino

解决方案


将 LED 的连接更改为都支持 PWM 的引脚。

并非所有引脚都支持 PWM。AnalogWrite文档根据哪个板指定了哪些引脚

在大多数 Arduino 板(带有 ATmega168 或 ATmega328P 的板)上,此功能适用于引脚 3、5、6、9、10 和 11。在 Arduino Mega 上,它适用于引脚 2 - 13 和 44 - 46。较旧的 Arduino带有 ATmega8 的板仅在引脚 9、10 和 11 上支持模拟写入()。

另一个因素是,analogWrite(255)它将analogWrite(0)恢复为将输出驱动为数字输出。因此,写入 255 会导致两个引脚都输出(一个作为数字输出,另一个在 PWM 模式下)。但是将 1 写入 127 只会导致支持 PWM 的引脚发生变化。


推荐阅读