Add sphero docs
This commit is contained in:
parent
07b853ef2f
commit
bf7bc97c3a
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue