void calibrateSensors(){ stop(); lightSequence(10); unsigned short forwardWallDistance; while(true){ forwardWallDistance = getLeftValue(); lightSequence(2); if(forwardWallDistance != 0){ LEFT_LED_OFF; } } }
void LedCube::drawBuffer(unsigned int wait) { byte seq[num*2]; byte n = 0; for(byte lv=0; lv<levels; lv++) { for(byte col=0; col<cols; col++) { if(buffer[lv][col]) { //Serial.print(buffer[r][c],DEC); Serial.print(': '); //Serial.print(r,DEC); Serial.print(','); Serial.print(c,DEC); Serial.print(' '); seq[n] = lv; seq[n+1] = col; n += 2; } } } // Serial.print('('); Serial.println(num,DEC); Serial.print(')'); enableBuffer(false); lightSequence(seq, sizeof(seq), wait); enableBuffer(); }
void LedCube::lightColumn(byte col, unsigned int wait) { if(col && col<=cols) { byte seq[] = {0,col-1,1,col-1,2,col-1}; lightSequence(seq,sizeof(seq),wait); } }
void LedCube::lightFrames(cubeFrame* frames[], unsigned int length) { for(byte f=0; f<length; f++) { lightSequence(frames[f]->sequence, frames[f]->size, frames[f]->delay); // reclaim memory allocated in createFrame to prevent a leak destroyFrame(frames[f]); } }
void LedCube::lightRow(byte r, byte level, unsigned int wait) { if(r && level && r<=cols*2 && level<=levels) { byte start = r<=levels ? r-1 : (r - levels - 1) * levels; byte inc = r<=levels ? levels : 1; byte seq[] = {level-1,start, level-1,start+inc, level-1,start+inc*2}; lightSequence(seq, sizeof(seq), wait); } }
void LedCube::lightLevel(byte lv, unsigned int delay) { if(lv && lv<=levels) { byte seq[cols*2]; for(byte c=0, i=0; c<cols; c++, i+=2) { seq[i] = lv-1; seq[i+1] = c; } lightSequence(seq,sizeof(seq),delay); } }
void LedCube::lightPlane(byte r, unsigned int wait) { if(r && r<=cols*2) { byte start = r<=levels ? r-1 : (r - levels - 1) * levels; byte inc = r<=levels ? levels : 1; byte seq[cols*2]; byte index = 0; for(byte level=0; level<levels; level++) { for(byte i=0; i<3; i++) { seq[index] = level; seq[index+1] = start + inc*i; index += 2; } } lightSequence(seq, sizeof(seq), wait); } }
void LedCube::lightPerimeter(byte level, byte rotations, unsigned int wait) { byte seq[] = {level,0,level,1,level,2,level,5,level,8,level,7,level,6,level,3}; lightSequence(seq, sizeof(seq), rotations, wait); }