/* * 7221 demo * */ int din = 4; int dout = 3; int clk = 2; int load = 5; byte incoming_register = 0x00; byte incoming_data_1 = 0x00; byte incoming_data_2 = 0x00; byte max7219_reg_noop = 0x00; byte max7219_reg_digit0 = 0x01; byte max7219_reg_digit1 = 0x02; byte max7219_reg_digit2 = 0x03; byte max7219_reg_digit3 = 0x04; byte max7219_reg_digit4 = 0x05; byte max7219_reg_digit5 = 0x06; byte max7219_reg_digit6 = 0x07; byte max7219_reg_digit7 = 0x08; byte max7219_reg_decodeMode = 0x09; byte max7219_reg_intensity = 0x0a; byte max7219_reg_scanLimit = 0x0b; byte max7219_reg_shutdown = 0x0c; byte max7219_reg_displayTest = 0x0f; void setup() { pinMode(din, OUTPUT); pinMode(clk, OUTPUT); pinMode(load, OUTPUT); pinMode(dout, INPUT); digitalWrite(din, LOW); digitalWrite(clk, LOW); digitalWrite(load, LOW); Serial.begin(57600); commit(max7219_reg_scanLimit, 0x07); commit(max7219_reg_decodeMode, 0x00); // using an led matrix (not digits) commit(max7219_reg_shutdown, 0x01); commit(max7219_reg_displayTest, 0x00); // no display test commit(max7219_reg_intensity, 0x0F); // the first 0x0f is the value you can set } void loop() { serial(); } void serial() { Serial.println("What Register?"); while (Serial.available() < 1) { delay(200); } incoming_register = Serial.read()-0x30; if(incoming_register > 0x09) { incoming_register -= 0x07; } Serial.println(incoming_register, HEX); Serial.println("What data?"); while(Serial.available() < 2) { delay(200); } incoming_data_1 = Serial.read()-0x30; if(incoming_data_1 > 0x09) { incoming_data_1 -= 0x07; } incoming_data_2 = Serial.read()-0x30; if(incoming_data_2 > 0x09) { incoming_data_2 -= 0x07; } byte incoming_data = incoming_data_1*16+incoming_data_2; Serial.println(incoming_data, HEX); if(incoming_register >= 0x00 && incoming_register < 0x10 && incoming_data >= 0x00 && incoming_data <= 0xFF) { Serial.println("Data is valid ... passing to chip"); commit(incoming_register, incoming_data); } Serial.println(); } void loadByte(byte data) { byte i = 8; byte mask; while(i > 0) { mask = 0x01 << (i - 1); digitalWrite(clk, LOW); if (data & mask){ digitalWrite(din, HIGH); } else { digitalWrite(din, LOW); } digitalWrite(clk, HIGH); i--; } } void commit(byte reg, byte data) { digitalWrite(load, LOW); loadByte(reg); loadByte(data); digitalWrite(load, HIGH); }