代码之家  ›  专栏  ›  技术社区  ›  John Smith

Arduino analogWrite()位于两个管脚之间,仅在一个方向上工作

  •  2
  • John Smith  · 技术社区  · 7 年前

    我有一组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();
      }
    }
    

    如果我将analogWrite更改为255而不是1,它将切换两组LED。如果我将analogWrite更改为127或更少,则只有一组将点亮。如果我将led电线切换到引脚,问题将切换到另一组灯。

    LED如下所示:

    GPIO pin 6 --------.-LED+.---.-LED+.---.-LED+.---.-LED+.---|
    GPIO pin 7 ---.+LED-.---.+LED-.---.+LED-.---.+LED-.--------|
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   Ben T    7 年前

    将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)

        2
  •  1
  •   miko.jake    7 年前

    语法

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

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

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

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