5

我需要弄清楚如何在使用 Arduino 的函数中淡入和淡出多个 LED。不能使用 delay() ,因为其他东西需要在光线变暗时运行。到目前为止,这是它所拥有的,但不起作用。

int value = 0;                            // variable to keep the actual value 
int ledpin = 9;                           // light connected to digital pin 9
int p1 = 0;

void setup() 
{ 
  // nothing for setup 
  Serial.begin(9600);
} 

void loop() 
{ 
  inout(50, 30, 9, 0, 0);
  //inout(20, 20, 10);
} 

void inout(int inDelay, int outDelay, int ledpin, long previousmil, int done)
{

  if(millis() - previousmil>inDelay){
    if (value <=255){
      analogWrite(ledpin, value);          // sets the value (range from 0 to 255)         
      value+=5;
    }
    previousmil=millis();
  }

  if(value = 260)
    done = 1;

  if(millis() - previousmil>outDelay && done == 1){

    if (value >0){
      analogWrite(ledpin, value);          // sets the value (range from 0 to 255)                       

      value-=5;
    }
    previousmil=millis();
  }

}
4

3 回答 3

6

唯一明显的事情是你有一个状态标志,用于增加价值的方式,但你没有在你的第一个 if 中测试它。更好地构造你的代码。如果您有多个引脚,您可能还需要跟踪多个值,除非它们都应该同时淡入和淡出。在这种情况下,最好使用struct带有每个松树参数的 s 数组。

对多个任务使用延迟的一种方法是让每个任务在自上次循环以来经过的时间上工作,并在循环结束时根据任务所花费的时间调整延迟。如果您的循环类似于:

static unsigned long last_time = 0; // set to millis() in setup
static unsigned long refresh_period = 20; // 50Hz

void loop() 
{
    unsigned long time = millis();
    unsigned long delta = time - last_time;

    doTask1( delta );
    doTask2( delta );
    doTask3( delta );
    doTask4( delta );

    // as tasks may have taken some millis, adjust delay 
    unsigned long post_time = millis();

    if ( post_time - last_time < refresh_period )
        delay( refresh_period - ( post_time - last_time ) );

    last_time = time;
} 

然后每个任务大约每 20 毫秒运行一次,并且将通过大约 20 毫秒来更新它们的状态。所以你得到了一些延迟,但一切都有机会更新。

于 2009-03-27T11:11:05.487 回答
1

推测,但这似乎是错误的:

if(value=260)

让我想起了世界上最后一个 C 错误

于 2009-10-13T00:44:04.273 回答
0

如果您想用硬件解决问题,您可以将 LED 连接到外部控制器芯片,例如 TI TLC5940。这些使您可以对每个 LED 的亮度级别进行编程,并与 Arduino 中的 ATMega CPU 分开处理 LED 的 PWM 输出。当您想要改变亮度级别时,您只需要重新编程 TLC 芯片。有一个不错的TLC 库可用于处理与Google Code 上的芯片的通信。

于 2009-04-07T22:06:55.780 回答