I realize this could be done much more simply by having a piston for each color, but the system I build has a piston tape with 16 different stained glasses in it in order for it to be more vertically compact. Is there anyway to make some sort of panel with 16 different buttons, and each button will trigger enough times to move to that buttons corresponding block in the tape? The only way I can conceptually even think about how to do this would be with some sort of redstone computer that remembers the position of the tape and subtracts that from the goal, and triggers the piston system that number of times. Or else it can trigger the system enough times to return to some position that's set to be 0, and then each button triggers the system however many times.
1. Reset the tape: Have all blocks in the tape transparent, except one - or alternatively one block in the tape is a cauldron with water. Solid blocks conduct signal, cauldron can be read by a comparator, so you can stop the tape at a specific point - when the cauldron or solid block reaches the 'reader'.
2. Store value 1-15 in an analog memory cell. Just drive a redstone line from the line of buttons to the cell's 'S', each button 1 block farther away, so signal is 1 weaker.
3. Apply signal strength 1 on the 'R' input, and the circuit will start fading (or just replace one of the blocks of the memory cell with redstone dust and it will fade as soon as it's powered up) . Observe the redstone dust of the cell with an observer, and it will generate a pulse every time the signal strength drops by 1. So if the cell stored signal level 1, you get 1 pulse. If it stored signal strength 15, you get 15 pulses.
You may need to use more comparators in the cell (a'la Fader Pulse Extender ) to slow it down enough for the tape to keep up if the pulses come too fast.
Caveat: powering the memory cell up will also generate a pulse. Either add a dummy block to the tape to skip on the first pulse, or use a 'drop first pulse in series' circuit after the observer.
I realize this could be done much more simply by having a piston for each color, but the system I build has a piston tape with 16 different stained glasses in it in order for it to be more vertically compact. Is there anyway to make some sort of panel with 16 different buttons, and each button will trigger enough times to move to that buttons corresponding block in the tape? The only way I can conceptually even think about how to do this would be with some sort of redstone computer that remembers the position of the tape and subtracts that from the goal, and triggers the piston system that number of times. Or else it can trigger the system enough times to return to some position that's set to be 0, and then each button triggers the system however many times.
1. Reset the tape: Have all blocks in the tape transparent, except one - or alternatively one block in the tape is a cauldron with water. Solid blocks conduct signal, cauldron can be read by a comparator, so you can stop the tape at a specific point - when the cauldron or solid block reaches the 'reader'.
2. Store value 1-15 in an analog memory cell. Just drive a redstone line from the line of buttons to the cell's 'S', each button 1 block farther away, so signal is 1 weaker.
3. Apply signal strength 1 on the 'R' input, and the circuit will start fading (or just replace one of the blocks of the memory cell with redstone dust and it will fade as soon as it's powered up) . Observe the redstone dust of the cell with an observer, and it will generate a pulse every time the signal strength drops by 1. So if the cell stored signal level 1, you get 1 pulse. If it stored signal strength 15, you get 15 pulses.
You may need to use more comparators in the cell (a'la Fader Pulse Extender ) to slow it down enough for the tape to keep up if the pulses come too fast.
Caveat: powering the memory cell up will also generate a pulse. Either add a dummy block to the tape to skip on the first pulse, or use a 'drop first pulse in series' circuit after the observer.