[SOLVED] Led Blink mode changer

Hi

I would like to make this project where I use an LED to make it flash at different intervals at each subsequent press of a momentary push button. The goal of this project is to make a safety flasher or as a beacon.

This is how I want it to be.
-first press = led blinks at 1s interval loop
-second press = led blinks at 1/2s interval loop
-third press = led pwm fades in and out at 1s loop
-fourth press = the process resets back to first step

-long press (2s) = Project changes led pin to another one
-long press again = project changes led pin back to original one

So how would the code look like? I figure this has to be done BlinkWIthoutDelay. :confused:

Hi,

Go to "Blink without Delay" Example in the IDE and work from there.

Tom.... :slight_smile:

arduino_x:
Perhaps this code in the Playground will help.

Thanks, so with this code the out pin change part is solved. now I just need the code to cycle flasher modes.

TomGeorge:
Hi,

Go to "Blink without Delay" Example in the IDE and work from there.

Tom.... :slight_smile:

ok, but I still haven't figured out how each subsequent button presses can cycle through these different blink without delay modes.

Use a counter to keep track of your short presses so you know what mode you have selected.

Depending on your counter you do different things.

Hi,

/* Blink without Delay

 Turns on and off a light emitting diode (LED) connected to a digital
 pin, without using the delay() function.  This means that other code
 can run at the same time without being interrupted by the LED code.

 The circuit:
 * LED attached from pin 13 to ground.
 * Note: on most Arduinos, there is already an LED on the board
 that's attached to pin 13, so no hardware is needed for this example.

 created 2005
 by David A. Mellis
 modified 8 Feb 2010
 by Paul Stoffregen
 modified 11 Nov 2013
 by Scott Fitzgerald


 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
 */

// constants won't change. Used here to set a pin number :
const int ledPin =  13;      // the number of the LED pin

// Variables will change :
int ledState = LOW;             // ledState used to set the LED

// 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 = 0;        // will store last time LED was updated

// constants won't change :
const long interval = 1000;           // interval at which to blink (milliseconds)

void setup() {
  // set the digital pin as output:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // here is where you'd put code that needs to be running all the time.

  // 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 = 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(ledPin, ledState);
  }
}

This is the code for blink without delay, there is a constant in the code called "interval"
This is the delay between LED changes of state.
You just have to write some code to change the value of "interval" to change the flash rates when you press the button.

First you need to change

const long interval = 1000;           // interval at which to blink (milliseconds)

to

long interval = 1000;           // interval at which to blink (milliseconds)

Otherwise "interval" will not change value.

Tom... :slight_smile:

Gabriel_swe:
Use a counter to keep track of your short presses so you know what mode you have selected.

Depending on your counter you do different things.

That's exactly what I needed!! :slight_smile: looks like problem solved.

TomGeorge:
This is the code for blink without delay, there is a constant in the code called "interval"
This is the delay between LED changes of state.
You just have to write some code to change the value of "interval" to change the flash rates when you press the button.

First you need to change

const long interval = 1000;           // interval at which to blink (milliseconds)

to

long interval = 1000;           // interval at which to blink (milliseconds)

Otherwise "interval" will not change value.

Thanks for the tip. :slight_smile: