code: func (b *ButtonDriver) Start() (err error) {
  	state := b.DefaultState
  	go func() {
  		for {
  			newValue, err := b.connection.DigitalRead(b.Pin())
  			if err != nil {
  				b.Publish(Error, err)
  			} else if newValue != state && newValue != -1 {
  				state = newValue
  				b.update(newValue)
  			}
  			select {
  			case <-time.After(b.interval):
  			case <-b.halt:
  				return
  			}
  		}
  	}()
  	return
  }
docs: // Start starts the ButtonDriver and polls the state of the button at the given interval.
  //
  // Emits the Events:
  // 	Push int - On button push
  //	Release int - On button release
  //	Error error - On button error