Robot Face Expression Engine / guide
An LED ring cannot draw an eyebrow, but it can still show attention, thought and mood. The engine maps its face channels onto the ring: two eye arcs near the top that narrow when the lids close and slide with the gaze, a mouth arc at the bottom that widens with speech and smiles, a slow sweep while it thinks and a faint breath while it listens.
FaceAdapters.ledRing(pose, 16, {color: "#3195F0"}) returns one RGB value per LED, LED 0 at twelve o'clock and running clockwise. Rotate the array if your ring starts somewhere else, then write it to your NeoPixel or FastLED buffer every frame. Because the ring follows the same performance as a screen face, blinks and nods arrive at the same moments.