#include #include int clockPin = 1; int resetPin = 12; int dataPin = 0; int MODE = 0; int NUM_MODES = 5; int STEP = 0; int POS = 0; int stopme; int RECV_PIN = 9; IRrecv irrecv(RECV_PIN); decode_results results; int DEL = 50; long lastTime = 0; int BUTTON_TIME = 200; void testit() { if (irrecv.decode(&results)) { int a = results.value; long currTime = millis(); if ((currTime - lastTime) > BUTTON_TIME) { int INC_AMT = 5; if (a == 1168) { if (DEL > INC_AMT) DEL = DEL - INC_AMT; } else if (a == 3216) { if (DEL < 200) DEL = DEL + INC_AMT; } else if (a == 2704) { if (stopme == 1) stopme = 0; else { setIt(0); stopme = 1; } } else if (a == 0x90) { MODE++; MODE %= NUM_MODES; } else if (a == 0x890) { MODE = MODE - 1 + NUM_MODES; MODE %= NUM_MODES; } } irrecv.resume(); // Receive the next value lastTime = currTime; } } void bits(int reg, int g) { testit(); int b = g; int a[8]; int c; for(c = 0; c < 8; c++) { a[c] = b & 1; b = b >> 1; } int temp; temp = a[7]; a[7] = a[6]; a[6] = temp; temp = a[0]; a[0] = a[3]; a[3] = temp; temp = a[1]; a[1] = a[2]; a[2] = temp; for(c = 0; c < 8; c++) { sendBit(reg, a[c]); } } void sendBit(int reg, int b) { digitalWrite(reg * 2, b); digitalWrite(reg * 2 + 1, HIGH); digitalWrite(reg * 2 + 1, LOW); } void setup() { pinMode(resetPin, OUTPUT); pinMode(0, OUTPUT); pinMode(1, OUTPUT); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(12, OUTPUT); digitalWrite(1, LOW); digitalWrite(3, LOW); digitalWrite(5, LOW); irrecv.enableIRIn(); // Start the receiver digitalWrite(resetPin, LOW); digitalWrite(resetPin, HIGH); bits(0, 0); bits(1, 0); bits(2, 0); } void setIt(unsigned long a) { unsigned long b = a; int shift0 = b & 0xFF; int shift1 = (b >> 8) & 0xFF; int shift2 = (b >> 16) & 0xFF; bits(0,shift0); bits(1,shift2); bits(2,shift1); } void drawIt() { int crap = 0; int c; if (MODE == 0) { unsigned long d = 0x800000UL; for(c = 0; c < 24; c++) { setIt(d); if (d & 0x01) crap = 1; d = d >> 1; if (crap) d = d | 0x800000UL; delay(DEL); } } else if (MODE == 1) { unsigned long d = 0x100100UL; for(c = 0; c < 12; c++) { setIt(d); if (d & 0x01) crap = 1; d = d >> 1; if (crap) d = d | 0x800000UL; delay(DEL); } } else if (MODE == 2) { unsigned long d = 0x102040UL; for(c = 0; c < 8; c++) { setIt(d); if (d & 0x01) crap = 1; d = d >> 1; if (crap) d = d | 0x800000UL; delay(DEL); } } else if (MODE == 3) { unsigned long d = 0x820820UL; for(c = 0; c < 6; c++) { setIt(d); if (d & 0x01) crap = 1; d = d >> 1; if (crap) d = d | 0x800000UL; delay(DEL); } } else if (MODE == 4) { unsigned long d; int q1 = 1; for (c = 0; c < 6; c++) { bits(0, q1); bits(1, q1); bits(2, q1); q1 = q1 << 1; delay(DEL); } for (c = 0; c < 6; c++) { bits(0, q1); bits(1, q1); bits(2, q1); q1 = q1 >> 1; delay(DEL); } } } void loop() { testit(); if (!stopme) drawIt(); }