rgb strip fading code crashing at the end

Hi guys.

I am building a project with a rgb led strip, arduino nano and 2n 2222A transistors. The code that I am using is:

int redPin = A0;
int greenPin = A5;
int bluePin = A4;
int fadeSpeed = 5;
int long r = 255;
int long g = 66;
int long b = 66;
int fadespeed = 10;

void setup() {
pinMode (redPin, OUTPUT);
pinMode (greenPin, OUTPUT);
pinMode (bluePin, OUTPUT);

}

void loop() {
Serial.begin (9600);

for (g > 65; g < 255; g = g + 1) {
analogWrite (redPin, r);
analogWrite (greenPin, g);
analogWrite (bluePin, b);
delay (fadespeed);
Serial.println (r);
Serial.println (g);
Serial.println (b);
}

for (r <= 255; r > 65; r = r - 1) {
analogWrite (redPin, r); //
analogWrite (greenPin, g);
analogWrite (bluePin, b);
delay (fadespeed);
Serial.println (r);
Serial.println (g);
Serial.println (b);

}

for (b > 65; b < 255; b = b + 1) {
analogWrite (redPin, r);
analogWrite (greenPin, g);
analogWrite (bluePin, b);
delay (fadespeed);
Serial.println (r);
Serial.println (g);
Serial.println (b);
}

for (g <= 255; g > 65; g = g - 1) {
analogWrite (redPin, r);
analogWrite (greenPin, g);
analogWrite (bluePin, b);
delay (fadespeed);
Serial.println (r);
Serial.println (g);
Serial.println (b);
}

for (r > 65; r < 255; r = r + 1) {
analogWrite (redPin, r);
analogWrite (greenPin, g);
analogWrite (bluePin, b);
delay (fadespeed);
Serial.println (r);
Serial.println (g);
Serial.println (b);
}

for (b <= 255; b > 65; b = b - 1) {
analogWrite (redPin, r);
analogWrite (greenPin, g);
analogWrite (bluePin, b);
delay (fadespeed);
Serial.println (r);
Serial.println (g);
Serial.println (b);
}

}

The problem is in the last step, when I am decreasing the blue light intensity. As you can see, it was supposed to decrease the intensity until 65 of output. However, when the value reaches 71 it stops. I tried to set 71 as the bottom line, but it stops at 77 (in both cases, 6 units higher then it should be). All the other steps are working perfect. Anyone has an idea why it stopping before reaches 65???

Thanks

You haven't got the right syntax of a for statement. The first item is an initialization not a test.

https://www.arduino.cc/en/Reference/For

I didn't understand where is the mistake. All first statements are initialization steps, like, for b=<255; test b>65; if yes, b= b-1. All the other FOR are working and the issue is just in the last one. I sorry if I didn't get what are you trying to show me.

I attached a print of the serial.print showing the last reads. The last values are r (255), g (65), and b (71), and a square that I have no idea what is doing there.

Lmk if you know how to fix this.

Thanks

I did what you said (removed grater and lower signals) but I got the same, but, when I deleted the last 3 serial.println, it worked. Somehow, I don't know. Any idea???

  for (b <= 255; b > 65; b = b - 1) {
    analogWrite (redPin, r);    // turn red
    analogWrite (greenPin, g);
    analogWrite (bluePin, b);
    Serial.println (r);
    Serial.println (g);
    Serial.println (b);
    delay (fadespeed);

   }

The issue now is the fade effect. I'm just getting the color on or off, nothing in between. I saw videos on youtube using the same specs (2N 2222A transistors, 220 ohms resistors).

Yeah, I fixed. Since I moved the serial.print (r), (g) and (b) to before delay (fadespeed) the loop didn't stop so far. Each values starts at 65, but I noticed that Only turns the lights on over 190, which is my issue now. As I said, it seems that the transistor doesn't increase the current gradually, just on or off.

int redPin = A5;
int greenPin = A0;
int bluePin = A4;
int fadeSpeed = 5;
int long r = 255;
int long g = 66;
int long b = 66;
int fadespeed = 30;

void setup() {
  pinMode (redPin, OUTPUT);
  pinMode (greenPin, OUTPUT);
  pinMode (bluePin, OUTPUT);

}

void loop() {
  Serial.begin (9600);

  for (g > 65; g < 255; g = g + 1) {
    analogWrite (redPin, r);    // turn red to orange
    analogWrite (greenPin, g);
    analogWrite (bluePin, b);
    Serial.println (r);
    Serial.println (g);
    Serial.println (b);
    delay (fadespeed);
  }

  for (r <= 255; r > 65; r = r - 1) {
    analogWrite (redPin, r);    // turn orange to yellow
    analogWrite (greenPin, g);
    analogWrite (bluePin, b);
    Serial.println (r);
    Serial.println (g);
    Serial.println (b);
    delay (fadespeed);

  }

  for (b > 65; b < 255; b = b + 1) {
    analogWrite (redPin, r);    // turn yellow to green
    analogWrite (greenPin, g);
    analogWrite (bluePin, b);
    Serial.println (r);
    Serial.println (g);
    Serial.println (b);
    delay (fadespeed);
  }

  for (g <= 255; g > 65; g = g - 1) {
    analogWrite (redPin, r);    // turn red
    analogWrite (greenPin, g);
    analogWrite (bluePin, b);
    Serial.println (r);
    Serial.println (g);
    Serial.println (b);
    delay (fadespeed);
  }

  for (r > 65; r < 255; r = r + 1) {
    analogWrite (redPin, r);    // turn red
    analogWrite (greenPin, g);
    analogWrite (bluePin, b);
    Serial.println (r);
    Serial.println (g);
    Serial.println (b);
    delay (fadespeed);
  }

  for (b <= 255; b > 65; b = b - 1) {
    analogWrite (redPin, r);    // turn red
    analogWrite (greenPin, g);
    analogWrite (bluePin, b);
    Serial.println (r);
    Serial.println (g);
    Serial.println (b);
    delay (fadespeed);

  }

This is the current code that is working. Removing the < and > signals didn't change anything.

Man, it is still there because it doesn't matter! As I said, its working now, with or without < or > signals. The issue was the serial.println after the delay. I don't understand what you mean... Its working, that's it. The issue now is the transistor not "fading" the current, just on or off.

int redPin = A5;
int greenPin = A0;
int bluePin = A4;
int fadeSpeed = 5;
int long r = 255;
int long g = 65;
int long b = 65;
int fadespeed = 30;

void setup() {
  pinMode (redPin, OUTPUT);
  pinMode (greenPin, OUTPUT);
  pinMode (bluePin, OUTPUT);

}

void loop() {
  Serial.begin (9600);

  for (g = 65; g < 255; g = g + 1) {
    analogWrite (redPin, r);    // turn red to orange
    analogWrite (greenPin, g);
    analogWrite (bluePin, b);
    Serial.println (r);
    Serial.println (g);
    Serial.println (b);
    delay (fadespeed);
  }

  for (r = 255; r > 65; r = r - 1) {
    analogWrite (redPin, r);    // turn orange to yellow
    analogWrite (greenPin, g);
    analogWrite (bluePin, b);
    Serial.println (r);
    Serial.println (g);
    Serial.println (b);
    delay (fadespeed);

  }

  for (b = 65; b < 255; b = b + 1) {
    analogWrite (redPin, r);    // turn yellow to green
    analogWrite (greenPin, g);
    analogWrite (bluePin, b);
    Serial.println (r);
    Serial.println (g);
    Serial.println (b);
    delay (fadespeed);
  }

  for (g = 255; g > 65; g = g - 1) {
    analogWrite (redPin, r);    // turn red
    analogWrite (greenPin, g);
    analogWrite (bluePin, b);
    Serial.println (r);
    Serial.println (g);
    Serial.println (b);
    delay (fadespeed);
  }

  for (r = 65; r < 255; r = r + 1) {
    analogWrite (redPin, r);    // turn red
    analogWrite (greenPin, g);
    analogWrite (bluePin, b);
    Serial.println (r);
    Serial.println (g);
    Serial.println (b);
    delay (fadespeed);
  }

  for (b = 255; b > 65; b = b - 1) {
    analogWrite (redPin, r);    // turn red
    analogWrite (greenPin, g);
    analogWrite (bluePin, b);
    Serial.println (r);
    Serial.println (g);
    Serial.println (b);
    delay (fadespeed);

  }


}

Here is the code without the < or >, but the result has been the same with the signals.

int redPin = A5;
int greenPin = A0;
int bluePin = A4;
int fadeSpeed = 5;
int long r = 255;
int long g = 65;
int long b = 65;
int fadespeed = 15;

I didn't ignore you, its written in the code. The collors start at 65 or 255 (r)

int redPin = 6;
int greenPin = 8;
int bluePin = 7;
int fadeSpeed = 5;
int long r = 255;
int long g = 1;
int long b = 1;
int fadespeed = 15;

void setup() {
  pinMode (redPin, OUTPUT);
  pinMode (greenPin, OUTPUT);
  pinMode (bluePin, OUTPUT);

}

void loop() {
  Serial.begin (9600);

  for (g = 1; g < 255; g = g + 1) {
    analogWrite (redPin, r);    // turn red to orange
    analogWrite (greenPin, g);
    analogWrite (bluePin, b);
    Serial.println (r);
    Serial.println (g);
    Serial.println (b);
    delay (fadespeed);
  }

  for (r = 255; r > 1; r = r - 1) {
    analogWrite (redPin, r);    // turn orange to yellow
    analogWrite (greenPin, g);
    analogWrite (bluePin, b);
    Serial.println (r);
    Serial.println (g);
    Serial.println (b);
    delay (fadespeed);

  }

  for (b = 1; b < 255; b = b + 1) {
    analogWrite (redPin, r);    // turn yellow to green
    analogWrite (greenPin, g);
    analogWrite (bluePin, b);
    Serial.println (r);
    Serial.println (g);
    Serial.println (b);
    delay (fadespeed);
  }

  for (g = 255; g > 1; g = g - 1) {
    analogWrite (redPin, r);    // turn red
    analogWrite (greenPin, g);
    analogWrite (bluePin, b);
    Serial.println (r);
    Serial.println (g);
    Serial.println (b);
    delay (fadespeed);
  }

  for (r = 1; r < 255; r = r + 1) {
    analogWrite (redPin, r);    // turn red
    analogWrite (greenPin, g);
    analogWrite (bluePin, b);
    Serial.println (r);
    Serial.println (g);
    Serial.println (b);
    delay (fadespeed);
  }

  for (b = 255; b > 1; b = b - 1) {
    analogWrite (redPin, r);    // turn red
    analogWrite (greenPin, g);
    analogWrite (bluePin, b);
    Serial.println (r);
    Serial.println (g);
    Serial.println (b);
    delay (fadespeed);

  }


}

Thanks for your help. We are almost there! Now I can see the fade happening when is in the same color, but the transitions are not so smooth. It may be because the resistors.

Arduino nano. I am using 220 ohms resistors. Sorry about the other message. I sent it before you edit your post.

int redPin = 4;
int greenPin = 6;
int bluePin = 5;
int fadeSpeed = 5;
int long r = 255;
int long g = 1;
int long b = 1;
int fadespeed = 20;

Now its 100%!

Thank you man!

Actually is not 100%... for some reason, the blue color is not fading (its just on of off).

I switched the pins 4, 5 and 6 between the colors and no matter the configuration, the blue light never fades.

If I put red or green on 4 they work fine, but no matter where I put the blue one, never drops the voltage

Google "Arduino Nano pinout" (images).
Just grabbed one image.

http://www.pighixxx.com/test/wp-content/uploads/2014/11/nano.png

The pins with the "wave" are PWM pins.
Leo..

I tried all the other "waved" ones. Works with all the color but the blue one.

Now its ok. Working fine on pin 3.

Thanks again