string of push buttons on 1 dataline

I would like to be able to make a string of buttons and combine this with leds.

A lot of led strings use SPI or an SPI like protocol, needing sometimes only 1 dataline or 1 dataline + clock.

https://www.sparkfun.com/products/10312 (WS2801, 1 dataline, 1 clockline, ground, 5V)
http://www.insomnialighting.com/products/rgbsmdws2811.html (WS2801, 1 dataline, ground, 5V)

I would like to combine leds in this fashion with a push button and I would like to use a minimal amount of wire.

Any idea if there are any IC's that I can use to make a chain of push buttons (or capacitive touch sensors), with a protocol like SPI or I2C. Of course as inexpensive as possible (I don't want to chain one Arduino for each button). Although maybe an ATtiny85 could be a solution (Using an ATtiny85 as SPI Slave - Microcontrollers - Arduino Forum)

I tried to search a bit in the forum, but couldn't find anything. Maybe I'm searching with the wrong terms.

Any idea's are welcome. Thank you in advance.

How far are the different node away from each other? How many of them do you plan to use? What speeds do you need?

The LED stripes/strings use specialized chips that buffer the signal before sending to the next node, so you don't have a bus in it's near definition but a string of repeaters. So the solution to your problem depends on the questions above.

I should have put that information in my first post. A rough estimation:

  • About 30cm (12 inch) in between the nodes.
  • 20 till 40 nodes.
  • Led update frequency about 25/30 frames a second.
  • I think for buttons 10 times a second will be sufficient.

So we have to calculate with a total length of about 12m, far too much for either I2C and SPI.

Are the LEDs RGB or just one colored?

For RGB LEDs you don't have enough pins though on an ATtiny85 but an ATtiny84 should have enough of them. You still need an LED constant-current driver (to have predictable results) and you need to make the data lines a loop (the last node connects back to the controller) to be able to get the gathered data about the button states. The speed shouldn't be a problem in this dimension (a clock rate of about 30kHz should be enough.

Where can I find good information about maximum lengths supported? I found a good basic introduction, this doesn't mention lengths though.
http://www.byteparadigm.com/applications/introduction-to-i2c-and-spi-protocols/?/article/AA-00255/22/Introduction-to-SPI-and-IC-protocols.html

What do you suggest for protocol? I had a string of led lights that uses TTL levels for distances of 30cm between (20 lights). Or do I need something like RS485 (but that requires an extra IC)?

I would like to use RGB, that would be four pins. However if I use 5050 RGB leds with a WS2812 I can drive them as SPI, needing just one wire.

I found also the BlinkM minM that seems to use I2C. Maybe that's a solution. They have already a protocol and I could even run
Arduino on it. However they state also that long length are a problem).
http://thingm.com/fileadmin/thingm/downloads/BlinkM_datasheet.pdf
http://thingm.com/products/blinkm-minm.html
http://todbot.com/blog/2011/03/22/blinkm-smart-led-as-the-smallest-arduino/comment-page-2/#comment-84106
https://getsatisfaction.com/thingm/topics/length_of_i2c_bus (indeed some problem with longer lengths).

Where can I find good information about maximum lengths supported? I found a good basic introduction, this doesn't mention lengths though.

It depends on the capacity of the used wiring and the speed you want to drive on it but in practice it's about 0.5m (at least for I2C, I don't have experience with SPI buses longer than a few cm).

I would like to use RGB, that would be four pins. However if I use 5050 RGB leds with a WS2812 I can drive them as SPI, needing just one wire.

That's not really an SPI, it's more like a OneWire connection. That's a possibility that may lead to a ATtiny85 as the controller of the node.

What do you suggest for protocol? I had a string of led lights that uses TTL levels for distances of 30cm between (20 lights). Or do I need something like RS485 (but that requires an extra IC)?

What are the requirements? Does it have to be 2 wires or are 3 wires acceptable?
RS485 is a bus technology that may be good solution for you but you're right that it needs additional chips. It's probably the easiest solution if you want to use standards.

I'm interested in doing something similar. I really want to take and build on what has been done with blinkM. I saw in the BlinkM minim documentation that it's possible to use the i2c pin on as digital input, but I'm guessing this is something that's only applicable in a standalone mode and not daisy-chained network mode.

Perhaps the best choice is to rebuild blinkM but using the AtTiny84 which has additional pins. Luckily someone has provided support for the software i2c library.

Luckily someone has provided support for the software i2c library.

The Tiny (at least the ATtiny84) has support for I2C in hardware using the USI interface. There are libraries to use it as a slave and as a master with this. Why do you want to use a software emulation?