I've made post in different sections before concerning this project. As a Capstone Senior Design project my team is building an ROV......we are all Mechanical Engineers with no robotic experience making the programming difficult. My part of the project is to control this thing. We need to control 4 horizontal thrusters, two vertical thrusters, and a servo. I initially developed code that would take voltage analog inputs from the surface using joysticks and transmit this voltage to an arduino onboard the ROV via 50' of ethernet line. Noise may be a concern here so I am now working on serial communication using RS232. I was able to find several examples of serial communication on this website and I think I may now have functioning code, at least according to my testing with LEDs.
The code receives inputs from an Arduino on surface in a form like this: and then executes the commands. The commands are not developed yet, I am just turning on LEDs right now and I have commented out some things for testing purposes.
My question is this: What if anything could go wrong with this? How reliably will this behave?
I think I have provided everything yall need to help me, if not let me know. Thankyou!
const char SOP = '<';
const char EOP = '>';
enum { Case, Speed };
int whichNumber = Case;
int Casev, Speedv;
//-------------------------------------------------------------------
void setup ()
{
Serial.begin (9600);
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
pinMode (5, OUTPUT);
pinMode (6, OUTPUT);
pinMode (7, OUTPUT);
pinMode (8, OUTPUT);
pinMode (9, OUTPUT);
pinMode (10, OUTPUT);
pinMode (11, OUTPUT);
pinMode (12, OUTPUT);
pinMode (13, OUTPUT);
}
//-------------------------------------------------------------------
void processNumber (int n)
{
int x = n;
switch (whichNumber)
{
case Case:
Casev = x;
whichNumber = Speed;
//Serial.print (" Case = ");
break;
case Speed:
Speedv = x;
whichNumber = Case;
//Serial.print (" Speed = ");
break;
}
//Serial.print(x);
}
//-------------------------------------------------------------------
void processInput ()
{
static float receivedNumber = 0;
static boolean False = false;
byte c = Serial.read ();
switch (c)
{
case EOP:
if (False)
processNumber (- receivedNumber);
else
processNumber (receivedNumber);
// fall through to start a new number
case SOP:
receivedNumber = 0;
False = false;
break;
case '0' ... '9':
receivedNumber *= 10; // receivedNumber = recievedNumber*10
receivedNumber += c - '0'; //receivedNumber = recievedNumber + (c - '0')
break;
case '-':
False = true;
break;
}
}
//-------------------------------------------------------------------
void loop ()
{
if (Serial.available ())
processInput ();
int var1 = Casev;
int var2 = Speedv;
switch (var1)
{
//RIGHT
case 1:
analogWrite(3,var2);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(12, LOW);
// digitalWrite(13,LOW);
break;
//LEFT
case 2:
analogWrite(9,var2);
digitalWrite(3,LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(12, LOW);
// digitalWrite(13,LOW);
break;
//FWD
case 3:
analogWrite(10,var2);
digitalWrite(3,LOW);
digitalWrite(4, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(12, LOW);
// digitalWrite(13,LOW);
break;
//REV
case 4:
analogWrite(6,var2);
digitalWrite(3,LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(12, LOW);
//digitalWrite(13,LOW);
break;
//CW
case 5:
digitalWrite(7,HIGH);
digitalWrite(3,LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(12, LOW);
// digitalWrite(13,LOW);
break;
//CCW
case 6:
digitalWrite(8,HIGH);
//digitalWrite(3,LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(12, LOW);
//digitalWrite(13,LOW);
break;
//SURFACE
case 7:
digitalWrite(4,LOW);
// digitalWrite(3,LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(10, LOW);
digitalWrite(12, LOW);
//digitalWrite(13,LOW);
break;
//DIVE
case 8:
digitalWrite(5,var2);
//digitalWrite(3,LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(12, LOW);
digitalWrite(13,LOW);
break;
//PITCH
case 9:
analogWrite(12,var2);
//digitalWrite(3,LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
// digitalWrite(13, LOW);
break;
//SERVO
case 10:
digitalWrite (13,HIGH);
//digitalWrite(3,LOW);
//...digitalWrite(4, LOW);
// digitalWrite(5, LOW);
//digitalWrite(6, LOW);
//digitalWrite(7, LOW);
//digitalWrite(8, LOW);
//digitalWrite(9, LOW);
//digitalWrite(10, LOW);
//digitalWrite(12, LOW);
break;
}
}
//-------------------------------------------------------------------