Hi!
I am trying to make a led strip with different modes.
Currently I have managed to make a interrupt, with a function that increments a variabel, when i push a button, so the switch changes. The problem I have, is that I can't manage to make the function stop right at the moment when I press the button. I do not know how to do this, other then to put a loop that always checks the button if this is pressed, inside the redTurnOn() function, and all the other colorfunctions. I have been taught that this is bad programming, so i want to make a interrupt to do this.
Don't bother with the commented functions, I am also trying to make one function that I can use for all the colors, but I have not worked on it that much, so currently the colorfunctions is what I use. I also don't use the checkIfButtonPress() function. This was in the early state of the program.
This is my first project, so the coding may not be perfect, hehe.
Please help:)
//define pins for the red
#define RED_LED 6
#define BLUE_LED 9
#define GREEN_LED 5
#define BUTTON 2
int brightness = 255;
int gBright = 0;
int rBright = 0;
int bBright = 0;
int fadeSpeed = 10;
int transition = 100;
volatile int switchState = 0;
int modeNumb = 1;
void setup() {
pinMode(BUTTON,INPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(BUTTON), incrementSwitch, RISING);
}
/*void turnOnFadeLed(int color, int led){
for (int i=0;i<255; i++){
color ++;
analogWrite(led, color);
delay(fadeSpeed);
//Serial.print("TurnOnLedNumb");
//Serial.println(modeNumb);
}
}
void turnOffFadeLed(int color,int led){
for (int i=0;i<255; i++){
color--;
analogWrite(led, color);
delay(fadeSpeed);
//Serial.print("turnOffLedNumb");
//Serial.println(modeNumb);
}
}
void TurnOnFade(){
turnOnFadeLed(rBright,RED_LED);
if (gBright == 255){
turnOffFadeLed(gBright,GREEN_LED);
}
turnOnFadeLed(bBright,BLUE_LED);
turnOffFadeLed(rBright,RED_LED);
turnOnFadeLed(gBright,GREEN_LED);
turnOffFadeLed(bBright,BLUE_LED);
}*/
void redTurnOn(){
for (int i=0;i<brightness; i++){
rBright ++;
analogWrite(RED_LED, rBright);
delay(fadeSpeed);
}
}
void greenTurnOn(){
for (int i=0;i<brightness; i++){
gBright ++;
analogWrite(GREEN_LED, gBright);
delay(fadeSpeed);
}
}
void blueTurnOn(){
for (int i=0;i<brightness; i++){
bBright ++;
analogWrite(BLUE_LED, bBright);
delay(fadeSpeed);
}
}
void redTurnOff(){
for (int i=0;i<brightness; i++){
rBright --;
analogWrite(RED_LED, rBright);
delay(fadeSpeed);
}
}
void blueTurnOff(){
for (int i=0;i<brightness; i++){
bBright --;
analogWrite(BLUE_LED, bBright);
delay(fadeSpeed);
}
}
void greenTurnOff(){
for (int i=0;i<brightness; i++){
gBright --;
analogWrite(GREEN_LED, gBright);
delay(fadeSpeed);
}
}
void redOn(){
rBright = brightness;
analogWrite(RED_LED, rBright);
delay(transition);
}
void greenOn(){
gBright = brightness;
analogWrite(GREEN_LED, gBright);
delay(transition);
}
void blueOn(){
bBright = brightness;
analogWrite(BLUE_LED, bBright);
delay(transition);
}
void redOff(){
rBright = 0;
analogWrite(RED_LED, rBright);
delay(transition);
}
void greenOff(){
gBright = 0;
analogWrite(GREEN_LED, gBright);
delay(transition);
}
void blueOff(){
bBright = 0;
analogWrite(BLUE_LED, bBright);
delay(transition);
}
void colorChange(){
blueOn();
if (rBright == 255){
redOff();
}
greenOn();
blueOff();
redOn();
greenOff();
}
void TurnOnFade(){
redTurnOn();
if (gBright == brightness){
greenTurnOff();
}
blueTurnOn();
redTurnOff();
greenTurnOn();
blueTurnOff();
}
void redStrobe(){
redOn();
redOff();
}
void resetBrightnessValue(){
rBright = 0;
analogWrite(RED_LED, rBright);
gBright = 0;
analogWrite(GREEN_LED, gBright);
bBright = 0;
analogWrite(BLUE_LED, bBright);
}
bool checkIfButtonPress(){
switchState = digitalRead(BUTTON);
if (switchState == 1){
delay(300);
return true;
}
else{
switchState = 0;
return false;
}
}
void incrementSwitch(){
if (modeNumb < 4){
modeNumb ++;
delay(300);
Serial.print("incrementSwitch modeNumb: ");
Serial.println(modeNumb);
}
else {
modeNumb = 1;
delay(300);
Serial.print("incrementSwitch modeNumb change to 1: ");
Serial.println(modeNumb);
}
}
void changeOfModes(){
Serial.print("modenumb: ");
Serial.println(modeNumb);
switch(modeNumb){
case 1:{
resetBrightnessValue();
while (modeNumb == 1){
TurnOnFade();
Serial.print("modenumbCase1: ");
Serial.println(modeNumb);
}
break;
}
case 2:{
resetBrightnessValue();
while (modeNumb == 2){
redTurnOn();
redOff();
//turnOnFadeLed(rBright,RED_LED);
Serial.print("modenumbCase2: ");
Serial.println(modeNumb);
}
break;
}
case 3:{
resetBrightnessValue();
while (modeNumb == 3){
colorChange();
Serial.print("modeNumbCase3: ");
Serial.println(modeNumb);
}
break;
}
case 4:{
resetBrightnessValue();
while (modeNumb == 4){
redStrobe();
Serial.print("modeNumbCase4: ");
Serial.println(modeNumb);
}
break;
}
}
}
void loop() {
changeOfModes();
}