Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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