char addr_pin[16]; char data_pin[8]; const int clock_pin = 2; const int rw_pin = 3; void setup( ) { for( int i = 0; i < 16; i++ ) { addr_pin[i] = 52 - i*2; pinMode( addr_pin[i], INPUT ); } for( int i = 0; i < 8; i++ ) { data_pin[i] = 53 - i*2; pinMode( data_pin[i], INPUT ); } pinMode( clock_pin, INPUT ); pinMode( rw_pin, INPUT ); attachInterrupt( digitalPinToInterrupt( clock_pin ), onClk, RISING ); Serial.begin( 115200 ); } void onClk( ) { unsigned int addr = 0; for( int i = 0; i < 16; i++ ) { int b = ( digitalRead( addr_pin[i] ) == HIGH ) ? 1 : 0; Serial.print( b ); addr = ( addr << 1 ) + b; } Serial.print( " " ); unsigned int data = 0; for( int i = 0; i < 8; i++ ) { int b = ( digitalRead( data_pin[i] ) == HIGH ) ? 1 : 0; Serial.print( b ); data = ( data << 1 ) + b; } Serial.print( " " ); char rw = ( digitalRead( rw_pin ) == HIGH ) ? 'r' : 'w'; char output[32]; sprintf( output, "%04x %c %02x", addr, rw, data ); Serial.println( output ); } void loop( ) { }