Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

GOBOT+Arduinoでサーボモーターを動かしてみる その1:Lチカまで

実際のところ

環境構築

shuzo-kino.hateblo.jp

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が無いのはアプリによっては苦しいかも……