One bit/pin can be more than enough if you can code some state behind it. On one embedded MCU job, I ended up with just one port pin free. I tied it to a piezo-oscillator and played short Morse strings through it; that was my printf. (It helps that I'm a ham, so I could head-copy those messages.)
Once I turned it over to production use, the techs found the difference in overall sound between "OK" and an error message useful enough that they kept it jumper-enabled. They did put tape over the oscillator's opening to cut down the amplitude, though.
Once I turned it over to production use, the techs found the difference in overall sound between "OK" and an error message useful enough that they kept it jumper-enabled. They did put tape over the oscillator's opening to cut down the amplitude, though.