package gorduino

import (
	"github.com/tarm/goserial"
	"github.com/yanzay/go-firmata"
)

type Gorduino struct {
	pins   map[byte]bool
	client *firmata.FirmataClient
	work   func()
}

func NewGorduino(port string, pins ...byte) (*Gorduino, error) {
	g := new(Gorduino)
	g.pins = make(map[byte]bool)

	c := &serial.Config{Name: port, Baud: 57600}
	conn, err := serial.OpenPort(c)
	if err != nil {
		return nil, err
	}

	g.client, _ = firmata.NewClient(conn)

	for _, pin := range pins {
		g.pins[pin] = false
		g.client.SetPinMode(pin, firmata.Output)
	}
	return g, nil
}

func (g *Gorduino) On(p byte) {
	g.client.DigitalWrite(uint(p), true)
}

func (g *Gorduino) Off(p byte) {
	g.client.DigitalWrite(uint(p), false)
}

func (g *Gorduino) Toggle(p byte) {
	g.pins[p] = !g.pins[p]
	g.client.DigitalWrite(uint(p), g.pins[p])
}

package gorduino

import (
	"github.com/kraman/go-firmata"
)

type Gorduino struct {
	pins   map[byte]bool
	client *firmata.FirmataClient
	work   func()
}

func NewGorduino(port string, pins ...byte) *Gorduino {
	g := new(Gorduino)
	g.pins = make(map[byte]bool)
	g.client, _ = firmata.NewClient(port, 57600)
	for _, pin := range pins {
		g.pins[pin] = false
		g.client.SetPinMode(pin, firmata.Output)
	}
	return g
}

func (g *Gorduino) On(p byte) {
	g.client.DigitalWrite(uint(p), true)
}

func (g *Gorduino) Off(p byte) {
	g.client.DigitalWrite(uint(p), false)
}

func (g *Gorduino) Toggle(p byte) {
	g.pins[p] = !g.pins[p]
	g.client.DigitalWrite(uint(p), g.pins[p])
}

--- 
+++ 
@@ -1,7 +1,8 @@
 package gorduino
 
 import (
-	"github.com/kraman/go-firmata"
+	"github.com/tarm/goserial"
+	"github.com/yanzay/go-firmata"
 )
 
 type Gorduino struct {
@@ -10,15 +11,23 @@
 	work   func()
 }
 
-func NewGorduino(port string, pins ...byte) *Gorduino {
+func NewGorduino(port string, pins ...byte) (*Gorduino, error) {
 	g := new(Gorduino)
 	g.pins = make(map[byte]bool)
-	g.client, _ = firmata.NewClient(port, 57600)
+
+	c := &serial.Config{Name: port, Baud: 57600}
+	conn, err := serial.OpenPort(c)
+	if err != nil {
+		return nil, err
+	}
+
+	g.client, _ = firmata.NewClient(conn)
+
 	for _, pin := range pins {
 		g.pins[pin] = false
 		g.client.SetPinMode(pin, firmata.Output)
 	}
-	return g
+	return g, nil
 }
 
 func (g *Gorduino) On(p byte) {
Add serial adaptor and error handling.
