これまで、GOBOT+ArduinoでモーターやLEDをつかってみました。
とはいえ、必ずしもあったドライバーが用意されてるわけじゃありません。
アナログジョイスティックみたいなので操作したいときとか。
アナログピン用のドライバーとしてはAnalogSensorDriverというのがあるので、
これを活用します。
実際のところ
shuzo-kino.hateblo.jp
で使った" アナログジョイスティックDIP化キット[AE-JY-DIP(KIT)]"を動かす場合、
こんな感じになります。
package main
import (
"time"
"fmt"
"gobot.io/x/gobot"
"gobot.io/x/gobot/drivers/gpio"
"gobot.io/x/gobot/drivers/aio"
"gobot.io/x/gobot/platforms/firmata"
)
func main() {
firmataAdaptor := firmata.NewAdaptor("/dev/tty.usbmodem1421")
analogJoyStickX := aio.NewAnalogSensorDriver(firmataAdaptor, "0")
analogJoyStickY := aio.NewAnalogSensorDriver(firmataAdaptor, "1")
work := func() {
sensor.On(analogJoyStickX.Data, func(analogData interface{}) {
digitalData := uint8(
gobot.ToScale(gobot.FromScale(float64(analogData.(int)), 0, 1024), 0, 255),
)
fmt.Println("Analog Scale X", analogData)
fmt.Println("Digital Scale X", digitalData)
})
sensor.On(analogJoyStickY.Data, func(analogData interface{}) {
digitalData := uint8(
gobot.ToScale(gobot.FromScale(float64(analogData.(int)), 0, 1024), 0, 255),
)
fmt.Println("Analog Scale Y", analogData)
fmt.Println("Digital Scale Y", digitalData)
})
}
robot := gobot.NewRobot("AnalogJoyStick",
[]gobot.Connection{firmataAdaptor},
[]gobot.Device{analogJoyStickX,analogJoyStickY},
work,
)
robot.Start()
}
インターバル(例では100ミリ秒)を入れたい場合、対象の部分をgobot.Everyで囲ってやります
gobot.Every(100*time.Second, func() {
)}