int ROW_LT = 8; //PB0 int ROW_CLK = 9; //PB1 int ROW_IN = 10; //PB2 int COL_LT = 7; //PD7 int COL_CLK = 6; //PD6 int COL_IN = 5; //PD5 byte img[32]; bool updated; void rowSelect(short input) { byte firstHalf = (byte) ((input >> 8) & 255); byte secondHalf = (byte) (input & 255); shiftOut(COL_IN, COL_CLK, MSBFIRST, secondHalf); shiftOut(COL_IN, COL_CLK, MSBFIRST, firstHalf); } void colSelect(short input) { byte firstHalf = (byte) ((input >> 8) & 255); byte secondHalf = (byte) (input & 255); shiftOut(ROW_IN, ROW_CLK, MSBFIRST, secondHalf); shiftOut(ROW_IN, ROW_CLK, MSBFIRST, firstHalf); } void dispOff() { digitalWrite(ROW_LT, 0); digitalWrite(COL_LT, 0); } void dispOn() { digitalWrite(ROW_LT, 1); digitalWrite(COL_LT, 1); } void setup() { pinMode(ROW_LT, OUTPUT); pinMode(ROW_CLK, OUTPUT); pinMode(ROW_IN, OUTPUT); pinMode(COL_LT, OUTPUT); pinMode(COL_CLK, OUTPUT); pinMode(COL_IN, OUTPUT); dispOff(); rowSelect(0); colSelect(0); } uint64_t start_time; void loop() { start_time = millis(); while(millis() - start_time < 500){ for(int i = 0; i < 16; i++){ dispOff(); rowSelect(1 << i); if (i % 2){ colSelect(0b1010101010101010); } else{ colSelect(0b0101010101010101); } dispOn(); } } start_time = millis(); while(millis() - start_time < 500){ for(int i = 0; i < 16; i++){ dispOff(); rowSelect(1 << i); if (i % 2){ colSelect(0b0101010101010101); } else{ colSelect(0b1010101010101010); } dispOn(); } } }