実際のところ
Lチカ
/dev/tty.usbmodem1411にFirmata搭載済みArduinoが接続されている状態で、
13番のLチカしたい場合。
package main import ( "time" "gobot.io/x/gobot" "gobot.io/x/gobot/drivers/gpio" "gobot.io/x/gobot/platforms/firmata" ) func main() { //Firmataのアダプター。接続先なんかを決める。センサーや外部機器の登録もこちら //今回使ってるLEDドライバーは https://gobot.io/documentation/drivers/led/ firmataAdaptor := firmata.NewAdaptor("/dev/tty.usbmodem1411") led := gpio.NewLedDriver(firmataAdaptor, "13") //作業内容。今回はLチカ work := func() { gobot.Every(1*time.Second, func() { led.Toggle() }) } //接続先のインスタンスをつくる。アダプターやドライバー、作業内容を与える robot := gobot.NewRobot("bot", []gobot.Connection{firmataAdaptor}, []gobot.Device{led}, work, ) //実行。明示的に止めない限り、ループする robot.Start() }
……これだけだと冗長に感じますが、
センサーやサーボの種類が増えてくると効力を発揮します。
全部のArduino関数が使えるわけじゃない
公式によると、以下のような関数が用意されています。
func NewAdaptor(args ...interface{}) *Adaptor
func (f *Adaptor) AnalogRead(pin string) (val int, err error)
func (f *Adaptor) Connect() (err error)
func (f *Adaptor) DigitalRead(pin string) (val int, err error)
func (f *Adaptor) DigitalWrite(pin string, level byte) (err error)
func (f *Adaptor) Disconnect() (err error)
func (f *Adaptor) Finalize() (err error)
func (f *Adaptor) GetConnection(address int, bus int) (connection i2c.Connection, err error)
func (f *Adaptor) GetDefaultBus() int
func (f *Adaptor) Name() string
func (f *Adaptor) Port() string
func (f *Adaptor) PwmWrite(pin string, level byte) (err error)
func (f *Adaptor) ServoConfig(pin string, min, max int) error
func (f *Adaptor) ServoWrite(pin string, angle byte) (err error)
func (f *Adaptor) SetName(n string)
func (f *Adaptor) WriteSysex(data []byte) error
今回使うPWMはともかく、AnaligWriteが無いのはアプリによっては苦しいかも……