code: func (p *PIRMotionDriver) Start() (err error) {
  	go func() {
  		for {
  			newValue, err := p.connection.DigitalRead(p.Pin())
  			if err != nil {
  				p.Publish(Error, err)
  			}
  			switch newValue {
  			case 1:
  				if !p.Active {
  					p.Active = true
  					p.Publish(MotionDetected, newValue)
  				}
  			case 0:
  				if p.Active {
  					p.Active = false
  					p.Publish(MotionStopped, newValue)
  				}
  			}
  
  			select {
  			case <-time.After(p.interval):
  			case <-p.halt:
  				return
  			}
  		}
  	}()
  	return
  }
docs: // Start starts the PIRMotionDriver and polls the state of the sensor at the given interval.
  //
  // Emits the Events:
  // 	MotionDetected - On motion detected
  //	MotionStopped int - On motion stopped
  //	Error error - On button error
  //
  // The PIRMotionDriver will send the MotionDetected event over and over,
  // just as long as motion is still being detected.
  // It will only send the MotionStopped event once, however, until
  // motion starts being detected again