func main() { sp, err := serial.OpenPort(&serial.Config{Name: "/dev/ttyACM0", Baud: 57600}) if err != nil { panic(err) } board := client.New() fmt.Println("connecting.....") err = board.Connect(sp) defer board.Disconnect() if err != nil { panic(err) } fmt.Println("firmware name:", board.FirmwareName) fmt.Println("firmata version:", board.ProtocolVersion) pin := 13 if err = board.SetPinMode(pin, client.Output); err != nil { panic(err) } level := 0 for { level ^= 1 if err := board.DigitalWrite(pin, level); err != nil { panic(err) } fmt.Println("level:", level) time.Sleep(500 * time.Millisecond) } }
// NewAdaptor returns a new Firmata Adaptor which optionally accepts: // // string: port the Adaptor uses to connect to a serial port with a baude rate of 57600 // io.ReadWriteCloser: connection the Adaptor uses to communication with the hardware // // If an io.ReadWriteCloser is not supplied, the Adaptor will open a connection // to a serial port with a baude rate of 57600. If an io.ReadWriteCloser // is supplied, then the Adaptor will use the provided io.ReadWriteCloser and use the // string port as a label to be displayed in the log and api. func NewAdaptor(args ...interface{}) *Adaptor { f := &Adaptor{ name: "Firmata", port: "", conn: nil, board: client.New(), openCommPort: func(port string) (io.ReadWriteCloser, error) { return serial.OpenPort(&serial.Config{Name: port, Baud: 57600}) }, Eventer: gobot.NewEventer(), } for _, arg := range args { switch arg.(type) { case string: f.port = arg.(string) case io.ReadWriteCloser: f.conn = arg.(io.ReadWriteCloser) } } return f }