Tiny Cat & Galactic Squid on MX340 LCD
I've verified that I now have full CircuitPython programmatic control over all input and output functionality available within the control panel of a Canon Pixma MX340 multi-function inkjet. The point of the exercise was to see if I could get this far. I would love to repurpose this control panel for a future project, but that is secondary. The perfect project would be one that needs a small LCD, numeric keypad, and a handful of task-dedicated buttons and LEDs. While I wait for such a project to come up, I could have some fun with a less serious project.

My friend Emily created Cat and Galactic Squid for me to use as demonstration content of my ESP32 composite video output library. I love this colorfully cheerful animation and have used it as test subject for several other projects. However, the MX340 LCD is monochrome and has only 196x34 pixels so I could not use the original cat & squid directly. I had to downscale it in an image editor, and manually fix up all the broken edges from such drastic down-sampling. And while I'm switching to monochrome, the cat is now modeled after one of Emily's current cats "Hobie" with a suitable black and white tuxedo pattern. Getting the handful of pixels to remotely resemble a cat required that I go online to search for "pixel art cat" for some guidance.

There weren't enough pixels to convey movement, so cat and squid would remain static. Neither were there enough pixels for that Saturn-like planet and a galaxy in the background, so the simplified version will only have vaguely circular dots of different diameters moving at different speeds for a parallax effect. Ideally I could use CircuitPython's sprite bitmap compositing engine displayio
to put all these elements together. Unfortunately I couldn't figure out how to make this LCD compatible so I wrote my own crude compositing routine.
I originally thought I'd write this as an entirely separate MX340 demo app, but I realized I could incorporate it into the existing key echo feedback test app: a "screen saver"! Monochrome LCDs don't really have burn-in issues that need saving, but it's an user experience paradigm I can leverage. I switch to this animation if there aren't any key presses for a while, and switch back as soon as a key is pressed. Integrating cat & squid was a nice bonus bit of CircuitPython practice.
https://github.com/Roger-random/canon_mx340/tree/main/control_panel_circuitpython