How do they work ?
Let's start by the children as they are the easiest to describe.
Currently they are put in sleep (all threads are asleep) and check every 2 seconds if they have received a radio message from the father. Indeed, the radio module nRF24L01, keeps the messages it receives, so they can be checked once in a while without loosing them. This way we can save a lot of power consumption by being awake less than 1% of the time when no one passes in front of the tribe.
Once they have received a wake up message from the father, they wake up and wait for a message containing the animation to display. This way the father can wake up all the spirits and then send them the same animation so that they will display it synchronously (otherwise they would have a delay). Once they have received this animation, they display it, then go back to sleep.
The behavior of the father is also rather simple, he sleeps as long as the PIR doesn't see any one, once it does (output to 3.3V) he wakes up and sends wake up messages to all the children, displays an animation, then sends the same animation to all the other spirits.
Checking if there is someone is currently doing by polling the value of the PIR (even though it's bad) in the next version of the code it will be done with interruption (which is better for real time application and energy consumption).
Very nice project. My kids grew up watching Princess Mononoke. I have tree spirits on my book shelf, a gift from them. Interconnected and reactive ones are a great idea!