Add sphero docs

This commit is contained in:
Adrian Zankich 2014-09-28 20:32:31 -07:00
parent 07b853ef2f
commit bf7bc97c3a
2 changed files with 34 additions and 5 deletions

View File

@ -1,17 +1,20 @@
package sphero
import (
"io"
"github.com/hybridgroup/gobot"
"github.com/tarm/goserial"
"io"
)
// Represents a Connection to a Sphero
type SpheroAdaptor struct {
gobot.Adaptor
sp io.ReadWriteCloser
connect func(*SpheroAdaptor)
}
// NewSpheroAdaptor returns a new SpheroAdaptor given a name and port
func NewSpheroAdaptor(name string, port string) *SpheroAdaptor {
return &SpheroAdaptor{
Adaptor: *gobot.NewAdaptor(
@ -30,12 +33,16 @@ func NewSpheroAdaptor(name string, port string) *SpheroAdaptor {
}
}
// Connect initiates a connection to the Sphero. Returns true on successful connection.
func (a *SpheroAdaptor) Connect() bool {
a.connect(a)
a.SetConnected(true)
return true
}
// Reconnect attempts to reconnect to the Sphero. If the Sphero has an active connection
// it will first close that connection and then establish a new connection.
// Returns true on Successful reconnection
func (a *SpheroAdaptor) Reconnect() bool {
if a.Connected() == true {
a.Disconnect()
@ -43,12 +50,14 @@ func (a *SpheroAdaptor) Reconnect() bool {
return a.Connect()
}
// Disconnect terminates the connection to the Sphero. Returns true on successful disconnect.
func (a *SpheroAdaptor) Disconnect() bool {
a.sp.Close()
a.SetConnected(false)
return true
}
// Finalize finalizes the SpheroAdaptor
func (a *SpheroAdaptor) Finalize() bool {
return true
}

View File

@ -15,6 +15,7 @@ type packet struct {
checksum uint8
}
// Represents a Sphero
type SpheroDriver struct {
gobot.Driver
seq uint8
@ -37,6 +38,15 @@ type Collision struct {
Timestamp uint32
}
// NewSpheroDriver returns a new SpheroDriver given a SpheroAdaptor and name.
//
// Adds the following API Commands:
// "Roll" - See SpheroDriver.Roll
// "Stop" - See SpheroDriver.Stop
// "GetRGB" - See SpheroDriver.GetRGB
// "SetBackLED" - See SpheroDriver.SetBackLED
// "SetHeading" - See SpheroDriver.SetHeading
// "SetStabilization" - See SpheroDriver.SetStabilization
func NewSpheroDriver(a *SpheroAdaptor, name string) *SpheroDriver {
s := &SpheroDriver{
Driver: *gobot.NewDriver(
@ -97,10 +107,11 @@ func (s *SpheroDriver) adaptor() *SpheroAdaptor {
return s.Adaptor().(*SpheroAdaptor)
}
func (s *SpheroDriver) Init() bool {
return true
}
// Start starts the SpheroDriver and enables Collision Detection.
// Returns true on successful start.
//
// Emits the Events:
// "collision" SpheroDriver.Collision - On Collision Detected
func (s *SpheroDriver) Start() bool {
go func() {
for {
@ -155,6 +166,8 @@ func (s *SpheroDriver) Start() bool {
return true
}
// Halt halts the SpheroDriver and sends a SpheroDriver.Stop command to the Sphero.
// Returns true on successful halt.
func (s *SpheroDriver) Halt() bool {
gobot.Every(10*time.Millisecond, func() {
s.Stop()
@ -163,22 +176,27 @@ func (s *SpheroDriver) Halt() bool {
return true
}
// SetRGB sets the Sphero to the given r, g, and b values
func (s *SpheroDriver) SetRGB(r uint8, g uint8, b uint8) {
s.packetChannel <- s.craftPacket([]uint8{r, g, b, 0x01}, 0x02, 0x20)
}
// GetRGB returns the current r, g, b value of the Sphero
func (s *SpheroDriver) GetRGB() []uint8 {
return s.getSyncResponse(s.craftPacket([]uint8{}, 0x02, 0x22))
}
// SetBackLED sets the Sphero Back LED to the specified brightness
func (s *SpheroDriver) SetBackLED(level uint8) {
s.packetChannel <- s.craftPacket([]uint8{level}, 0x02, 0x21)
}
// SetHeading sets the heading of the Sphero
func (s *SpheroDriver) SetHeading(heading uint16) {
s.packetChannel <- s.craftPacket([]uint8{uint8(heading >> 8), uint8(heading & 0xFF)}, 0x02, 0x01)
}
// SetStabilization enables or disables the built-in auto stabilizing features of the Sphero
func (s *SpheroDriver) SetStabilization(on bool) {
b := uint8(0x01)
if on == false {
@ -187,10 +205,12 @@ func (s *SpheroDriver) SetStabilization(on bool) {
s.packetChannel <- s.craftPacket([]uint8{b}, 0x02, 0x02)
}
// Roll sends a roll command to the Sphero gives a speed and heading
func (s *SpheroDriver) Roll(speed uint8, heading uint16) {
s.packetChannel <- s.craftPacket([]uint8{speed, uint8(heading >> 8), uint8(heading & 0xFF), 0x01}, 0x02, 0x30)
}
// Stop sets the Sphero to a roll speed of 0
func (s *SpheroDriver) Stop() {
s.Roll(0, 0)
}