Carl became sufficiently complex a while back that I wrote up a little “health check” program in hopes of early detection of issues that might stress him. At that time, I didn’t include a check that his life maintaining “juicer” program was running. I was always going to get to it but didn’t.
While working on his new ArUco marker functions, he found himself in the middle of the room when “juicer” decided he needed to be on the dock, and announced “Manual Docking Requested”. I put him on the dock and continued working on my programs with the “inhibit_drive” flag on so as not to interfere with his charging.
After a while I started getting mad at Carl for not recognizing that he was on the dock and charging. I took him off the dock for a while and then put him back on to encourage his “charging detected” rule to fire but nothing seemed to work. Carl just would not recognize that I had helped him (and reward me by telling me “charging state change - charging”)
Not only did he not recognize that he was charging, but when the charge cycle changed he also didn’t recognize and announce “trickle charging, time to get off the dock”. This triggered a thought to check the output of the juicer program to see what was going on. Oops - juicer had left town on vacation leaving Carl to fend for himself.
So now Carl has a “juicerRunning()” check to shout “Warning - Juicer Not Running!” (if not during quiet time.)