$>opkg install kmod-gpio-dev
$>cd /proc/diag
$>cd leds
$>echo 0 > power
This should cause your power light to start blinking. You can send 0 or 1 to any of these LEDs listed in LEDs.
$>opkg install kmod-gpio-dev
$>cd /proc/diag
$>cd leds
$>echo 0 > power
$>make kernel_menuconfig
$> make package/i2c-gpio-custom/{clean,compile,install} V=99 DEVELOPER=1
///
/// This command lets you control the forward and backward
/// motion of Create’s drive wheels independently. It takes
/// four data bytes, which are interpreted as two 16-bit signed
/// values using two’s complement. The first two bytes specify
/// the velocity of the right wheel in millimeters per second
/// (mm/s), with the high byte sent first. The next two bytes
/// specify the velocity of the left wheel, in the same format.
/// A positive velocity makes that wheel drive forward, while a
/// negative velocity makes it drive backward.
/// • Serial sequence: [145] [Right velocity high byte]
/// [Right velocity low byte] [Left velocity high byte]
/// [Left velocity low byte]
/// • Available in modes: Safe or Full
/// • Changes mode to: No Change
/// • Drive Direct data byte 1: Right wheel velocity
/// (-500 – 500 mm/s)
/// • Drive Direct data byte 1: Left wheel velocity
/// (-500 – 500 mm/s)
///
///
///
///
public bool DriveDirect(Int16 leftVelocity, Int16 rightVelocity)
{
this.ErrorText = "";
bool bSafe = this.Mode == OI_Mode.Safe;
bool bFull = this.Mode == OI_Mode.Full;
bool bError = (!bSafe) & (!bFull);
//Push back at the user
if (bError)
{
throw new RoombaException("Roomba must be in Safe or Full mode before running Calling the Drive Function: ");
}
//Sample from the SCI Spec:
//Serial sequence: [145] [Right velocity high byte][Right velocity low byte] [Left velocity high byte][Left velocity low byte]
//divide up leftVelocity & rightVelocity into 2 bytes each
byte leftVelocityHi = (byte)( leftVelocity >> 8);
byte leftVelocityLo = (byte)( leftVelocity & 255);
byte rightVelocityHi = (byte)(rightVelocity >> 8);
byte rightVelocityLo = (byte)(rightVelocity & 255);
bool bSuccess = false;
List lSend = new List();
lSend.Add(CreateOI.OpCode.DriveDirect);
lSend.Add(rightVelocityHi);
lSend.Add(rightVelocityLo);
lSend.Add(leftVelocityHi);
lSend.Add(leftVelocityLo);
string sDebugSend = "[" + lSend[0].ToString() + "][" + lSend[1].ToString() + "][" + lSend[2].ToString() + "][" + lSend[3].ToString() + "][" + lSend[4].ToString() + "]";
try
{
Log.This("Drive Action: " + sDebugSend, c_sCommonChassis, this.Log_OICommands);
this.IO.RtsEnable = false;
this.IO.Write(lSend.ToArray(), 0, lSend.Count);
//this.Macro.SetAction("DRIVE\t" + sDebugSend);
this.p_leftVelocity = leftVelocity;
this.p_rightVelocity = rightVelocity;
//this.p_rRadius = rAngle; //may need to add equivalent for this class
bSuccess = true;
Log.This("Drive Action Success " + bSuccess.ToString() + " leftVelocity: " + this.p_leftVelocity.ToString() + " rightVelocity: " + this.p_rightVelocity.ToString(), c_sCommonChassis, this.Log_OICommands);
}
catch (Exception ex)
{
Log.This("Drive Action Fail: " + ex.Message, c_sCommonChassis, this.Log_OICommands);
}
return bSuccess;
}