#define LATCH 13 #define CLOCK 12 #define DATA 11 #define ACCELX 0 #define ACCELY 1 byte matrix[8]; int idx = 0; int nn; void setup() { pinMode(CLOCK, OUTPUT); pinMode(LATCH, OUTPUT); pinMode(DATA, OUTPUT); digitalWrite(CLOCK, LOW); digitalWrite(LATCH, LOW); digitalWrite(DATA, LOW); initLED(); clearLED(); clearMatrix(); nn=3; matrix[nn]=0x08; } #define DELAY 40 #define LIMIT 0x20 #define ULIMIT 0x200+LIMIT #define LLIMIT 0x200-LIMIT int pp; byte tn,temp; void loop() { pp=analogRead(ACCELX); if (pp>ULIMIT) { temp=matrix[nn]; matrix[nn]=0; if(++nn==8) nn=7;; matrix[nn]=temp; } if (ppULIMIT) { temp=matrix[nn]; matrix[nn]<<=1; if(matrix[nn]==0) matrix[nn]=temp; } if (pp>=1; if(matrix[nn]==0) matrix[nn]=temp; } refreshLED(); delay(DELAY); } /* * The source code below is quotation from * http://www.bryanchung.net/?p=177 */ void ledOut(int n) { digitalWrite(LATCH, LOW); shiftOut(DATA, CLOCK, MSBFIRST, (n>>8)); shiftOut(DATA, CLOCK, MSBFIRST, n); digitalWrite(LATCH, HIGH); delay(1); digitalWrite(LATCH, LOW); } void initLED() { ledOut(0x0B07); ledOut(0x0A07); ledOut(0x0900); ledOut(0x0C01); } void clearLED() { int n; for(n=1;n<9;n++){ ledOut((n<<8)+0x00); } } void clearMatrix(){ for(int n=0;n<8;matrix[n++]=0); } void refreshLED() { int n1, n2, n3; for (int i=0;i<8;i++) { n1 = i+1; n2 = matrix[i]; n3 = (n1<<8)+n2; ledOut(n3); } } void updateLED(int i, int j, boolean b) { int t = 1; int n = 0; int m = 0; if (j==0) { m = 7; } else { m = j-1; } n = t<