#define OUT_EN 3 #define SERIAL_DATA 4 #define LATCH 5 #define CLK 6 //#define LED_HC 7 byte anode[3]; byte red[3]; byte green[3]; byte blue[3]; /* Shifts a byte to output on rising clock edge. */ void shift_data_out(byte dataOut) { int i = 0; int state; digitalWrite(SERIAL_DATA, 0); digitalWrite(CLK, 0); for (i = 7; i >= 0; i--) { digitalWrite(CLK, 0); if (dataOut & (1 << i)) { state = 1; } else { state = 0; } digitalWrite(SERIAL_DATA, state); digitalWrite(CLK, 1); digitalWrite(SERIAL_DATA, 0); } digitalWrite(CLK, 0); } /* Turns on and off the matrix n times. */ void blink(int n) { digitalWrite(LATCH, 0); shift_data_out(0); shift_data_out(0); shift_data_out(0); shift_data_out(0); digitalWrite(LATCH, 1); delay(1000); for (int i = 0; i < n; i++) { digitalWrite(LATCH, 0); shift_data_out(255); shift_data_out(255); shift_data_out(255); shift_data_out(255); digitalWrite(LATCH, 1); delay(1000); digitalWrite(LATCH, 0); shift_data_out(0); shift_data_out(0); shift_data_out(0); shift_data_out(0); digitalWrite(LATCH, 1); delay(1000); } } void setup() { pinMode(LATCH, OUTPUT); pinMode(CLK, OUTPUT); pinMode(SERIAL_DATA, OUTPUT); //pinMode(LED_HC, OUTPUT); Serial.begin(9600); anode[0] = 0xFF; //11111111 anode[1] = 0xFE; //11111110 anode[2] = 0xFC; //11111100 red[0] = 0xFC; //11111100 red[1] = 0x7C; //01111100 red[2] = 0x3C; //00111100 green[0] = 0xFF; //11111111 green[1] = 0xFE; //11111110 green[2] = 0xFC; //11111100 blue[0] = 0xFC; //11111100 blue[1] = 0x7C; //01111100 blue[2] = 0x3C; //00111100 blink(3); } /* Shows predefined data in setup on matrix. */ void demo() { for (int i = 0; i < 3; i++) { digitalWrite(LATCH, 0); shift_data_out(blue[i]); shift_data_out(green[i]); shift_data_out(red[i]); shift_data_out(anode[i]); digitalWrite(LATCH, 1); delay(500); } } void serial() { byte input; while(Serial.available() > 0) { input = Serial.read(); if (input == '!') { digitalWrite(LATCH, 0); } else if (input == '#') { Serial.println(' '); digitalWrite(LATCH, 1); delay(500); } else { Serial.print(input); shift_data_out(input); } } } void send_data(byte* input) { int count = 0; while(1) { if (count % 4 == 0) { digitalWrite(LATCH, 0); } shift_data_out(input[count]); if (count % 4 == 3) { digitalWrite(LATCH, 1); delay(500); } count++; } } void loop() { byte data[4]; for (int i = 0; i < 10; i++) { for (int j = 0; j < 4; j++) { data[j] = B10101010; } send_data(data); } }