This is my first writing of arduino code and I'd like to know how well I've done.
The program is used to do two things:
fade one LED up and down in brightness.
Change the color of a multi color led from green to red.
This is to be loaded onto an arduino nano and more will likely be added.
Please tell me whether it is done correct or any tendencies that could compromise my coding at a more advanced level.
const int fadingled = 9; //fading led pin
const int brightness = 0; //brightness of the led
const int fadeamount = 5 //how much the led fades
const int colorchange1 = 11; //red dual color pin
const int colorchange2 = 12; //green dual color pin
int colorledstate1 = LOW; //red led state on/off
int colorledstate2 = LOW; //green led state on/off
long previousmillis = 0; //last time LED was updated
long interval = 500; //time between flashes
void setup() {
pinMode(fadingled,OUTPUT); //declare all LED's as outputs
pinMode(colorchange1,OUTPUT);
pinMode(colorchange2,OUTPUT);
}
void loop() {
analogWrite(led, brightness); //set the brightness to the LED
brightness = brightness + fadeamount; //add or subtract to the brightness based on fadeamount
if (brightness == 0 || brightness == 255) {
fadeamount = -fadeamount;
}
unsigned long currentmillis = millis();
if currentmillis - previousmillis > interval) { //if it has been more than 500 milliseconds
previousmillis = currentmillis;
//turn the led off if it's on and vice versa
if (colorledstate1 == LOW) {
colorledstate1 = HIGH; }
else {
colorledstate1 = LOW; }
//if the red LED is on, turn the green LED off and vice versa
if (colorledstate1 == LOW) {
colorledstate2 = HIGH;
}
else {
colorledstate2 = LOW;
}
Well It's not working now
I put one LED to go high in the setup just so I know that it is running and it is, but it's never going through the loop.
const int fadingled = 9; //fading led pin
int brightness = 0; //brightness of the led
int fadeamount = 5; //how much the led fades
const int colorchange1 = 11; //red dual color pin
const int colorchange2 = 12; //green dual color pin
int colorledstate1 = LOW; //red led state on/off
int colorledstate2 = LOW; //green led state on/off
long previousmillis = 0; //last time LED was updated
long interval = 500; //time between flashes
void setup() {
pinMode(fadingled,OUTPUT); //declare all LED's as outputs
pinMode(colorchange1,OUTPUT);
pinMode(colorchange2,OUTPUT);
analogWrite(colorledstate1, HIGH);
}
void loop() {
analogWrite(fadingled, brightness); //set the brightness to the LED
brightness = brightness + fadeamount; //add or subtract to the brightness based on fadeamount
if (brightness == 0 || brightness == 255) {
fadeamount = -fadeamount;
}
unsigned long currentmillis = millis();
if (currentmillis - previousmillis > interval) { //if it has been more than 500 milliseconds
previousmillis = currentmillis;
//turn the led off if it's on and vice versa
if (colorledstate1 == LOW) {
colorledstate1 = HIGH; }
else {
colorledstate1 = LOW; }
//if the red LED is on, turn the green LED off and vice versa
if (colorledstate1 == LOW) {
colorledstate2 = HIGH;
}
else {
colorledstate2 = LOW;
}
}
}
You're right, I missed that. Either way, the led still goes high during the setup.
Modified code, still not looping though
const int fadingled = 9; //fading led pin
int brightness = 0; //brightness of the led
int fadeamount = 1; //how much the led fades
const int colorchange1 = 11; //red dual color pin
const int colorchange2 = 12; //green dual color pin
int colorledstate1 = LOW; //red led state on/off
int colorledstate2 = LOW; //green led state on/off
long previousmillis = 0; //last time LED was updated
long interval = 500; //time between flashes
void setup() {
pinMode(fadingled,OUTPUT); //declare all LED's as outputs
pinMode(colorchange1,OUTPUT);
pinMode(colorchange2,OUTPUT);
analogWrite(colorchange1, HIGH);
}
void loop() {
analogWrite(colorchange1,colorledstate1); //write to the LED's
analogWrite(colorchange2,colorledstate2);
analogWrite(fadingled, brightness); //set the brightness to the LED
brightness = brightness + fadeamount; //add or subtract to the brightness based on fadeamount
if (brightness == 0 || brightness == 255) {
fadeamount = -fadeamount;
}
unsigned long currentmillis = millis();
if (currentmillis - previousmillis > interval) { //if it has been more than 500 milliseconds
previousmillis = currentmillis;
//turn the led off if it's on and vice versa
if (colorledstate1 == LOW) {
colorledstate1 = HIGH; }
else {
colorledstate1 = LOW; }
//if the red LED is on, turn the green LED off and vice versa
if (colorledstate1 == LOW) {
colorledstate2 = HIGH;
}
else {
colorledstate2 = LOW;
}
}
}
analogWrite(pin, # from 0 to 255);
I don't see you writing a number to the pins.
Try changing the low, high you have there now to something either is, or represents, a number.
Here's the modified code, the color change is working now but the fading LED just stays solid, it stays at a certain brightness depending on the value of fadeamount.
Edit: I forgot to put a delay, it's all working now.
const int fadingled = 9; //fading led pin
int brightness = 1; //brightness of the led
int fadeamount = 1; //how much the led fades
const int colorchange1 = 11; //red dual color pin
const int colorchange2 = 12; //green dual color pin
int colorledstate1 = LOW; //red led state on/off
int colorledstate2 = LOW; //green led state on/off
long previousmillis = 0; //last time LED was updated
long interval = 500; //time between flashes
void setup() {
pinMode(fadingled,OUTPUT); //declare all LED's as outputs
pinMode(colorchange1,OUTPUT);
pinMode(colorchange2,OUTPUT);
}
void loop() {
digitalWrite(colorchange1,colorledstate1); //write to the LED's
digitalWrite(colorchange2,colorledstate2);
analogWrite(fadingled, brightness); //set the brightness to the LED
brightness = brightness += fadeamount; //add or subtract to the brightness based on fadeamount
if (brightness == 0 || brightness == 255) {
fadeamount = -fadeamount;
}
unsigned long currentmillis = millis();
if (currentmillis - previousmillis > interval) { //if it has been more than 500 milliseconds
previousmillis = currentmillis;
//turn the led off if it's on and vice versa
if (colorledstate1 == LOW) {
colorledstate1 = HIGH; }
else {
colorledstate1 = LOW; }
//if the red LED is on, turn the green LED off and vice versa
if (colorledstate1 == LOW) {
colorledstate2 = HIGH;
}
else {
colorledstate2 = LOW;
}
}
}
Well, that would indicate this isn't doing what you want:
brightness = brightness += fadeamount; //add or subtract to the brightness based on fadeamount
if (brightness == 0 || brightness == 255) {
fadeamount = -fadeamount;
}
Try putting a Serial.print and see what's happening to brightness & fadeamount.