arduino - 两个引脚之间的 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-.--------|
解决方案
将 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 的引脚发生变化。
推荐阅读
- c++ - std::pair 会破坏其动态分配的对象吗?
- python - 如何在csv python中交换行和删除列
- kotlin - 无法使用 Kotlin 协程获取 Spring Webflux 以返回 Flow 中的任何内容
- android - 形状中的色调和纯色有什么区别?
- php - Laravel json 不返回响应
- r - R Rhansontable - 有条件地在其他表上的颜色特定单元格
- python - 如何格式化 tqdm 进度条以显示每分钟而不是每秒的进度?
- jquery - 我的 jQuery animate() 运行了 2 次,如何解决这个问题?
- macos - 如何让 PDFView 知道 PDF 已在内存中更改,以便可以更新?
- c++ - ROS/移动它!错误:无法识别任何一组可以驱动指定关节的控制器