Текст самой программы находится ниже. В принципе это все, что необходимо для  прошивки платы arduino:
/*
 * Version 1.2 2013
 * http://tutrobot.blogspot.com/
 * Робот на базе Arduino
*
*/
#define
MIN_speed     0
//Только выходы с PWM - 3,5,6,9,10,11
int PIN_ENB = 9;
int PIN_ENA
= 6;
int PIN_IN4
= 2;
int PIN_IN3
= 4;
int PIN_IN2
= 5;
int PIN_IN1
= 7;
int LED_PIN
= 13;
float
vel,ks,m1,m2;
float spl,
spr;
int quadr =
0;
int ver,
hor;
unsigned
char mode;
unsigned
char oldmode;
unsigned
char iSpeed;
unsigned
char rx_buf[8];
unsigned
char rxcnt;
boolean
binv = 0;  
boolean
rx_ok; 
// Правый мотор
void
RM_foward()
{
  digitalWrite(PIN_IN1, LOW);
  digitalWrite(PIN_IN2, HIGH);
}
void
RM_back()
{
  digitalWrite(PIN_IN1, HIGH);
  digitalWrite(PIN_IN2, LOW);
}
// Левый мотор
void
LM_foward()
{
  digitalWrite(PIN_IN4, LOW);
  digitalWrite(PIN_IN3, HIGH);
}
void
LM_back()
{
  digitalWrite(PIN_IN4, HIGH);
  digitalWrite(PIN_IN3, LOW);
}
void
setup()
{
  Serial.begin(9600);
  pinMode(PIN_ENB, OUTPUT); 
  pinMode(PIN_IN4, OUTPUT); 
  pinMode(PIN_IN3, OUTPUT); 
  pinMode(PIN_IN2, OUTPUT); 
  pinMode(PIN_IN1, OUTPUT); 
  pinMode(PIN_ENA, OUTPUT); 
  pinMode(LED_PIN, OUTPUT); 
  digitalWrite(PIN_IN1, LOW);
  digitalWrite(PIN_IN2, LOW);
  digitalWrite(PIN_IN4, LOW);
  digitalWrite(PIN_IN3, LOW);
  digitalWrite(PIN_ENA, LOW);
  digitalWrite(PIN_ENB, LOW);  
}
//Процедура задания скорости
void setspeed()
{
  float sf1; 
  //левый двигатель
  if (spl>0.0) LM_foward(); else
LM_back();  
  sf1=abs(spl);
  sf1=sf1*(255-MIN_speed)+MIN_speed;
  if (spl==0.0) sf1=0;
  iSpeed = int(sf1);
  analogWrite(PIN_ENA, iSpeed);
  //правый двигатель
  if (spr>0.0) RM_foward(); else
RM_back();  
  sf1=abs(spr);
  sf1=sf1*(255-MIN_speed)+MIN_speed;
  if (spr==0.0) sf1=0;
  iSpeed = int(sf1);
  analogWrite(PIN_ENB, iSpeed);
}
void loop()
{
  if (Serial.available() == 7) 
  {
    rxcnt=0; 
    digitalWrite(LED_PIN, binv); 
    binv=!binv;
   
    while (Serial.available() > 0) 
    {   
      rx_buf[rxcnt] = Serial.read(); 
      rxcnt++;
    }
    //Контроль
целостности пакета
    rx_ok=true;
    if (rx_buf[4]!=4) rx_ok=false;
    //прочистка буфера
    if (!rx_ok) 
    {
      int
avi = Serial.available();
      Serial.print("err");
      while (Serial.available() > 0) 
      {
        avi = Serial.read(); 
      }
    }
    
    if (rx_ok) 
    {
        hor = rx_buf[1];
        ver = rx_buf[2];
         
        quadr = 0;
        //Вычисление
рабочего квадранта
        float fhor=float(hor);
        float fver=float(ver);        
        
        if (fhor>128.0) 
        {
          fhor=256.0-fhor;
          quadr = quadr+1;
        } 
        if (fver>128.0) 
        {
          fver=256.0-fver;
          quadr = quadr+2;
        } 
        //нормализация
скоростей
       
fhor=fhor/127.0;
       
fver=fver/127.0;
        
        if
(fver>fhor)
        {
          m1 = fver;
          m2 =
(1.0-fhor)*fver;
          
        } else
        {
          m1 = fhor;
          m2 = (fver-1.0)*fhor;    
        }
        if
((fver<0.1)&&(fhor<0.1))
        {
          m1=0;
          m2=0;
        }
      
        //Приведение
знаков скоростей по квадрантам
        if (quadr==0)
        {
          spl=-m1;
          spr=-m2;
        }
        if (quadr==1)
        {
          spr=-m1;
          spl=-m2;
        }        
        if (quadr==2)
        {
          spr=m1;
          spl=m2;
        }
        if (quadr==3)
        {
          spl=m1;
          spr=m2;
        }
        
        setspeed();            
    }    
  
  }
  if (Serial.available() > 7)  
  {
      int avi = Serial.available();
      Serial.print("e");
      while (Serial.available() > 0) 
      {
        avi =
Serial.read(); 
      }
  }
}