Go Down

Topic: Project 5 & 6 together (Read 1 time) previous topic - next topic

May 31, 2013, 01:40 pm Last Edit: Jun 08, 2013, 09:17 pm by francobonelli Reason: 1
Hi!!!

I just recently got the Uno and am working my way though the book.I have successfully coded Projects 5 & 6 but was wondering what is the best way to link them both so they loop after each other.

So,far I have merged the codes but when I run it....they dont loop after one another but the 1st loop gets so far then the 2nd starts.Then the 1st finishes and restarts and the 2nd one comes in intermittently.It is very erratic.

So,basically I want to have a loop that runs the Chase Led sequence 1st fully,then the Bounce sequence fully and the Chase again and so on........

Here is as far as I have gotten with the code:
Code: [Select]
//Project LED Dance Floor
byte ledPin [] = {
 12,11,10,9,8}; //create an array for the led pins
byte ledPin2 [] = {
 4,5,6,7,8};
byte ledPinB [] = {
 4,5,6,7,8,9,10,11,12}; //creat an array for the led pins
int ledDelay(65); //delay between changes
int  x;
int  y;
int directionleft = 1;
int directionright = -1;
int currentLED1 = 0; //track left array
int currentLED2 = 0; //track right array
int direction = 1;
int currentLed =0;
unsigned long changeTime;
unsigned long changeTimeB;
int potPin = 2;    // select the input pin for the potentiometer  

void setup(){
 setupChase();
 setupBounce();
}

void loop(){
 loopChase();
 loopBounce();
}

void setupChase(){
 for (int x=0 ; x<5 ; x++){
   pinMode(ledPin[x], OUTPUT); //set all pins to output
   pinMode(ledPin2[x], OUTPUT);  
 }
 changeTime = millis();
}

void loopChase()
{
 ledDelay = analogRead(potPin); // read the value from the pot
 if ((millis() - changeTime) > ledDelay) { //if it has been ledDelay ms since last change
   changeLED();
   changeTime = millis();
 }
}
void changeLED(){
 for (int x=0;x<5;x++){
   digitalWrite(ledPin[x], LOW); //turn off all leds
   digitalWrite(ledPin2[x], LOW); //turn off all leds
 }

 digitalWrite(ledPin[currentLED1],HIGH); //turn on the current led
 digitalWrite(ledPin2[currentLED2],HIGH);
 currentLED1 += directionleft; //increment by the direction value
 currentLED2 -= directionright;

 if (currentLED1 ==4) {
   directionleft = -1;
 }
 //change direction if we reach the end
 if (currentLED1 ==0) {
   directionleft = 1;
 }

 if (currentLED2 ==4) {
   directionright = 1;
 }
 //change direction if we reach the end
 if (currentLED2 ==0) {
   directionright = -1;
 }

}

void setupBounce(){
 for (int y=0 ; y<9 ; y++){
   pinMode(ledPinB[y], OUTPUT); //set all pins to output
 }
 changeTimeB = millis();
}

void loopBounce()
{
 ledDelay = analogRead(potPin); // read the value from the pot
 if ((millis() - changeTimeB) > ledDelay) { //if it has been ledDelay ms since last change
   changeLEDB();
   changeTimeB = millis();
 }
}
void changeLEDB(){
 for (int y=0;y<9;y++){
   digitalWrite(ledPinB[y], LOW); //turn off all leds
 }

 digitalWrite(ledPinB[currentLed],HIGH); //turn on the current led
 currentLed += direction; //increment by the direction value

 if (currentLed ==8) {
   direction = -1;
 } //change direction if we reach the end
 if (currentLed ==0) {
   direction = 1;
 }
}





Any help would be greatly appreciated as I am newish to the world of MCU's!

Thanks in advance


Anybody any ideas???


Go Up