code is attached.
Why? The code was small enough to post:
#include <Wire.h>
int red = 10;
int green = 9;
int blue = 5;
byte fromMaster[4];
int toLights[4];
int val;
void setup() {
pinMode(red,OUTPUT);
pinMode(green,OUTPUT);
pinMode(blue,OUTPUT);
Wire.begin(8);
Wire.onReceive(receiveEvent);
Serial.begin(9600);
}
void loop() {
powerOff:
while(toLights[0]==0){
analogWrite(red,255);
analogWrite(green,255);
analogWrite(blue,255);
}
while(toLights[1]==0){
if(toLights[1]==1){
goto standard;
}
for(int i=0; i<=255; i++){
analogWrite(red,i);
analogWrite(green,255-i);
analogWrite(blue,255);
Serial.println("#1");
Serial.println(toLights[1]);
if(toLights[1]==1){
goto standard;
}
else if(toLights[0]==0){
goto powerOff;
}
delay(25);
}
for(int i=0; i<=255; i++){
analogWrite(green,i);
analogWrite(blue,255-i);
analogWrite(red,255);
Serial.println("#2");
Serial.println(toLights[1]);
if(toLights[1]==1){
goto standard;
}
else if(toLights[0]==0){
goto powerOff;
}
delay(25);
}
for(int i=0; i<=255; i++){
analogWrite(blue,i);
analogWrite(red,255-i);
analogWrite(green,255);
Serial.println("#3");
Serial.println(toLights[1]);
if(toLights[1]==1){
goto standard;
}
else if(toLights[0]==0){
goto powerOff;
}
delay(25);
}
}
standard:
if(toLights[2]<255){
analogWrite(red,toLights[2]);
analogWrite(green,255-toLights[2]);
analogWrite(blue,255);
delay(toLights[3]);
analogWrite(red,255);
analogWrite(green,255);
analogWrite(blue,255);
delay(toLights[3]);
if(toLights[0]==0){
goto powerOff;
}
}
else if(toLights[2]>=255&&toLights[2]<510){
toLights[2]=map(toLights[2],255,509,0,255);
analogWrite(red,255);
analogWrite(green,toLights[2]);
analogWrite(blue,255-toLights[2]);
delay(toLights[3]);
analogWrite(red,255);
analogWrite(green,255);
analogWrite(blue,255);
delay(toLights[3]);
if(toLights[0]==0){
goto powerOff;
}
}
else if(toLights[2]>=510){
toLights[2]=map(toLights[2],510,765,0,255);
analogWrite(green,255);
analogWrite(blue,toLights[2]);
analogWrite(red,255-toLights[2]);
delay(toLights[3]);
analogWrite(red,255);
analogWrite(green,255);
analogWrite(blue,255);
delay(toLights[3]);
if(toLights[0]==0){
goto powerOff;
}
}
}
void receiveEvent(){
while (Wire.available()){
fromMaster[val]=Wire.read();
val++;
}
val =0;
for(int i=0; i<4; i++){
toLights[i]=int(fromMaster[i]);
}
Serial.println(toLights[2]);
}
byte fromMaster[4];
int toLights[4];
Why is toLights an int array? Since it is valued with bytes read from some device, it makes no sense to type it int.
toLights[i]=int(fromMaster[i]);
The compiler is perfectly capable of storing a byte in an int element without your ham-fisted "help".
goto standard;
What is this horsecrap? There is NO need for labels and gotos in properly written code.