Hi. I have an arduino uno and a custom PCB that I designed to control a normal 4 pin 5050 RGB strip. The circuit works and the code does partially work too. The problem is that I have 3 different lighting effects I've coded, a fading one, a constant one and a rainbow effect. They all work, but I can't figure out how I can change between the modes when the code is inside a fading for loop. I've tried interrupts, but that doesn't work. Here's the code:
const int rPin = 10;
const int bPin = 11;
const int gPin = 9;
const int nappi = 8;
int luku = 0;
void setup() {
pinMode(rPin, OUTPUT);
pinMode(bPin, OUTPUT);
pinMode(gPin, OUTPUT);
pinMode(nappi, INPUT);
Serial.begin(9600);
}
//define the different effect modes
void fade(){
analogWrite(bPin, 0);
analogWrite(gPin, 0);
for(int i = 0;i<255;i++){
analogWrite(rPin, i);
delay(5);
}
for(int i=255;i>0;i--){
analogWrite(rPin, i);
delay(5);
}
}
void red(){
analogWrite(gPin, 0);
analogWrite(bPin, 0);
analogWrite(rPin, 255);
}
void rbow(){
int viive = 10;
for (int i=0; i<255;i++){
analogWrite(rPin, i);
Serial.println(i);
analogWrite(rPin, i);
analogWrite(gPin, 0);
analogWrite(bPin, 0);
delay(viive);
}
for (int i=0; i<255;i++){
Serial.println(i);
analogWrite(gPin, i);
delay(viive);
}
for (int i=255; i>0;i--){
analogWrite(rPin, i);
delay(viive);
}
for (int i=0; i<255;i++){
Serial.println(i);
delay(viive);
analogWrite(bPin, i);
}
for (int i=255; i>0;i--){
Serial.println(i);
analogWrite(gPin, i);
delay(viive);
}
for (int i=0; i<255;i++){
Serial.println(i);
analogWrite(rPin, i);
delay(viive);
}
for (int i=255; i>0;i--){
Serial.println(i);
analogWrite(bPin, i);
delay(viive);
}
for (int i=255; i>0;i--){
Serial.println(i);
analogWrite(rPin, i);
delay(viive);
}
}
void loop() {
int nState = digitalRead(nappi);
//increment when button is pressed, doesn't work because the code is always in the for loop.
if (nState == HIGH) {
luku++;
delay(10);
}
if (luku > 2) {
luku = 0;
}
if (luku == 0) {
fade();
}
if (luku == 1) {
red();
}
if (luku == 2) {
rbow();
}
//debugging stuff
Serial.print("Nappi = "); Serial.println(nState);
delay(100);
Serial.print("Mode = ");Serial.println(luku);
delay(100);
}