Bye Bye Moore

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

GOBOT+Arduinoでアナログデータを返すモジュールから値をとってみる

これまで、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() {
                // X軸
		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)
                })

                // Y軸
		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() {
  //対象動作
)}