event driven hardware programming with firmata