function - 使用Arduino淡入多个LED

标签 function delay arduino

我需要弄清楚如何在带有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();
  }

}

最佳答案

唯一明显的事情是,您已经获得了用于增加值的方式的状态标志,但是您没有在第一个条件中对其进行测试。最好多组织一些代码。如果您有多个引脚,那么您可能还希望跟踪多个值,除非它们都应同时淡入和淡出。在这种情况下,最好使用struct数组和每个松树的参数。

对多个任务使用延迟的一种方法是使每个任务按自上次循环以来耗时进行工作,并在循环结束时调整延迟以适应任务所花费的时间。如果您的循环是这样的:

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左右(以毫秒为单位)以更新其状态。因此,您会有一些延迟,但是所有内容都有更新的机会。

关于function - 使用Arduino淡入多个LED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/676133/

相关文章:

jquery - 调用 var 函数

javascript - JSFiddle 中的可变作用域行为

python - 我如何做一个时间延迟?

android - 在不中断预览的情况下切换 Camera2 中的手电筒

android - 延迟线程也卡住其他 Activity

Arduino 工具 > 串口变灰

c++ - Arduino C++ : Does the F() macro make any sense inside a function?

python - 停止函数中的程序(python)

r - dplyr: "Error in n(): function should not be called directly"

c++ - 伺服驱动程序代码使伺服行为异常