instead of keychars for steering i was wondering if someone could place working buttons inputs in their place.
#include <SoftwareSerial.h>
#define SABER_TX_PIN 13
#define SABER_RX_PIN 12
#define SABER_BAUDRATE 9600
#define SABER_MOTOR1_FULL_FORWARD 127
#define SABER_MOTOR1_FULL_REVERSE 1
#define SABER_MOTOR1_FULL_STOP 64
#define SABER_MOTOR2_FULL_FORWARD 255
#define SABER_MOTOR2_FULL_REVERSE 128
#define SABER_MOTOR2_FULL_STOP 192
#define SABER_ALL_STOP 0
SoftwareSerial SaberSerial = SoftwareSerial( SABER_RX_PIN, SABER_TX_PIN );
void initSabertooth( void )
{
pinMode( SABER_TX_PIN, OUTPUT );
SaberSerial.begin( SABER_BAUDRATE );
delay( 2000 );
setEngineSpeed( SABER_ALL_STOP );
}
void setEngineSpeed( signed char cNewMotorSpeed )
{
unsigned char cSpeedVal_Motor1 = 0;
unsigned char cSpeedVal_Motor2 = 0;
if( cNewMotorSpeed == 0 )
{
SaberSerial.print( 0, BYTE );
return;
}
if( cNewMotorSpeed >= 100 )
{
cSpeedVal_Motor1 = SABER_MOTOR1_FULL_FORWARD;
cSpeedVal_Motor2 = SABER_MOTOR2_FULL_FORWARD;
}
else if( cNewMotorSpeed <= -100 )
{
cSpeedVal_Motor1 = SABER_MOTOR1_FULL_REVERSE;
cSpeedVal_Motor2 = SABER_MOTOR2_FULL_REVERSE;
}
else
{
cSpeedVal_Motor1 = map( cNewMotorSpeed,
-100,
100,
SABER_MOTOR1_FULL_REVERSE,
SABER_MOTOR1_FULL_FORWARD );
cSpeedVal_Motor2 = map( cNewMotorSpeed,
-100,
100,
SABER_MOTOR2_FULL_REVERSE,
SABER_MOTOR2_FULL_FORWARD );
}
SaberSerial.print( cSpeedVal_Motor1, BYTE );
SaberSerial.print( cSpeedVal_Motor2, BYTE );
}
void setup( )
{
initSabertooth( );
}
//void control( )
//{
// // Full stop
// setEngineSpeed( 0 );
//
// // Half reverse
// setEngineSpeed( -50 );
//
// // Full reverse
// setEngineSpeed( -100 );
//
// // Half forward
// setEngineSpeed( 50 );
//
// // Full forward
// setEngineSpeed( 100 );
//}
void setEngineSpeedDir( signed char cNewMotorSpeedDir )
{
unsigned char cSpeedValDir_Motor1 = 0;
unsigned char cSpeedValDir_Motor2 = 0;
if( cNewMotorSpeedDir >= 100 )
{
cSpeedValDir_Motor1 = SABER_MOTOR1_FULL_FORWARD; // GO RIGHT
cSpeedValDir_Motor2 = SABER_MOTOR2_FULL_STOP;
}
else if( cNewMotorSpeedDir <= -100 )
{
cSpeedValDir_Motor1 = SABER_MOTOR1_FULL_STOP; // GO LEFT
cSpeedValDir_Motor2 = SABER_MOTOR2_FULL_FORWARD;
}
else
{
cSpeedValDir_Motor1 = map( cNewMotorSpeedDir,
-100,
100,
SABER_MOTOR1_FULL_STOP,
SABER_MOTOR1_FULL_FORWARD );
cSpeedValDir_Motor2 = map( cNewMotorSpeedDir,
-100,
100,
SABER_MOTOR2_FULL_FORWARD,
SABER_MOTOR2_FULL_STOP);
}
SaberSerial.print( cSpeedValDir_Motor1, BYTE );
SaberSerial.print( cSpeedValDir_Motor2, BYTE );
}
//void turn ( )
//{
// // Turn left
// setEngineSpeedDir( -100 );
//
// // Turn right
// setEngineSpeedDir( 100 );
//}
void loop()
{
setEngineSpeedDir( -100 );
delay( 5000 );
setEngineSpeed( 0 );
// signed char traverse;
// signed char negotiate;
//
// if(Serial.available()>0)
// {
// int data = Serial.read();
//
//// digitalWrite(buttonPin,LOW);
//
// switch(data)
// {
// case'w':traverse = 100;break; //full forward
// case's':traverse = -50;break; // half reverse
// case'q':traverse = 0;break; // Stop
// case'a':negotiate = -100;break; // left
// case'd':negotiate = 100;break; // right
// }
//
// setEngineSpeed( traverse );
// setEngineSpeedDir( negotiate );
// }
}
Moderator edit: code tags added.