Arduino / C ++在循环中调整Long Millis()

问题描述 投票:0回答:1

因此,我制作了一个简单的Arduino电路进行练习。我可以通过按钮随时启动和停止循环。现在我要制作一些病态的led灯序列。

我最初的想法是在循环结束时更改delay_led1函数。这样,我可以在循环结束时更改顺序。

我试图在循环结束时使用:interval_led1 + 300(在我的代码中用//////////标记很多,但这是行不通的。

如何通过循环将毫秒添加到interval_led1函数?

const int led1 = 13;
const int led2 = 8;
const int led3 = 5;
const int button = 10;

int ledState_led1 = LOW;             // ledState used to set the LED
int ledState_led2 = LOW;
int ledState_led3 = LOW;

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis_led1 = 0;        // will store last time LED was updated
unsigned long previousMillis_led2 = 0;
unsigned long previousMillis_led3 = 0;

long interval_led1 = 500;           // interval at which to blink (milliseconds)
long interval_led2 = 600;
long interval_led3 = 700;

boolean buttonstate = false;

void setup() {

    pinMode(led1, OUTPUT);
    pinMode(led2, OUTPUT);
    pinMode(led3, OUTPUT);
    pinMode(button, INPUT);
}

void loop() {
    // check to see if it's time to blink the LED; that is, if the difference
    // between the current time and last time you blinked the LED is bigger than
    // the interval at which you want to blink the LED.
    unsigned long currentMillis_led1 = millis();
    unsigned long currentMillis_led2 = millis();
    unsigned long currentMillis_led3 = millis();

    bool current_state = digitalRead(button);
    bool prev_buttonstate= false;

    if(current_state==HIGH && current_state != prev_buttonstate) {  
        buttonstate = !buttonstate;    //reverse buttonstate value
    }
    prev_buttonstate = current_state;

    if(buttonstate==true)
        if (currentMillis_led1 - previousMillis_led1 >= interval_led1) {
            previousMillis_led1 = currentMillis_led1;
            if (ledState_led1 == LOW) {
                ledState_led1 = HIGH;
            } else {
                ledState_led1 = LOW;
            }
            digitalWrite(led1, ledState_led1);
            ////////interval_led1 + int(3000); ///////////////////
        }

    if(buttonstate==true)    
        if (currentMillis_led2 - previousMillis_led2 >= interval_led2) {
            previousMillis_led2 = currentMillis_led2;
            if (ledState_led2 == LOW) {
                ledState_led2 = HIGH;
            } else {
                ledState_led2 = LOW;
            }
            digitalWrite(led2, ledState_led2);
        }

    if(buttonstate==true)
        if (currentMillis_led3 - previousMillis_led3 >= interval_led3) {
            previousMillis_led3 = currentMillis_led3;
            if (ledState_led3 == LOW) {
                ledState_led3 = HIGH;
            } else {
                ledState_led3 = LOW;
            }
            digitalWrite(led3, ledState_led3);
        }
}
c++ loops arduino long-integer
1个回答
0
投票

您是想拥有:

Interval_led = interval_led1 + 3000;

您实际在何处为该变量分配新值?

© www.soinside.com 2019 - 2024. All rights reserved.