code: func (g *Driver) AnalogRead(pin string) (value int, err error) {
  	var (
  		grovePin, grovePort Grove
  		analogCmd           byte
  	)
  	grovePin, grovePort, analogCmd, _, err = getGroveAddresses(pin)
  	if err != nil {
  		return value, err
  	}
  	err = g.SetGroveType(grovePort, CUSTOM)
  	if err != nil {
  		return value, err
  	}
  	time.Sleep(10 * time.Millisecond)
  	err = g.SetGroveMode(grovePin, GROVE_INPUT_ANALOG)
  	if err != nil {
  		return value, err
  	}
  	time.Sleep(10 * time.Millisecond)
  	response, err := g.readBytes(goPiGo3Address, analogCmd, 7)
  	if err != nil {
  		return value, err
  	}
  	if err := g.responseValid(response); err != nil {
  		return value, err
  	}
  	if err := g.valueValid(response); err != nil {
  		return value, err
  	}
  	highBytes := uint16(response[5])
  	lowBytes := uint16(response[6])
  	return int((highBytes<<8)&0xFF00) | int(lowBytes&0xFF), nil
  }
docs: // AnalogRead returns the analog value of the given pin.