This code.version has a functionality that transforms a momentary push-button
to a toggle-switch.
/*
overview:
function setup() is that function that is always executed only ONCE
the function loop() start doing what its nam says: LOOPING around and around infinetely
inside function loop the function GetToggleSwitchState() is called
activationMode = GetToggleSwitchState(); // must be executed all the time
variable activationMode toggles true/false/true/false....
with each button-press
*/
#include <FastLED.h>
#include <Adafruit_NeoPixel.h>
#define NUM_LEDS 16
#define NUM_LEDS2 60
CRGB leds[NUM_LEDS];
#define BLINK_TIME 50
#define BRIGHTNESS 10
// Superb Tech - LED Button Tutorial - Toggle
// www.youtube.com/superbtech
// define IO-states for inputs with pull-up-resistors
// pull-up-resistors invert the logig
#define unPressed HIGH
#define pressed LOW
const byte ToggleButtonPin = 32;
//int button1 = 32;
bool activationMode = false;
int led1 = 5;
int button2 = 33;
int led2 = 13;
int status = false;
const int buttonPin = 32; // the number of the pushbutton pin
const int ledPin = 5; // the number of the LED pin
const int buttonPin2 = 33; // the number of the pushbutton pin
const int ledPin2 = 4; // the number of the LED pin
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, led1, NEO_GRB + NEO_KHZ800);
void setup() {
pinMode(led1, OUTPUT);
pinMode(ToggleButtonPin, INPUT_PULLUP);
pinMode(led2, OUTPUT);
pinMode(button2, INPUT_PULLUP);
FastLED.addLeds<WS2811, ledPin, GRB>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
}
void loop() {
activationMode = GetToggleSwitchState(); // must be executed all the time
if (activationMode) {
Strobe() ; // <<<<== inside this function you do what shall be executed only if mode isActivated is true
}
/* Your old code out-commented
if (digitalRead(button1) == true) {
status = !status;
Strobe();
digitalWrite(led1, status);
}
while (digitalRead(button1) == true);
*/
if (digitalRead(button2) == true) {
status = !status;
digitalWrite(led2, status);
} while (digitalRead(button2) == true);
delay(50);
}
void Strobe() {
strip.setPixelColor(4, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(5, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(6, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(7, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(8, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(9, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(10, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(11, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(4, strip.Color(0, 0, 0));
strip.setPixelColor(5, strip.Color(0, 0, 0));
strip.setPixelColor(6, strip.Color(0, 0, 0));
strip.setPixelColor(7, strip.Color(0, 0, 0));
strip.setPixelColor(8, strip.Color(0, 0, 0));
strip.setPixelColor(9, strip.Color(0, 0, 0));
strip.setPixelColor(10, strip.Color(0, 0, 0));
strip.setPixelColor(11, strip.Color(0, 0, 0));
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(4, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(5, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(6, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(7, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(8, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(9, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(10, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(11, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(4, strip.Color(0, 0, 0));
strip.setPixelColor(5, strip.Color(0, 0, 0));
strip.setPixelColor(6, strip.Color(0, 0, 0));
strip.setPixelColor(7, strip.Color(0, 0, 0));
strip.setPixelColor(8, strip.Color(0, 0, 0));
strip.setPixelColor(9, strip.Color(0, 0, 0));
strip.setPixelColor(10, strip.Color(0, 0, 0));
strip.setPixelColor(11, strip.Color(0, 0, 0));
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(4, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(5, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(6, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(7, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(8, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(9, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(10, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(11, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(4, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(5, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(6, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(7, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(8, strip.Color(0, 0, 0));
strip.setPixelColor(9, strip.Color(0, 0, 0));
strip.setPixelColor(10, strip.Color(0, 0, 0));
strip.setPixelColor(11, strip.Color(0, 0, 0));
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(0, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(1, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(2, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(3, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(12, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.setPixelColor(13, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.setPixelColor(14, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.setPixelColor(15, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(0, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(1, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(2, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(3, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(12, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(13, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(14, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(15, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(0, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(1, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(2, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(3, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(12, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.setPixelColor(13, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.setPixelColor(14, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.setPixelColor(15, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(0, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(1, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(2, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(3, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(12, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(13, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(14, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(15, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(0, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(1, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(2, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(3, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(12, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.setPixelColor(13, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.setPixelColor(14, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.setPixelColor(15, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(0, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(1, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(2, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(3, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(12, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(13, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(14, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(15, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(4, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(5, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(6, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(7, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(8, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(9, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(10, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(11, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(4, strip.Color(0, 0, 0));
strip.setPixelColor(5, strip.Color(0, 0, 0));
strip.setPixelColor(6, strip.Color(0, 0, 0));
strip.setPixelColor(7, strip.Color(0, 0, 0));
strip.setPixelColor(8, strip.Color(0, 0, 0));
strip.setPixelColor(9, strip.Color(0, 0, 0));
strip.setPixelColor(10, strip.Color(0, 0, 0));
strip.setPixelColor(11, strip.Color(0, 0, 0));
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(4, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(5, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(6, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(7, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(8, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(9, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(10, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(11, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(4, strip.Color(0, 0, 0));
strip.setPixelColor(5, strip.Color(0, 0, 0));
strip.setPixelColor(6, strip.Color(0, 0, 0));
strip.setPixelColor(7, strip.Color(0, 0, 0));
strip.setPixelColor(8, strip.Color(0, 0, 0));
strip.setPixelColor(9, strip.Color(0, 0, 0));
strip.setPixelColor(10, strip.Color(0, 0, 0));
strip.setPixelColor(11, strip.Color(0, 0, 0));
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(4, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(5, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(6, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(7, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(8, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(9, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(10, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.setPixelColor(11, strip.Color(0, 0, 255)); // set pixel 0 to blue
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(4, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(5, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(6, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(7, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(8, strip.Color(0, 0, 0));
strip.setPixelColor(9, strip.Color(0, 0, 0));
strip.setPixelColor(10, strip.Color(0, 0, 0));
strip.setPixelColor(11, strip.Color(0, 0, 0));
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(0, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(1, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(2, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(3, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(12, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.setPixelColor(13, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.setPixelColor(14, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.setPixelColor(15, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(0, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(1, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(2, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(3, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(12, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(13, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(14, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(15, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(0, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(1, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(2, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(3, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(12, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.setPixelColor(13, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.setPixelColor(14, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.setPixelColor(15, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(0, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(1, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(2, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(3, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(12, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(13, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(14, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(15, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(0, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(1, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(2, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(3, strip.Color(255, 0, 0)); // set pixel 0 to red
strip.setPixelColor(12, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.setPixelColor(13, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.setPixelColor(14, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.setPixelColor(15, strip.Color(255, 0, 0)); // set pixel 0 to black
strip.show();
delay(BLINK_TIME);
strip.setPixelColor(0, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(1, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(2, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(3, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(12, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(13, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(14, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.setPixelColor(15, strip.Color(0, 0, 0)); // set pixel 0 to black
strip.show();
delay(BLINK_TIME);
}
bool GetToggleSwitchState() {
// "static" makes variables persistant over function calls
static bool toggleState = false;
static bool lastToggleState = false;
static byte buttonStateOld = unPressed;
static unsigned long buttonScanStarted = 0;
unsigned long buttonDebounceTime = 50;
static unsigned long buttonDebounceTimer;
byte buttonStateNew;
if ( TimePeriodIsOver(buttonDebounceTimer, buttonDebounceTime) ) {
// if more time than buttonDebounceTime has passed by
// this means let pass by some time until
// bouncing of the button is over
buttonStateNew = digitalRead(ToggleButtonPin);
if (buttonStateNew != buttonStateOld) {
// if button-state has changed
buttonStateOld = buttonStateNew;
if (buttonStateNew == unPressed) {
// if button is released
toggleState = !toggleState; // toggle state-variable
} // the attention-mark is the NOT operator
} // which simply inverts the boolean state
} // !true = false NOT true is false
// !false = true NOT false is true
return toggleState;
}
// easy to use helper-function for non-blocking timing
boolean TimePeriodIsOver (unsigned long &startOfPeriod, unsigned long TimePeriod) {
unsigned long currentMillis = millis();
if ( currentMillis - startOfPeriod >= TimePeriod ) {
// more time than TimePeriod has elapsed since last time if-condition was true
startOfPeriod = currentMillis; // a new period starts right here so set new starttime
return true;
}
else return false; // actual TimePeriod is NOT yet over
}
/* explanation of the most important details:
realising a functionality where using a momentary push-button
acts as a toogle-switch
push => activated push again => DE-activated
push again => activated push again => DE-activated
etc. etc. ...
This needs quite some code. This code is well organised in MULTIPLE functions
where each function is a senseful SUB-program
This is the reason why function loop looks super-short:
void loop () {
activationMode = GetToggleSwitchState(); // must be executed all the time
if (activationMode) { // function that does what its name says
//code to execute only when toggled to be acctive
}
Huh that's all? No. Of course there is more (below function loop)
*/
best regards Stefan