I reviewed your suggestion (gammom blink) and rewrote code using millis function. Code below. However I am missing something. LED red, green are two LEDs, LED2 is a bi-color red/green LED. Using the code, LED2 goes red/green as expected. The LEDs red comes on, goes off and green comes on, then both come on and then are off for a second and the cycle repeats (red,green both,off) What am missing?
I am using this as an example for something in the future.
Thanks for your help.
//sketch_blink_2_sets_LEDs
//Blink 2 set of LEDs at different rates
//gammon.com.au/blink
const int redledPin = 12; //red led pin
const int greenledPin = 13; //green led pin
const int redled2Pin = 11; //red led 2 pin
const int greenled2Pin = 10; //green led 2 pin
//const int redbutton = 2; // 5v red input
//const int greenbutton = 3; // 5v green input
//const int redbutton2 = 4; // 5v red input 2
//const int greenbutton2 = 5; // 5v green input 2
//time peroid of blink
const unsigned long redledPininterval = 1000;
const unsigned long greenledPininterval = 2000;
const unsigned long redled2Pininterval = 5000;
const unsigned long greenled2Pininterval = 000;
//variablle holding the timer value
unsigned long redledPintimer;
unsigned long greenledPintimer;
unsigned long redled2Pintimer;
unsigned long greenled2Pintimer;
void setup() {
pinMode (redledPin, OUTPUT);
pinMode (greenledPin, OUTPUT);
pinMode (redled2Pin, OUTPUT);
pinMode (greenled2Pin, OUTPUT);
redledPintimer = millis ();
greenledPintimer = millis ();
redled2Pintimer = millis ();
greenled2Pintimer = millis ();
}
void toggleredledPin ()
{
if (digitalRead (redledPin) == LOW)
digitalWrite (redledPin, HIGH);
else
digitalWrite (redledPin, LOW);
redledPintimer = millis ();
}
void togglegreenledPin () {
if (digitalRead (greenledPin) == LOW)
digitalWrite (greenledPin, HIGH);
else
digitalWrite (greenledPin, LOW);
greenledPintimer = millis ();
}
void toggleredled2Pin ()
{
if (digitalRead (redled2Pin) == LOW)
digitalWrite (redled2Pin, HIGH);
else
digitalWrite (redled2Pin, LOW);
redled2Pintimer = millis ();
}
void togglegreenled2Pin ()
{
if (digitalRead (greenled2Pin) == LOW)
digitalWrite (greenled2Pin, HIGH);
else
digitalWrite (greenled2Pin, LOW);
greenled2Pintimer = millis ();
}
void toggledredled2Pin ()
{
if (digitalRead (redled2Pin) == LOW)
digitalWrite (redled2Pin, HIGH);
else
digitalWrite (redled2Pin, LOW);
redled2Pintimer = millis ();
}
void loop ()
{
if ( (millis() - greenledPintimer) >= greenledPininterval) //handling the blink of green led
togglegreenledPin ();
if ( (millis () - redledPintimer) >= redledPininterval)
toggleredledPin ();
if ( (millis() - greenled2Pintimer) >= greenled2Pininterval) //handling the blink of green led 2
togglegreenled2Pin ();
if ( (millis () - redled2Pintimer) >= redled2Pininterval) // handling the blink of red led 2
toggleredled2Pin ();
}
If your bicolor is a 2 pin, you need to drive it with 2 output pins, lets say 8 and 9, connect one end of the LED to pin 8, other end to current limit resistor (330 Ohm) other end of resistor to pin 9, then:
digitalWrite(8,HIGH); // RED ON
digitalWrite(9,LOW); // "
digitalWrite(8,LOW); // GREEN ON
digitalWrite(9,HIGH); // "
digitalWrite(8,LOW); // OFF
digitalWrite(9,LOW); // "
Using the code I posted on 4/15/18, the red, green leds blinks red, green, both on, off, red, green, both on, off.... The millis value set at 1000, 2000. With millis value 1000, 1000 blink both on, both off. If millis value is 1000, 0, one led is on all the time and the other blinks. I can not make blink red, green, red, green... How do I correct this?
The bi-color (2 leads) led2, blinks red, green, red, green... as desired. In this case the millis value are 2000 and 0. Can anyone explain this?