One of the things I salvaged that I didn’t think would be that easy to get working was this HP control panel. It turns out someone else has already done the legwork to get it working for the most part. The original source I have for my specific control panel is here. That site has a really good description of these HP modules, but I can certainly say they are not all the same. It seems to me that the VFD controller (m66004) is SPI, there is also a shift out register (74hc595), and a shift in register (74hc165). All of these devices being SPI you can control them all with very few wires. The module I have has a VFD and 8 buttons, I have an m66004 and 74hc165 on my board. There is also another version that uses a 74hc595 to drive LEDs as an output. The arduino library doesn’t need to be modified to remove the LED driver code, but you just don’t have to use the LED output functions. The board I have also has 9 buttons, one more than the shift register can support. It appears that the 9th button is connected to the 2nd and 8th button inputs meaning that it cannot be detected independent of the other two and those other two cannot be detected together without incorrectly detecting that the 9th button has been pressed. The code is 0-indexed, so it’s buttons 1, 7, and 8 that are tied up and button 0 is the first LED. The demo code has everything in it to demonstrate how to use the functions. The part I find most interesting is how easy it is made to define custom characters. Here is my version of the code that does my best to detect the 9 buttons and doesn’t use the LED output commands that don’t apply to my board. The original arduino library hosted here may have more button functions implemented than mine (there are button isPressed, wasPressed, and wasReleased for people that want to poll constantly or just check periodically).
Rre-purposing an HP laserjet control panel