常见的呼吸灯代码例程,在调节亮度的时候,都是用的delay,那么对于多个led,要实现不同频率的呼吸,就要用多个delay,相互之间会干扰频率的计算,所以,我试验了一下c++的面向对象方式,创建一个led类,再创建几个led对象,对象之间不会相互干扰。 源代码如下,led接在3、5端口。 第一次写c++的类,留个纪念。
class LedClass
{
public:
int pin;
void on(void);
void off(void);
void flash(void);
unsigned long lastTime = 0;
int freq = 2;
int flashStep = 100;
int drct = 1;
};
void LedClass::flash(void)
{
analogWrite(pin, flashStep);
if (millis() - lastTime > freq)
{
if (drct == 1)
{
flashStep++;
if (flashStep >= 255)
{
drct = 0;
flashStep = 255;
}
}
else
{
flashStep--;
if (flashStep <= 0)
{
drct = 1;
flashStep = 0;
}
}
lastTime = millis();
}
}
void LedClass::on(void)
{
digitalWrite(pin, HIGH);
}
void LedClass::off(void)
{
digitalWrite(pin, LOW);
}
LedClass led1;
LedClass led2;
void setup()
{
Serial.begin(9600);
led1.pin = 3;
led2.pin = 5;
led2.freq = 15;
pinMode(led1.pin, OUTPUT);
pinMode(led2.pin, OUTPUT);
}
void loop()
{
led1.flash();
led2.flash();
}
|