【问题标题】:Arduino analogWrite() between two pins only working in one direction两个引脚之间的 Arduino 模拟写入()仅在一个方向上工作
【发布时间】:2019-02-08 02:00:49
【问题描述】:

我有一组 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-.--------|

【问题讨论】:

  • 您能详细说明 LED 的连接方式吗?
  • @bit - 更新帖子
  • 它们在 GPIO 引脚的另一侧连接到什么?地面?也不确定 4 个 LED 将如何达到激活电压以将它们全部点亮
  • @bit - 好吧,让我们把它变得更简单。当我使用analogWrite(6, 100) 和analogWrite(7, 0) 时,我在6 到7 之间得到大约2vdc。当我在analogWrite(6,0) 和analogWrite(7,100) 之间得到0vdc 时,在6 到7 之间得到0vdc。这才是真正的问题.

标签: arduino


【解决方案1】:

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

并非所有引脚都支持 PWM。 analogWrite 文档指定哪些引脚取决于哪个板:

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

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

【讨论】:

  • 这是我的问题!我不知道限制。谢谢@blt
【解决方案2】:

来自 arduino 的手册页:

语法 类比写入(引脚,值)

参数 pin:要写入的引脚。允许的数据类型:int。 值:占空比:介于 0(始终关闭)和 255(始终开启)之间。允许的数据类型:int

使用值为 1 的analogWrite 基本上接近于零。 255将是全电压。您正在尝试使用analogWrite(),就好像它是digitalWrite()。

考虑在您的代码中使用数字写入:https://www.arduino.cc/reference/en/language/functions/digital-io/digitalwrite/

至于 LED 的行为,您的电路似乎也需要调试:您的电路仅在引脚 7 接通时才允许电流流动。二极管(Light Emitting Diodes)只允许一个方向的电流。如果您打算让 LED 交替使用,则它们都应将正极指向其 GPIO 引脚,并且在它们相遇的地方应使用下拉电阻接地。

【讨论】:

  • 更新帖子以显示 LED 没有电路。只是 LED 和 arduino。无法使用 digitalWrite,因为我希望 PWM 调暗 LED。
  • 更新了对电路评论的回复
  • digitalWrite() 不起作用。模拟写入()(pwm)是正确的。互联网上有很多这样的例子。有效答案在上面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
  • 2016-01-27
  • 2010-12-09
  • 2020-02-17
  • 1970-01-01
相关资源
最近更新 更多