Bye Bye Moore

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

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