/* **********************************************
| Ackermann Drive
| Example for using MOTOR and QUAD functions for
| driving a vehicle with ACKERMANN_DRIVE steering
|
| Thomas Braunl, 2004
| ---------------------------------------------------------------------------
*/ 

#include "eyebot.h"
MotorHandle motor;
QuadHandle  quad;
ServoHandle serv;

void Minit()
/* Initialize motors and encoders */
{ motor = MOTORInit(MOTOR_DRIVE);
  quad  = QUADInit (QUAD_DRIVE);
  serv  = SERVOInit(SERVO2);
  if(!motor || !quad || !serv) 
    LCDPrintf("Init Error!\n");
}
 
void Mterm()
/* Release motors and encoders */
{ MOTORRelease(motor);
  QUADRelease (quad);
  SERVORelease(serv);
}

void Mdrive(char* txt, int drive, int steer)
/* Print txt and drive motors and encoders for 1.5s */
{ LCDPrintf("%s\n", txt);
  MOTORDrive(motor, drive);
  SERVOSet  (serv,  steer);
  OSWait(150);
  LCDPrintf("Enc. %5d\n", QUADRead(quad));
}

 
int main ()
{ LCDPutString("Ackermann Steer\n");
  Minit();
	
  Mdrive("Forward",     60, 127);
  Mdrive("Backward",   -60, 127);
  Mdrive("Left Curve",  60,   0);
  Mdrive("Right Curve", 60, 255);
  Mdrive("Stop",         0,  0);

  Mterm();
  return 0;
}

