int column_pins[6] = { 12,11,10,9,8,7 }; int plate_pins[4] = { 6,4,3,5, }; void init_pins(void) { for(int i=0;i<6;i++){ pinMode(column_pins[i], OUTPUT); digitalWrite(column_pins[i], LOW); } for(int i=0;i<4;i++){ pinMode(plate_pins[i], OUTPUT); digitalWrite(plate_pins[i], LOW); } } void set_column(int old,int new_column) { digitalWrite(column_pins[old], LOW); delayMicroseconds(100); digitalWrite(column_pins[new_column], HIGH); } void set_plate(int value) { digitalWrite(plate_pins[3], (value & 0x8)); digitalWrite(plate_pins[2], (value & 0x4)); digitalWrite(plate_pins[1], (value & 0x2)); digitalWrite(plate_pins[0], (value & 0x1)); } long last_time; int plate; int column; void setup() { init_pins(); last_time = millis(); column = plate = 0; set_plate(plate); } void loop() { int new_column = column + 1; if(new_column > 5) new_column = 0; set_column(column,new_column); column = new_column; delayMicroseconds(900); if((millis() - last_time) > 1000){ plate++; if(plate > 9) plate = 0; set_plate(plate); last_time = millis(); } }