seeing i robot - with all the file systems and complete code

Dependencies:   mbed SRF05 Servo CMPS03

Revision:
0:ee786e500a3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Serializer/Serializer.cpp	Fri Dec 17 18:27:33 2010 +0000
@@ -0,0 +1,330 @@
+/**
+ * Includes
+ */
+#include "Serializer.h"
+
+//Serial pcc(USBTX, USBRX);
+
+Serializer::Serializer() {
+    serial=new Serial(p28,p27);
+    serial->baud(BAUD);
+    Initialize();
+}
+
+int Serializer::Initialize() {
+    char c1=0;
+    DigitalOut led1(LED1);
+    DigitalOut led2(LED2);
+    DigitalOut led3(LED3);
+    DigitalOut led4(LED4);
+
+    led1=1;
+    if (serial->writeable())
+        serial->printf("fw\r");
+    wait(.25);
+    led2=1;
+    while (serial->readable()) {
+        c1=serial->getc();
+    }
+    if (c1!='>')
+        for (int i=0;i<5;i++) {
+            led1=led2=led3=led4=1;
+            wait(0.1);
+            led1=led2=led3=led4=0;
+            wait(0.1);
+        }
+    wait(.25);
+    led3=1;
+    wait(.25);
+    led4=1;
+ //   SetVPID(1,0,0,100);
+    wait(0.25);
+    led1=0;
+    wait(.25);
+    ClearCount();
+    led2=0;
+    wait(.25);
+    led3=0;
+    wait(.25);
+    led4=0;
+    _lPWM=_rPWM=0;
+    _isBusy=0;
+    _irqIsBusy=0;
+//    serial->attach(this, &Serializer::InterruptHandler);
+
+    return 0;
+}
+
+Serializer::~Serializer() {
+    delete serial;
+}
+
+void Serializer::Stop() {
+    if (serial->writeable())
+        serial->printf("stop\r");
+    leftSpeed=rightSpeed=0;
+//    pc.printf("Stop\r\n");
+}
+
+void Serializer::ClearCountLeft() {
+    if (serial->writeable())
+        serial->printf("clrenc 1\r");
+}
+void Serializer::ClearCountRight() {
+    if (serial->writeable())
+        serial->printf("clrenc 2\r");
+}
+
+void Serializer::ClearCount() {
+    if (serial->writeable())
+        serial->printf("clrenc 1 2\r");
+}
+
+void Serializer::SetSpeedLeft(int inPsec) {
+    if (inPsec>MAX_SPEED)inPsec=MAX_SPEED;
+    if (inPsec<-MAX_SPEED)inPsec=-MAX_SPEED;
+    if (serial->writeable())
+        serial->printf("mogo 1:%i\r", -inPsec);
+    leftSpeed=inPsec;
+}
+void Serializer::SetSpeedRight(int inPsec) {
+    if (inPsec>MAX_SPEED)inPsec=MAX_SPEED;
+    if (inPsec<-MAX_SPEED)inPsec=-MAX_SPEED;
+    if (serial->writeable())
+        serial->printf("mogo 2:%i\r", -inPsec);
+    rightSpeed=inPsec;
+}
+
+void Serializer::SetSpeed(int inPsec) {
+    if (inPsec>MAX_SPEED)inPsec=MAX_SPEED;
+    if (inPsec<-MAX_SPEED)inPsec=-MAX_SPEED;
+    inPsec*=-1;
+    if (serial->writeable())
+        serial->printf("mogo 1:%i 2:%i\r", inPsec-50, inPsec);
+    leftSpeed=rightSpeed=inPsec;
+}
+
+void Serializer::SetVPID(int p,int i,int d,int l) {
+    if (serial->writeable())
+        serial->printf("vpid %i:%i:%i:%i\r", p,i,d,l);
+}
+
+void Serializer::SetDPID(int p,int i,int d,int a) {
+    if (serial->writeable())
+        serial->printf("dpid %i:%i:%i:%i\r", p,i,d,a);
+}
+
+void Serializer::DiGoLeft(int dist,int inPsec) {
+/*    if(_isBusy)
+        return;
+    _isBusy=1;
+*/
+    if (serial->writeable())
+        serial->printf("digo 1:%i:%i\r",dist*PULSES_PER_INCH, inPsec);
+}
+void Serializer::DiGoRight(int dist,int inPsec) {
+/*     if(_isBusy)
+        return;
+    _isBusy=1;
+*/
+    if (serial->writeable())
+        serial->printf("digo 2:%i:%i\r",dist*PULSES_PER_INCH, inPsec);
+}
+void Serializer::DiGo(int dist,int inPsec) {
+/*    if(_isBusy)
+        return;
+    _isBusy=1;
+*/
+    if (serial->writeable()) {
+        serial->printf("digo 1:%i:%i 2:%i:%i\r", \
+                       -dist*PULSES_PER_INCH,   \
+                       inPsec,                  \
+                       -dist*PULSES_PER_INCH,   \
+                       inPsec);
+
+    }
+}
+
+int Serializer::IsBusy() {
+
+    if (_isBusy&&serial->writeable()) {
+        serial->printf("pids\r");
+        wait(0.01);
+    }
+    return _isBusy;
+}
+/*
+      char tmp=0;
+        if (_isBusy) {
+            if (serial->writeable()) {
+                serial->printf("pids\r");
+            }
+            wait(0.1);
+            while (serial->readable()) {
+                tmp=serial->getc();
+                pcc.putc(tmp);
+                if (tmp=='1')
+                    _isBusy=1;
+                else if (tmp=='0')
+                    _isBusy=0;
+            }
+        }
+        pcc.printf("IsBusy = %i\n\r",_isBusy);
+        return _isBusy;
+*/
+
+
+
+void Serializer::TurnLeft(int deg) {
+
+}
+
+void Serializer::TurnRight(int deg) {
+
+
+}
+void Serializer::PivetLeft(int deg) {
+
+    Stop();
+    deg=deg*PIVET_ADJUSTMENT;
+    wait(0.1);
+    if (serial->writeable())
+        serial->printf("digo 1:%i:%i 2:%i:%i\r",deg,PIVET_SPEED,-deg,PIVET_SPEED);
+
+}
+void Serializer::PivetRight(int deg) {
+    this->Stop();
+    deg=deg*PIVET_ADJUSTMENT;
+    wait(0.1);
+    if (serial->writeable())
+        serial->printf("digo 1:%i:%i 2:%i:%i\r",-deg,PIVET_SPEED,deg,PIVET_SPEED);
+
+}
+
+void Serializer::SetLeftPWM(int pwm) {
+    _lPWM=-pwm;
+    if (serial->writeable())
+        serial->printf("pwm 1:%i\r",_lPWM);
+
+}
+
+void Serializer::SetRightPWM(int pwm) {
+    _rPWM=-pwm;
+    if (serial->writeable())
+        serial->printf("pwm 2:%i\r",_rPWM);
+}
+
+void Serializer::SetPWM(int pwm){
+    _rPWM=-pwm;
+    _lPWM=-pwm;
+    if (serial->writeable())
+        serial->printf("pwm 1:%i 2:%i\r",_lPWM, _rPWM);      
+ }
+
+void Serializer::SetPWM(int lPwm, int rPwm){
+    _rPWM=-rPwm;
+    _lPWM=-lPwm;
+    if (serial->writeable())
+        serial->printf("pwm 1:%i 2:%i\r",_lPWM, _rPWM);      
+ }
+
+int Serializer::GetCountLeft() {
+    if (serial->writeable()) {
+        serial->printf("getenc 1\r");
+        //        pcc.printf("Sendreq\t");
+    }
+    wait(0.01);
+    int ret=0;
+    char c=0;
+    while (serial->readable()) {
+        //        pcc.printf("Reading");
+        c=serial->getc();
+        //        pcc.putc(c);
+        if (c>='0'&&c<='9') {
+            c-='0';
+            ret*=10;
+            ret+=c;
+        }
+    }
+    return ret;
+}
+
+int Serializer::GetCountRight() {
+    if (serial->writeable()) {
+        serial->printf("getenc 2\r");
+        //        pcc.printf("Sendreq\t");
+    }
+    wait(0.01);
+    int ret=0;
+    char c=0;
+    while (serial->readable()) {
+        //        pcc.printf("Reading");
+        c=serial->getc();
+        //        pcc.putc(c);
+        if (c>='0'&&c<='9') {
+            c-='0';
+            ret*=10;
+            ret+=c;
+        }
+    }
+    return ret;
+}
+int Serializer::GetCount() {
+    return GetCountLeft();
+}
+float Serializer::GetDistanceLeft() {
+    return float(GetCountLeft()*PULSE_DISTANCE);
+}
+float Serializer::GetDistanceRight() {
+    return float(GetCountRight()*PULSE_DISTANCE);
+}
+float Serializer::GetDistance() {
+    return float(GetCountLeft()*PULSE_DISTANCE);
+}
+
+
+//unused and untested
+int Serializer::GetReply() {
+    int returnValue=0;
+    char c=0;
+    char readyToReturn=0;
+    char ack=0;
+    char nack=0;
+    wait(0.0001);
+    while (serial->readable()) {
+        c=serial->getc();
+        if (readyToReturn)continue;
+        if (c=='N'&&nack==0)nack=1;
+        else nack=0;
+        if (c=='A'&&ack==0)ack++;
+        else ack=nack=0;
+        if (c=='C'&&ack==1)ack++;
+        else ack=nack=0;
+        if (c=='K'&&ack==2)ack++;
+        else ack=nack=0;
+        if (ack==3)
+            if (nack==1)
+                returnValue=1;
+            else
+                returnValue=0;
+        if (c=='>')readyToReturn=1;
+    }
+    return returnValue;
+}
+
+
+void Serializer::InterruptHandler() {
+    char c=0;
+    char bsy=_isBusy;
+    while (serial->readable()) {
+        c=serial->getc();
+        if (!_isBusy)
+            continue;
+
+        if (c=='1')
+            bsy=1;
+        else if (c=='0')
+            bsy=0;
+    }
+    if (_isBusy&&!bsy) _isBusy=0;
+}