Well, this project started out of necessity. I'm taking an integrated circuit logic course at my school. The lab projects aren't difficult but I wanted to be able to build the circuits and check the output at home without the effort of attaching switches and LEDs and making sure every thing works on the "checking" side as well as debugging my homework (circuits). I wanted a program on the Arduino Uno R3 that could set input and read the output via the software. The reason being I could write an algorithm that would check a truth table for a given number of inputs and outputs.

Well, I wrote a program that does all of that and so far I have 4 outputs and 2 inputs. I was thinking that I'd like to expand this project a bit and make it a stand alone device. Perhaps using a keypad to toggle the states of the outputs and run the algorithms. I'd like to tie the out puts to an LCD display.

All of that seems challenging but doable. My question is what way is the best way to handle all of the information. I need to receive keypad input (which I can use a keypad breakout board or an old ps/2 keypad I have) and then set a logic level on the output channels and read digital data on the input channels.

My ideas were:

1) Have an SR flip flop tied to a single input channel. The outputs connect to a series of and gates and effectively control which way the signals can propagate (between input and output). The "inputs" or, the logic states that I want to "analyse" are then stored in flip flops. Once the routine in the software is done (a certain amount of time) the signal direction is reversed and the flip-flop data is brought in. Finally, the data is displayed on an LCD screen.

2) My other idea was to use a demux IC to get the data from the keypad and then a multiplexor to set flipflops for the "output" channels. The inputs would be read through a shift register.

So, really, the question comes to: What do you guys think is an easier way of handling this? I do apologize for rambling and I hope I made sense through all of it.