Keyboard controlled robot

Hi, i purchased a robot shop rover and at the moment i have the basic wasd keyboard control code working very nicely. I also have a separate servo left and right manipulation code working nicely. I need to combine them for a presentation tommorow afternoon. Here are the two codes if someone could please mix them so that they both function together that would excellent. Thankyou
Code 1 Basic wasd control
/To control the rover, Copy and paste the code below into the Arduino software/
int E1 = 6; //M1 Speed Control
int E2 = 5; //M2 Speed Control
int M1 = 8; //M1 Direction Control
int M2 = 7; //M2 Direction Control

void setup(void)
int i;
pinMode(i, OUTPUT);

void loop(void)
while (Serial.available() < 1) {} // Wait until a character is received
char val =;
int leftspeed = 120; //255 is maximum speed
int rightspeed = 120;
switch(val) // Perform an action depending on the command
case ‘w’://Move Forward
case ‘W’:
forward (leftspeed,rightspeed);
case ‘s’://Move Backwards
case ‘S’:
reverse (leftspeed,rightspeed);
case ‘a’://Turn Left
case ‘A’:
left (leftspeed,rightspeed);
case ‘d’://Turn Right
case ‘D’:
right (leftspeed,rightspeed);

void stop(void) //Stop

void forward(char a,char b)
analogWrite (E1,a);
analogWrite (E2,b);

void reverse (char a,char b)
analogWrite (E1,a);
analogWrite (E2,b);

void left (char a,char b)
analogWrite (E1,a);
analogWrite (E2,b);

void right (char a,char b)
analogWrite (E1,a);
analogWrite (E2,b);

Code 2 servo control

  • NewSerialServo

  • Servo control from the Serial port
  • Alteration of the control interface to use < and > keys
  • to slew the servo horn left and right. Works best with
  • the Linux/Mac terminal “screen” program.
  • Created 10 December 2007
  • copyleft 2007 Brian D. Wendt
  • Adapted from code by Tom Igoe

/** Adjust these values for your servo and setup, if necessary **/
int servoPin = 2; // control pin for servo motor
int minPulse = 600; // minimum servo position
int maxPulse = 2400; // maximum servo position
int turnRate = 200; // servo turn rate increment (larger value, faster rate)
int refreshTime = 30; // time (ms) between pulses (50Hz)

/** The Arduino will calculate these values for you **/
int centerServo; // center servo position
int pulseWidth; // servo pulse width
int moveServo; // raw user input
long lastPulse = 0; // recorded time (ms) of the last pulse

void setup() {
pinMode(servoPin, OUTPUT); // Set servo pin as an output pin
centerServo = maxPulse - ((maxPulse - minPulse)/2);
pulseWidth = centerServo; // Give the servo a starting point (or it floats)
Serial.println(" Arduino Serial Servo Control");
Serial.println(“Press < or > to move, spacebar to center”);

void loop() {
// wait for serial input
if (Serial.available() > 0) {
// read the incoming byte:
moveServo =;

// ASCII ‘<’ is 44, ASCII ‘>’ is 46 (comma and period, really)
if (moveServo == 44) { pulseWidth = pulseWidth - turnRate; }
if (moveServo == 46) { pulseWidth = pulseWidth + turnRate; }
if (moveServo == 32) { pulseWidth = centerServo; }

// stop servo pulse at min and max
if (pulseWidth > maxPulse) { pulseWidth = maxPulse; }
if (pulseWidth < minPulse) { pulseWidth = minPulse; }

// print pulseWidth back to the Serial Monitor (uncomment to debug)
// Serial.print("Pulse Width: ");
// Serial.print(pulseWidth);
// Serial.println(“us”); // microseconds

// pulse the servo every 20 ms (refreshTime) with current pulseWidth
// this will hold the servo’s position if unchanged, or move it if changed
if (millis() - lastPulse >= refreshTime) {
digitalWrite(servoPin, HIGH); // start the pulse
delayMicroseconds(pulseWidth); // pulse width
digitalWrite(servoPin, LOW); // stop the pulse
lastPulse = millis(); // save the time of the last pulse

Here are the two codes if someone could please mix them so that they both function together that would excellent.

I could take the odd numbered lines from one file and the even numbered lines from the other file and put them in a new file. I could sort them alphabetically.

Of course, the result wouldn't compile. Nor, would it do what you want. Of course, that last statement is only a supposition, since you didn't bother saying what you want the final program to do.

If you were making the presentation to me, and couldn't explain the code, I'd give you a failing grade, even if the robot could dance the entire Ring Opera in 20 minutes.

My apoligies. And the presentation would be stated allot better than that trust me. What i need to be able to do is control the rover, front, back, left right like it already does in the wasd code. And control the servo to move the mount its upporting left and right like the servo coder can do on its own. I need to be able to do both at the same time.

I need to be able to do both at the same time.

So, specifically, what is the problem?

What have you tried, in terms of merging the code?

The problem is once I make an attempt at merging the two codes and I can only move te rover not the servo I have setup. Basically I've tried taking each section of servo code and putting it where I believed it belonged in the wasd control code. It all condenses however does not allow me to control servos and rover at same time.

I'm looking at the code right now, and it's soooooo difficult to read without the code tags.

Please, go and Modify that post. Select the code text, hit the # key above the :sweat_smile: smily so that the code gets

formatted like this.