Cycling Between Voids W/ a PushButton & Issues W/ Charliecube not Cycling


hello all, , happy thanksgiving if celebrate it!

i built charliecube based on asher glick's tutorial. issue i'm having doesn't cycle through animations should. gets stuck on "planarspin" animation. if comment out animations 1 one, i've found "shiftsquares" animation cycle on "tunnel", that's 1 works properly.

code: [select]
#include "cubeplex.h"

int color = red;
int count = 0;

void setup() {
  initcube();
 
  animationmax = 10;  // how many secconds until animation told progress
}
void loop() {
  planarspin();
  fountian();
  trifade();
  shiftsquares();
  tunnel();
  chasethedot();
  planarflop3d();

  //seqthedot();      //for testing 1 led @ time, , finding wiring errors
}

void planarspin() {
.
.
.

void shiftsquares() {
  int animationspeed = 100;
 
  int blx = 2; // blue x
  int bly = 0; // blue y
  int blz = 0; // blue z
 
  int rdx = 0; // red x
  int rdy = 2; // red y
  int rdz = 0; // red z
 
  int gnx = 0; // green x
  int gny = 0; // green y
  int gnz = 2; // green z
 
  int * mover = &blx;
  continuepattern = true;
 
  while(continuepattern) {
    switch (random(0,9)) {
      case 0: mover = &blx; break;
      case 1: mover = &bly; break;
      case 2: mover = &blz; break;
      case 3: mover = &rdx; break;
      case 4: mover = &rdy; break;
      case 5: mover = &rdz; break;
      case 6: mover = &gnx; break;
      case 7: mover = &gny; break;
      case 8: mover = &gnz; break;
    }
    *mover = (((*mover)+2)%4)-1;
    drawbox(blue ,abs(blx),abs(bly),abs(blz),abs(blx)+1,abs(bly)+1,abs(blz)+1);
    drawbox(red  ,abs(gnx),abs(gny),abs(gnz),abs(gnx)+1,abs(gny)+1,abs(gnz)+1);
    drawbox(green,abs(rdx),abs(rdy),abs(rdz),abs(rdx)+1,abs(rdy)+1,abs(rdz)+1);
    flushbuffer();
    clearbuffer();
    delay(animationspeed);
    *mover = (((*mover)+2)%4)-1;
    drawbox(blue ,abs(blx),abs(bly),abs(blz),abs(blx)+1,abs(bly)+1,abs(blz)+1);
    drawbox(red  ,abs(gnx),abs(gny),abs(gnz),abs(gnx)+1,abs(gny)+1,abs(gnz)+1);
    drawbox(green,abs(rdx),abs(rdy),abs(rdz),abs(rdx)+1,abs(rdy)+1,abs(rdz)+1);
    flushbuffer();
    clearbuffer();
    delay(animationspeed*2);
  }
}

void tunnel() {
  continuepattern = true;
  int animationspeed =100;
 
  int color1[]  = {r,r,r,r,b,b,b,b};
  int bright1[] = {2,4,6,8,2,4,6,8};
  int color2[]  = {b,b,b,b,r,r,r,r};
//int bright2[] = {6,4,2,0,6,4,2,0};
  int bright2[] = {8,6,4,2,8,6,4,2};
 
  int index[]   = {0,1,2,3,4,5,6,7};
 
  while (continuepattern) {
    drawboxwalls(color1[index[0]],bright1[index[0]],1,1,0,2,2,0);
    drawboxwalls(color2[index[0]],bright2[index[0]],1,1,0,2,2,0);
    drawboxwalls(color1[index[1]],bright1[index[1]],1,1,1,2,2,1);
    drawboxwalls(color2[index[1]],bright2[index[1]],1,1,1,2,2,1);
    drawboxwalls(color1[index[2]],bright1[index[2]],1,1,2,2,2,2);
    drawboxwalls(color2[index[2]],bright2[index[2]],1,1,2,2,2,2);
    drawboxwalls(color1[index[3]],bright1[index[3]],1,1,3,2,2,3);
    drawboxwalls(color2[index[3]],bright2[index[3]],1,1,3,2,2,3);
   
    drawboxwalls(color1[index[4]],bright1[index[4]],0,0,3,3,3,3);
    drawboxwalls(color2[index[4]],bright2[index[4]],0,0,3,3,3,3);
    drawboxwalls(color1[index[5]],bright1[index[5]],0,0,2,3,3,2);
    drawboxwalls(color2[index[5]],bright2[index[5]],0,0,2,3,3,2);
    drawboxwalls(color1[index[6]],bright1[index[6]],0,0,1,3,3,1);
    drawboxwalls(color2[index[6]],bright2[index[6]],0,0,1,3,3,1);
    drawboxwalls(color1[index[7]],bright1[index[7]],0,0,0,3,3,0);
    drawboxwalls(color2[index[7]],bright2[index[7]],0,0,0,3,3,0);
   
   
    flushbuffer();
    clearbuffer();
    (int = 0; < 8; i++){
      //index[i] = index[i]==7?0:index[i]+1;
      index[i] = (index[i]+1)%8;
    }
    delay(animationspeed);
   
  }
}
.
.
.


also, tried add pushbutton manually cycle modes, isn't working either. think figured out issue this, correct me if i'm wrong. think issue "void loop" starts, jumps out "void planarspin", never comes loop read pushbutton. believe solution free 1 of hardware interrupt pins, , use pushbutton instead? (i moved output on pin 13 a5, rid of ghosting onboard led, why used pin 13 input.)

code: [select]
#include "cubeplex.h"

int color = red;
int count = 0;
int currentstatus = low;
int previousstatus = low;

void setup() {
  initcube();
 
  pinmode(13, input);

  serial.begin(9600);
 
  animationmax = 30;  // how many secconds until animation told progress
}
void loop() {
  currentstatus = digitalread(13);
 
  if (currentstatus == high && previousstatus == low){
    count = count + 1;
  };
 
  previousstatus = currentstatus;
 
  if(count == 0) {planarspin(); }
  if(count == 1) {fountian(); }
  if(count == 2) {trifade(); }
  if(count == 3) {shiftsquares(); }
  if(count == 4) {tunnel(); }
  if(count == 5) {chasethedot(); }
  if(count == 6) {planarflop3d(); }
  if(count == 7) {count =0; }

  serial.print("count = ");
  serial.println(count);
 
  //seqthedot();      //for testing 1 led @ time, , finding wiring errors
}

void planarspin() {
.
.
.

void shiftsquares() {
  int animationspeed = 100;
 
  int blx = 2; // blue x
  int bly = 0; // blue y
  int blz = 0; // blue z
 
  int rdx = 0; // red x
  int rdy = 2; // red y
  int rdz = 0; // red z
 
  int gnx = 0; // green x
  int gny = 0; // green y
  int gnz = 2; // green z
 
  int * mover = &blx;
  continuepattern = true;
 
  while(continuepattern) {
    switch (random(0,9)) {
      case 0: mover = &blx; break;
      case 1: mover = &bly; break;
      case 2: mover = &blz; break;
      case 3: mover = &rdx; break;
      case 4: mover = &rdy; break;
      case 5: mover = &rdz; break;
      case 6: mover = &gnx; break;
      case 7: mover = &gny; break;
      case 8: mover = &gnz; break;
    }
    *mover = (((*mover)+2)%4)-1;
    drawbox(blue ,abs(blx),abs(bly),abs(blz),abs(blx)+1,abs(bly)+1,abs(blz)+1);
    drawbox(red  ,abs(gnx),abs(gny),abs(gnz),abs(gnx)+1,abs(gny)+1,abs(gnz)+1);
    drawbox(green,abs(rdx),abs(rdy),abs(rdz),abs(rdx)+1,abs(rdy)+1,abs(rdz)+1);
    flushbuffer();
    clearbuffer();
    delay(animationspeed);
    *mover = (((*mover)+2)%4)-1;
    drawbox(blue ,abs(blx),abs(bly),abs(blz),abs(blx)+1,abs(bly)+1,abs(blz)+1);
    drawbox(red  ,abs(gnx),abs(gny),abs(gnz),abs(gnx)+1,abs(gny)+1,abs(gnz)+1);
    drawbox(green,abs(rdx),abs(rdy),abs(rdz),abs(rdx)+1,abs(rdy)+1,abs(rdz)+1);
    flushbuffer();
    clearbuffer();
    delay(animationspeed*2);
  }
}

void tunnel() {
  continuepattern = true;
  int animationspeed =100;
 
  int color1[]  = {r,r,r,r,b,b,b,b};
  int bright1[] = {2,4,6,8,2,4,6,8};
  int color2[]  = {b,b,b,b,r,r,r,r};
//int bright2[] = {6,4,2,0,6,4,2,0};
  int bright2[] = {8,6,4,2,8,6,4,2};
 
  int index[]   = {0,1,2,3,4,5,6,7};
 
  while (continuepattern) {
    drawboxwalls(color1[index[0]],bright1[index[0]],1,1,0,2,2,0);
    drawboxwalls(color2[index[0]],bright2[index[0]],1,1,0,2,2,0);
    drawboxwalls(color1[index[1]],bright1[index[1]],1,1,1,2,2,1);
    drawboxwalls(color2[index[1]],bright2[index[1]],1,1,1,2,2,1);
    drawboxwalls(color1[index[2]],bright1[index[2]],1,1,2,2,2,2);
    drawboxwalls(color2[index[2]],bright2[index[2]],1,1,2,2,2,2);
    drawboxwalls(color1[index[3]],bright1[index[3]],1,1,3,2,2,3);
    drawboxwalls(color2[index[3]],bright2[index[3]],1,1,3,2,2,3);
   
    drawboxwalls(color1[index[4]],bright1[index[4]],0,0,3,3,3,3);
    drawboxwalls(color2[index[4]],bright2[index[4]],0,0,3,3,3,3);
    drawboxwalls(color1[index[5]],bright1[index[5]],0,0,2,3,3,2);
    drawboxwalls(color2[index[5]],bright2[index[5]],0,0,2,3,3,2);
    drawboxwalls(color1[index[6]],bright1[index[6]],0,0,1,3,3,1);
    drawboxwalls(color2[index[6]],bright2[index[6]],0,0,1,3,3,1);
    drawboxwalls(color1[index[7]],bright1[index[7]],0,0,0,3,3,0);
    drawboxwalls(color2[index[7]],bright2[index[7]],0,0,0,3,3,0);
   
   
    flushbuffer();
    clearbuffer();
    (int = 0; < 8; i++){
      //index[i] = index[i]==7?0:index[i]+1;
      index[i] = (index[i]+1)%8;
    }
    delay(animationspeed);
   
  }
}
.
.
.


(some code has been ellipsed meet 9000 character post limit)

i think issue "void loop" starts, jumps out "void planarspin", never comes loop read pushbutton. believe solution free 1 of hardware interrupt pins, , use pushbutton instead?
it's rather unfortunate refer planarspin() have not included code :)

however presume similar shiftsquares() , assumption correct. see each of functions intended run continuously based on line
code: [select]
 while(continuepattern)
i suspect work want if remove line , corresponding } , change variable definitions within function static - this
code: [select]
void shiftsquares() {
  static int animationspeed = 100;
 
  static int blx = 2; // blue x


this not problem requires interrupt solution.

...r


Arduino Forum > Using Arduino > Programming Questions > Cycling Between Voids W/ a PushButton & Issues W/ Charliecube not Cycling


arduino

Comments

Popular posts from this blog

Error compiling for board Arduino/Genuino Uno.

Installation database is corrupt

esp8266 (nodemcu 0.9) client.write très lent ???