Encase anyone else is trying to use the roboclaw with an arduino, I am working on translating all the packet serial commands written in basic format to the arduino format.
I'm not an expert at programming, so if you see mistakes let me know and I will correct them. This is what I have so far, I will update this when I finish.
Code:
#define address 128
/*
** 0 - Drive Forward M1
** Drive motor 1 forward. Valid data range is 0 - 127. A value of 127 = full speed forward, 64 = about
** half speed forward and 0 = full stop. Example with Robo Claw address set to 128:
**
** Serout P15, i19200, [128, 0, 127, (255 & 0X7F)] ;M1 full speed forward
*/
void drive_forward_m1(byte m1_speed_f)
{
byte serial_data[4];
serial_data[0]=address;
serial_data[1]=0;
serial_data[2]=m1_speed_f;
serial_data[3]=(serial_data[0] + serial_data[1] + serial_data[2] + serial_data[3]) & 0x7F;
serial.write(serial_data, sizeof(serial_data));
}
/*
** 1 - Drive Backwards M1
** Drive motor 1 backwards. Valid data range is 0 - 127. A value of 127 full speed backwards, 64 =
** about half speed backward and 0 = full stop. Example with Robo Claw address set to 128:
**
** Serout P15, i19200, [128, 1, 127, (256 & 0X7F)] ;M1 full speed backward
*/
void drive_backwards_m1(byte m1_speed_b)
{
byte serial_data[4];
serial_data[0]=address;
serial_data[1]=1;
serial_data[2]=m1_speed_b;
serial_data[3]=(serial_data[0] + serial_data[1] + serial_data[2] + serial_data[3]) & 0x7F;
serial.write(serial_data, sizeof(serial_data));
}
/*
** 2 - Set Minimum Main Voltage
** Sets main battery (B- / B+) minimum voltage level. If the battery voltages drops below the set
** voltage level Robo Claw will shut down. The value is cleared at start up and must set after each
** power up. The voltage is set in .2 volt increments. A value of 0 sets the minimum value allowed which
** is 6V. The valid data range is 0 - 120 (6V - 30V). The formula for calculating the voltage is: (Desired
** Volts - 6) x 5 = Value. Examples of valid values are 6V = 0, 8V = 10 and 11V = 25. Example with
** Robo Claw address set to 128:
**
** Serout P15, i19200, [128, 2, 25, (165 & 0X7F)]
*/
void min_voltage_value(byte min_battery_voltage)
{
byte serial_data[4];
serial_data[0]=address;
serial_data[1]=2;
serial_data[2]=min_battery_voltage;
serial_data[3]=(serial_data[0] + serial_data[1] + serial_data[2]) & 0x7F;
serial.write(serial_data, sizeof(serial_data));
}
/*
** 3 - Set Maximum Main Voltage
** Sets main battery (B- / B+) maximum voltage level. The valid data range is 0 - 154 (0V - 30V). If
** you are using a battery of any type you can ignore this setting. During regenerative breaking a back
** voltage is applied to charge the battery. When using an ATX type power supply if it senses anything
** over 16V it will shut down. By setting the maximum voltage level, Robo Claw before exceeding it will
** go into hard breaking mode until the voltage drops below the maximum value set. The formula for
** calculating the voltage is: Desired Volts x 5.12 = Value. Examples of valid values are 12V = 62, 16V
** = 82 and 24V = 123. Example with Robo Claw address set to 128:
**
** Serout P15, i19200, [128, 3, 82, (213 & 0X7F)]
*/
void max_voltage_value(byte max_battery_value)
{
byte serial_data[4];
serial_data[0]=address;
serial_data[1]=3;
serial_data[2]=min_battery_voltage;
serial_data[3]=(serial_data[0] + serial_data[1] + serial_data[2]) & 0x7F;
serial.write(serial_data, sizeof(serial_data));
}
/*
** 4 - Drive Forward M2
** Drive motor 2 forward. Valid data range is 0 - 127. A value of 127 = full speed forward, 64 = about
** half speed forward and 0 = full stop. Example with Robo Claw address set to 128:
**
** Serout P15, i19200, [128, 0, 127, (255 & 0X7F)] ;M2 full speed forward
*/
void drive_forward_m2(byte m2_speed_f)
{
byte serial_data[4];
serial_data[0]=address;
serial_data[1]=4;
serial_data[2]=m2_speed_f;
serial_data[3]=(serial_data[0] + serial_data[1] + serial_data[2] + serial_data[3]) & 0x7F;
serial.write(serial_data, sizeof(serial_data));
}
/*
** 5 - Drive Backwards M2
** Drive motor 2 backwards. Valid data range is 0 - 127. A value of 127 full speed backwards, 64 =
** about half speed backward and 0 = full stop. Example with Robo Claw address set to 128:
**
** Serout P15, i19200, [128, 1, 127, (256 & 0X7F)] ;M2 full speed backward
*/
void drive_backwards_m2(byte m2_speed_b)
{
byte serial_data[4];
serial_data[0]=address;
serial_data[1]=5;
serial_data[2]=m2_speed_b;
serial_data[3]=(serial_data[0] + serial_data[1] + serial_data[2] + serial_data[3]) & 0x7F;
serial.write(serial_data, sizeof(serial_data));
}
/*
** 6 - Drive M1 (7 Bit)
** Drive motor 1 forward and reverse. Valid data range is 0 - 127. A value of 0 = full speed reverse, 64 =
** stop and 127 = full speed forward. Example with Robo Claw address set to 128:
**
** Serout P15, i19200, [128, 6, 96, (230 & 0X7F)] ;M1 half speed forward
*/
void drive_m1(byte m1_speed)
{
byte serial_data[4];
serial_data[0]=address;
serial_data[1]=6;
serial_data[2]=m1_speed;
serial_data[3]=(serial_data[0] + serial_data[1] + serial_data[2] + serial_data[3]) & 0x7F;
serial.write(serial_data, sizeof(serial_data));
}
/*
** 7 - Drive M2 (7 Bit)
** Drive motor 2 forward and reverse. Valid data range is 0 - 127. A value of 0 = full speed reverse, 64 =
** stop and 127 = full speed forward. Example with Robo Claw address set to 128:
**
** Serout P15, i19200, [128, 7, 32, (167 & 0X7F)] ;M2 half speed reverse
*/
void drive_m2(byte m2_speed)
{
byte serial_data[4];
serial_data[0]=address;
serial_data[1]=7;
serial_data[2]=m2_speed_b;
serial_data[3]=(serial_data[0] + serial_data[1] + serial_data[2] + serial_data[3]) & 0x7F;
serial.write(serial_data, sizeof(serial_data));
}