Hi all. I am new to programming, but I find myself learning at a relatively quick pace. My question is, though, how to avoid the void loop(). I have created a simple LED chase effect using 8 LED's and 1 "status" led which is supposed to blink primarily for cosmetic purposes. However, I am using the delay() function to create the chase, which means that my blink function only repeats after each loop (else I have to program the blink as a "digitalWrite" function in every line and alternate high/low to create the blink. My current code for this simple program is here
int led1 = 13;
int led2 = 12;
int led3 = 11;
int led4 = 9;
int led5 = 8;
int led6 = 7;
int led7 = 6;
int led8 = 5;
int Status = 2;
long interval = 100;
int ledState = LOW;
long previousMillis = 0;
void setup () {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
pinMode(Status, OUTPUT);
Serial.begin(9600);
}
void loop () {
digitalWrite(led1, HIGH);
digitalWrite(Status, HIGH);
Serial.println("Step1");
delay(50);
digitalWrite(led2, HIGH);
digitalWrite(Status, LOW);
Serial.println("Step2");
delay(50);
digitalWrite(led3, HIGH);
digitalWrite(Status, HIGH);
Serial.println("Step3");
delay(50);
digitalWrite(led4, HIGH);
digitalWrite(Status, LOW);
Serial.println("Step4");
delay(50);
digitalWrite(led5, HIGH);
digitalWrite(Status, HIGH);
Serial.println("Step5");
delay(50);
digitalWrite(led6, HIGH);
digitalWrite(Status, LOW);
Serial.println("Step6");
delay(50);
digitalWrite(led7, HIGH);
digitalWrite(Status, HIGH);
Serial.println("Step7");
delay(50);
digitalWrite(led8, HIGH);
digitalWrite(Status, LOW);
Serial.println("Step8");
delay(50);
digitalWrite(led1, LOW);
digitalWrite(Status, HIGH);
Serial.println("Reset Clear");
delay(50);
digitalWrite(led2, LOW);
digitalWrite(Status, LOW);
delay(50);
digitalWrite(led3, LOW);
digitalWrite(Status, HIGH);
delay(50);
digitalWrite(led4, LOW);
digitalWrite(Status, LOW);
delay(50);
digitalWrite(led5, LOW);
digitalWrite(Status, HIGH);
delay(50);
digitalWrite(led6, LOW);
digitalWrite(Status, LOW);
delay(50);
digitalWrite(led7, LOW);
digitalWrite(Status, HIGH);
delay(50);
digitalWrite(led8, LOW);
digitalWrite(Status, LOW);
delay(50);
}
I would like to create the LED blink independent of the delay functions and more similar to this code:
void loop()
{
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// if the LED is off turn it on and vice-versa:
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
// set the LED with the ledState of the variable:
digitalWrite(green, ledState);
}
Is there a way to do this? I know your program can not contain more than one "void loop()" call, so what would a good solution be?
Thanks,
MonorailOrange