@startuml start partition init { :setup serial connection; :setup Bluetooth * init server background task * add hook to capture votes; :setup ballot * resolve nextVotingTime * clear votes; :print "ready"; } while (repeat every few millisecond) partition loop { :resolve currentTime; if (currentTime >= nextVotingTime?) equals (yes) then :count and print ballot; switch (voterCount?) case (< 5) :print "ALARM: Too few voters!"; kill case (<= 8) :resolve votesPositive; if (votesPositive < 5 ?) equals (yes) then :print "ALARM: Bad water quality!"; kill endif :setup ballot; case (> 8) :print "ALARM: Too many voters!"; kill endswitch endif } endwhile -[hidden]-> kill @enduml