如何使用 arduino 使用 2 个 LED 进行占空比?
How to make a duty cycle using 2 LEDs using arduino?
我想在 tinkercad 中使用 Arduino 制作 2 个 LED 的占空比。我有 2 个 LED,一个是红色,另一个是绿色。我希望两个 LED 同时亮起,但红色 LED 的发光延迟为 1 秒,绿色 LED 为 1.3 秒,就像下图一样,占空比均为 50%。
但我无法做到这一点我曾尝试使用 2 个 if-else 块,但由于它同步采用 if-else,所以它不起作用,然后我尝试计算图形并希望将其作为延迟,但这不是一个简单的解决方案
我知道 millis() 是解决方案,但我该如何使用它?
请帮我解决这个问题
试试这个代码:
#define LED11_PIN 11
#define LED12_PIN 12
#define LED12_BLINK_RATE 1000
#define LED11_BLINK_RATE 1300
class Led
{
private:
bool _ledState;
const int _ledBlinkRate;
double _lastStateChange;
const int _ledPin;
public:
Led(int blinkRate, int ledPin) : _ledState(false),_ledBlinkRate(blinkRate), _lastStateChange(millis()), _ledPin(ledPin)
{}
~Led()
{}
void update()
{
double currTime = millis();
if((_lastStateChange + _ledBlinkRate/2) <= currTime)
{
_ledState = !_ledState;
digitalWrite(_ledPin, _ledState);
_lastStateChange = currTime;
}
}
};
Led led11(LED11_BLINK_RATE,LED11_PIN);
Led led12(LED12_BLINK_RATE,LED12_PIN);
void setup()
{
pinMode(LED12_PIN, OUTPUT);
pinMode(LED11_PIN, OUTPUT);
}
void loop()
{
led11.update();
led12.update();
}
我想在 tinkercad 中使用 Arduino 制作 2 个 LED 的占空比。我有 2 个 LED,一个是红色,另一个是绿色。我希望两个 LED 同时亮起,但红色 LED 的发光延迟为 1 秒,绿色 LED 为 1.3 秒,就像下图一样,占空比均为 50%。
但我无法做到这一点我曾尝试使用 2 个 if-else 块,但由于它同步采用 if-else,所以它不起作用,然后我尝试计算图形并希望将其作为延迟,但这不是一个简单的解决方案
我知道 millis() 是解决方案,但我该如何使用它? 请帮我解决这个问题
试试这个代码:
#define LED11_PIN 11
#define LED12_PIN 12
#define LED12_BLINK_RATE 1000
#define LED11_BLINK_RATE 1300
class Led
{
private:
bool _ledState;
const int _ledBlinkRate;
double _lastStateChange;
const int _ledPin;
public:
Led(int blinkRate, int ledPin) : _ledState(false),_ledBlinkRate(blinkRate), _lastStateChange(millis()), _ledPin(ledPin)
{}
~Led()
{}
void update()
{
double currTime = millis();
if((_lastStateChange + _ledBlinkRate/2) <= currTime)
{
_ledState = !_ledState;
digitalWrite(_ledPin, _ledState);
_lastStateChange = currTime;
}
}
};
Led led11(LED11_BLINK_RATE,LED11_PIN);
Led led12(LED12_BLINK_RATE,LED12_PIN);
void setup()
{
pinMode(LED12_PIN, OUTPUT);
pinMode(LED11_PIN, OUTPUT);
}
void loop()
{
led11.update();
led12.update();
}