I have 16 LED's that I would like to turn on in random sequence within 45 seconds. I want to turn them off in the same way. My first thought was to use 16 digital pins on my Arduino Uno but there are only 14 available and I think I can accomplish this using addressing on I2C.
Before I go further down this path I would like to know any other thoughts of how best to accomplish this? Thanks in advance for any help.
There are special purpose serially-addressed (shift register) LED drivers. The [u]MAX6979[/u] is a 16-LED version. These can be daisy-chained (like regular shift registers) so you can individually-address a virtually-unlimited number of LEDs using just 3 Arduino output pins. (The datasheet says it's a "4-wire" interface but in most applications you can simply ground the Output Enable line.)
This particular chip has built-in current limiting so you don't need resistors in series with the LEDs, and it can driver the LEDs with more current than a "regular" shift register.
I used use 6 similar 8 LED chips to control/address 48 individual LEDs. (I didn't use the 16-LED version because it's a stereo sound-activated effect with 24 LEDs on each side, and I used a separate Data connection for each side, with common Clock & Latch connections so I actually used 4 output pins.)