1am
Serializer.cpp@3:94b650d0861d, 2010-12-16 (annotated)
- Committer:
- sowmy87
- Date:
- Thu Dec 16 09:25:25 2010 +0000
- Revision:
- 3:94b650d0861d
- Parent:
- 2:9e0d3f159ec3
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sowmy87 | 0:d2dcb47dc8e9 | 1 | /** |
sowmy87 | 0:d2dcb47dc8e9 | 2 | * Includes |
sowmy87 | 0:d2dcb47dc8e9 | 3 | */ |
sowmy87 | 0:d2dcb47dc8e9 | 4 | #include "Serializer.h" |
sowmy87 | 0:d2dcb47dc8e9 | 5 | |
sowmy87 | 3:94b650d0861d | 6 | //Serial pcc(USBTX, USBRX); |
sowmy87 | 0:d2dcb47dc8e9 | 7 | |
sowmy87 | 0:d2dcb47dc8e9 | 8 | Serializer::Serializer() { |
sowmy87 | 0:d2dcb47dc8e9 | 9 | serial=new Serial(p28,p27); |
sowmy87 | 0:d2dcb47dc8e9 | 10 | serial->baud(BAUD); |
sowmy87 | 0:d2dcb47dc8e9 | 11 | Initialize(); |
sowmy87 | 0:d2dcb47dc8e9 | 12 | } |
sowmy87 | 0:d2dcb47dc8e9 | 13 | |
sowmy87 | 0:d2dcb47dc8e9 | 14 | int Serializer::Initialize() { |
sowmy87 | 0:d2dcb47dc8e9 | 15 | char c1=0; |
sowmy87 | 0:d2dcb47dc8e9 | 16 | DigitalOut led1(LED1); |
sowmy87 | 0:d2dcb47dc8e9 | 17 | DigitalOut led2(LED2); |
sowmy87 | 0:d2dcb47dc8e9 | 18 | DigitalOut led3(LED3); |
sowmy87 | 0:d2dcb47dc8e9 | 19 | DigitalOut led4(LED4); |
sowmy87 | 0:d2dcb47dc8e9 | 20 | |
sowmy87 | 0:d2dcb47dc8e9 | 21 | led1=1; |
sowmy87 | 0:d2dcb47dc8e9 | 22 | if (serial->writeable()) |
sowmy87 | 0:d2dcb47dc8e9 | 23 | serial->printf("fw\r"); |
sowmy87 | 0:d2dcb47dc8e9 | 24 | wait(.25); |
sowmy87 | 0:d2dcb47dc8e9 | 25 | led2=1; |
sowmy87 | 0:d2dcb47dc8e9 | 26 | while (serial->readable()) { |
sowmy87 | 0:d2dcb47dc8e9 | 27 | c1=serial->getc(); |
sowmy87 | 0:d2dcb47dc8e9 | 28 | } |
sowmy87 | 0:d2dcb47dc8e9 | 29 | if (c1!='>') |
sowmy87 | 1:9a7e6c978adb | 30 | for (int i=0;i<5;i++) { |
sowmy87 | 0:d2dcb47dc8e9 | 31 | led1=led2=led3=led4=1; |
sowmy87 | 3:94b650d0861d | 32 | wait(0.1); |
sowmy87 | 0:d2dcb47dc8e9 | 33 | led1=led2=led3=led4=0; |
sowmy87 | 3:94b650d0861d | 34 | wait(0.1); |
sowmy87 | 0:d2dcb47dc8e9 | 35 | } |
sowmy87 | 0:d2dcb47dc8e9 | 36 | wait(.25); |
sowmy87 | 0:d2dcb47dc8e9 | 37 | led3=1; |
sowmy87 | 0:d2dcb47dc8e9 | 38 | wait(.25); |
sowmy87 | 0:d2dcb47dc8e9 | 39 | led4=1; |
sowmy87 | 3:94b650d0861d | 40 | SetVPID(1,0,0,100); |
sowmy87 | 0:d2dcb47dc8e9 | 41 | wait(0.25); |
sowmy87 | 0:d2dcb47dc8e9 | 42 | led1=0; |
sowmy87 | 0:d2dcb47dc8e9 | 43 | wait(.25); |
sowmy87 | 0:d2dcb47dc8e9 | 44 | ClearCount(); |
sowmy87 | 0:d2dcb47dc8e9 | 45 | led2=0; |
sowmy87 | 0:d2dcb47dc8e9 | 46 | wait(.25); |
sowmy87 | 0:d2dcb47dc8e9 | 47 | led3=0; |
sowmy87 | 0:d2dcb47dc8e9 | 48 | wait(.25); |
sowmy87 | 0:d2dcb47dc8e9 | 49 | led4=0; |
sowmy87 | 0:d2dcb47dc8e9 | 50 | _lPWM=_rPWM=0; |
sowmy87 | 1:9a7e6c978adb | 51 | _isBusy=0; |
sowmy87 | 1:9a7e6c978adb | 52 | _irqIsBusy=0; |
sowmy87 | 0:d2dcb47dc8e9 | 53 | // serial->attach(this, &Serializer::InterruptHandler); |
sowmy87 | 0:d2dcb47dc8e9 | 54 | |
sowmy87 | 0:d2dcb47dc8e9 | 55 | return 0; |
sowmy87 | 0:d2dcb47dc8e9 | 56 | } |
sowmy87 | 0:d2dcb47dc8e9 | 57 | |
sowmy87 | 0:d2dcb47dc8e9 | 58 | Serializer::~Serializer() { |
sowmy87 | 0:d2dcb47dc8e9 | 59 | delete serial; |
sowmy87 | 0:d2dcb47dc8e9 | 60 | } |
sowmy87 | 0:d2dcb47dc8e9 | 61 | |
sowmy87 | 0:d2dcb47dc8e9 | 62 | void Serializer::Stop() { |
sowmy87 | 0:d2dcb47dc8e9 | 63 | if (serial->writeable()) |
sowmy87 | 0:d2dcb47dc8e9 | 64 | serial->printf("stop\r"); |
sowmy87 | 0:d2dcb47dc8e9 | 65 | leftSpeed=rightSpeed=0; |
sowmy87 | 0:d2dcb47dc8e9 | 66 | // pc.printf("Stop\r\n"); |
sowmy87 | 0:d2dcb47dc8e9 | 67 | } |
sowmy87 | 0:d2dcb47dc8e9 | 68 | |
sowmy87 | 0:d2dcb47dc8e9 | 69 | void Serializer::ClearCountLeft() { |
sowmy87 | 0:d2dcb47dc8e9 | 70 | if (serial->writeable()) |
sowmy87 | 0:d2dcb47dc8e9 | 71 | serial->printf("clrenc 1\r"); |
sowmy87 | 0:d2dcb47dc8e9 | 72 | } |
sowmy87 | 0:d2dcb47dc8e9 | 73 | void Serializer::ClearCountRight() { |
sowmy87 | 0:d2dcb47dc8e9 | 74 | if (serial->writeable()) |
sowmy87 | 0:d2dcb47dc8e9 | 75 | serial->printf("clrenc 2\r"); |
sowmy87 | 0:d2dcb47dc8e9 | 76 | } |
sowmy87 | 0:d2dcb47dc8e9 | 77 | |
sowmy87 | 0:d2dcb47dc8e9 | 78 | void Serializer::ClearCount() { |
sowmy87 | 0:d2dcb47dc8e9 | 79 | if (serial->writeable()) |
sowmy87 | 0:d2dcb47dc8e9 | 80 | serial->printf("clrenc 1 2\r"); |
sowmy87 | 0:d2dcb47dc8e9 | 81 | } |
sowmy87 | 0:d2dcb47dc8e9 | 82 | |
sowmy87 | 0:d2dcb47dc8e9 | 83 | void Serializer::SetSpeedLeft(int inPsec) { |
sowmy87 | 0:d2dcb47dc8e9 | 84 | if (inPsec>MAX_SPEED)inPsec=MAX_SPEED; |
sowmy87 | 0:d2dcb47dc8e9 | 85 | if (inPsec<-MAX_SPEED)inPsec=-MAX_SPEED; |
sowmy87 | 0:d2dcb47dc8e9 | 86 | if (serial->writeable()) |
sowmy87 | 0:d2dcb47dc8e9 | 87 | serial->printf("mogo 1:%i\r", -inPsec); |
sowmy87 | 0:d2dcb47dc8e9 | 88 | leftSpeed=inPsec; |
sowmy87 | 0:d2dcb47dc8e9 | 89 | } |
sowmy87 | 0:d2dcb47dc8e9 | 90 | void Serializer::SetSpeedRight(int inPsec) { |
sowmy87 | 0:d2dcb47dc8e9 | 91 | if (inPsec>MAX_SPEED)inPsec=MAX_SPEED; |
sowmy87 | 0:d2dcb47dc8e9 | 92 | if (inPsec<-MAX_SPEED)inPsec=-MAX_SPEED; |
sowmy87 | 0:d2dcb47dc8e9 | 93 | if (serial->writeable()) |
sowmy87 | 0:d2dcb47dc8e9 | 94 | serial->printf("mogo 2:%i\r", -inPsec); |
sowmy87 | 0:d2dcb47dc8e9 | 95 | rightSpeed=inPsec; |
sowmy87 | 0:d2dcb47dc8e9 | 96 | } |
sowmy87 | 0:d2dcb47dc8e9 | 97 | |
sowmy87 | 0:d2dcb47dc8e9 | 98 | void Serializer::SetSpeed(int inPsec) { |
sowmy87 | 0:d2dcb47dc8e9 | 99 | if (inPsec>MAX_SPEED)inPsec=MAX_SPEED; |
sowmy87 | 0:d2dcb47dc8e9 | 100 | if (inPsec<-MAX_SPEED)inPsec=-MAX_SPEED; |
sowmy87 | 0:d2dcb47dc8e9 | 101 | inPsec*=-1; |
sowmy87 | 0:d2dcb47dc8e9 | 102 | if (serial->writeable()) |
sowmy87 | 0:d2dcb47dc8e9 | 103 | serial->printf("mogo 1:%i 2:%i\r", inPsec, inPsec); |
sowmy87 | 0:d2dcb47dc8e9 | 104 | leftSpeed=rightSpeed=inPsec; |
sowmy87 | 0:d2dcb47dc8e9 | 105 | } |
sowmy87 | 0:d2dcb47dc8e9 | 106 | |
sowmy87 | 0:d2dcb47dc8e9 | 107 | void Serializer::SetVPID(int p,int i,int d,int l) { |
sowmy87 | 0:d2dcb47dc8e9 | 108 | if (serial->writeable()) |
sowmy87 | 0:d2dcb47dc8e9 | 109 | serial->printf("vpid %i:%i:%i:%i\r", p,i,d,l); |
sowmy87 | 0:d2dcb47dc8e9 | 110 | } |
sowmy87 | 0:d2dcb47dc8e9 | 111 | |
sowmy87 | 0:d2dcb47dc8e9 | 112 | void Serializer::SetDPID(int p,int i,int d,int a) { |
sowmy87 | 0:d2dcb47dc8e9 | 113 | if (serial->writeable()) |
sowmy87 | 0:d2dcb47dc8e9 | 114 | serial->printf("dpid %i:%i:%i:%i\r", p,i,d,a); |
sowmy87 | 0:d2dcb47dc8e9 | 115 | } |
sowmy87 | 0:d2dcb47dc8e9 | 116 | |
sowmy87 | 0:d2dcb47dc8e9 | 117 | void Serializer::DiGoLeft(int dist,int inPsec) { |
sowmy87 | 1:9a7e6c978adb | 118 | /* if(_isBusy) |
sowmy87 | 1:9a7e6c978adb | 119 | return; |
sowmy87 | 1:9a7e6c978adb | 120 | _isBusy=1; |
sowmy87 | 1:9a7e6c978adb | 121 | */ |
sowmy87 | 0:d2dcb47dc8e9 | 122 | if (serial->writeable()) |
sowmy87 | 1:9a7e6c978adb | 123 | serial->printf("digo 1:%i:%i\r",dist*PULSES_PER_INCH, inPsec); |
sowmy87 | 0:d2dcb47dc8e9 | 124 | } |
sowmy87 | 0:d2dcb47dc8e9 | 125 | void Serializer::DiGoRight(int dist,int inPsec) { |
sowmy87 | 1:9a7e6c978adb | 126 | /* if(_isBusy) |
sowmy87 | 1:9a7e6c978adb | 127 | return; |
sowmy87 | 1:9a7e6c978adb | 128 | _isBusy=1; |
sowmy87 | 1:9a7e6c978adb | 129 | */ |
sowmy87 | 0:d2dcb47dc8e9 | 130 | if (serial->writeable()) |
sowmy87 | 1:9a7e6c978adb | 131 | serial->printf("digo 2:%i:%i\r",dist*PULSES_PER_INCH, inPsec); |
sowmy87 | 0:d2dcb47dc8e9 | 132 | } |
sowmy87 | 0:d2dcb47dc8e9 | 133 | void Serializer::DiGo(int dist,int inPsec) { |
sowmy87 | 1:9a7e6c978adb | 134 | /* if(_isBusy) |
sowmy87 | 1:9a7e6c978adb | 135 | return; |
sowmy87 | 1:9a7e6c978adb | 136 | _isBusy=1; |
sowmy87 | 1:9a7e6c978adb | 137 | */ |
sowmy87 | 0:d2dcb47dc8e9 | 138 | if (serial->writeable()) { |
sowmy87 | 1:9a7e6c978adb | 139 | serial->printf("digo 1:%i:%i 2:%i:%i\r", \ |
sowmy87 | 0:d2dcb47dc8e9 | 140 | -dist*PULSES_PER_INCH, \ |
sowmy87 | 1:9a7e6c978adb | 141 | inPsec, \ |
sowmy87 | 0:d2dcb47dc8e9 | 142 | -dist*PULSES_PER_INCH, \ |
sowmy87 | 0:d2dcb47dc8e9 | 143 | inPsec); |
sowmy87 | 0:d2dcb47dc8e9 | 144 | |
sowmy87 | 0:d2dcb47dc8e9 | 145 | } |
sowmy87 | 0:d2dcb47dc8e9 | 146 | } |
sowmy87 | 0:d2dcb47dc8e9 | 147 | |
sowmy87 | 1:9a7e6c978adb | 148 | int Serializer::IsBusy() { |
sowmy87 | 1:9a7e6c978adb | 149 | |
sowmy87 | 1:9a7e6c978adb | 150 | if (_isBusy&&serial->writeable()) { |
sowmy87 | 1:9a7e6c978adb | 151 | serial->printf("pids\r"); |
sowmy87 | 1:9a7e6c978adb | 152 | wait(0.01); |
sowmy87 | 1:9a7e6c978adb | 153 | } |
sowmy87 | 1:9a7e6c978adb | 154 | return _isBusy; |
sowmy87 | 1:9a7e6c978adb | 155 | } |
sowmy87 | 1:9a7e6c978adb | 156 | /* |
sowmy87 | 1:9a7e6c978adb | 157 | char tmp=0; |
sowmy87 | 1:9a7e6c978adb | 158 | if (_isBusy) { |
sowmy87 | 1:9a7e6c978adb | 159 | if (serial->writeable()) { |
sowmy87 | 1:9a7e6c978adb | 160 | serial->printf("pids\r"); |
sowmy87 | 1:9a7e6c978adb | 161 | } |
sowmy87 | 1:9a7e6c978adb | 162 | wait(0.1); |
sowmy87 | 1:9a7e6c978adb | 163 | while (serial->readable()) { |
sowmy87 | 1:9a7e6c978adb | 164 | tmp=serial->getc(); |
sowmy87 | 1:9a7e6c978adb | 165 | pcc.putc(tmp); |
sowmy87 | 1:9a7e6c978adb | 166 | if (tmp=='1') |
sowmy87 | 1:9a7e6c978adb | 167 | _isBusy=1; |
sowmy87 | 1:9a7e6c978adb | 168 | else if (tmp=='0') |
sowmy87 | 1:9a7e6c978adb | 169 | _isBusy=0; |
sowmy87 | 1:9a7e6c978adb | 170 | } |
sowmy87 | 1:9a7e6c978adb | 171 | } |
sowmy87 | 1:9a7e6c978adb | 172 | pcc.printf("IsBusy = %i\n\r",_isBusy); |
sowmy87 | 1:9a7e6c978adb | 173 | return _isBusy; |
sowmy87 | 1:9a7e6c978adb | 174 | */ |
sowmy87 | 1:9a7e6c978adb | 175 | |
sowmy87 | 1:9a7e6c978adb | 176 | |
sowmy87 | 1:9a7e6c978adb | 177 | |
sowmy87 | 0:d2dcb47dc8e9 | 178 | void Serializer::TurnLeft(int deg) { |
sowmy87 | 0:d2dcb47dc8e9 | 179 | |
sowmy87 | 0:d2dcb47dc8e9 | 180 | } |
sowmy87 | 0:d2dcb47dc8e9 | 181 | |
sowmy87 | 0:d2dcb47dc8e9 | 182 | void Serializer::TurnRight(int deg) { |
sowmy87 | 0:d2dcb47dc8e9 | 183 | |
sowmy87 | 0:d2dcb47dc8e9 | 184 | |
sowmy87 | 0:d2dcb47dc8e9 | 185 | } |
sowmy87 | 0:d2dcb47dc8e9 | 186 | void Serializer::PivetLeft(int deg) { |
sowmy87 | 0:d2dcb47dc8e9 | 187 | |
sowmy87 | 1:9a7e6c978adb | 188 | Stop(); |
sowmy87 | 1:9a7e6c978adb | 189 | deg=deg*PIVET_ADJUSTMENT; |
sowmy87 | 0:d2dcb47dc8e9 | 190 | wait(0.1); |
sowmy87 | 0:d2dcb47dc8e9 | 191 | if (serial->writeable()) |
sowmy87 | 0:d2dcb47dc8e9 | 192 | serial->printf("digo 1:%i:%i 2:%i:%i\r",deg,PIVET_SPEED,-deg,PIVET_SPEED); |
sowmy87 | 0:d2dcb47dc8e9 | 193 | |
sowmy87 | 0:d2dcb47dc8e9 | 194 | } |
sowmy87 | 0:d2dcb47dc8e9 | 195 | void Serializer::PivetRight(int deg) { |
sowmy87 | 0:d2dcb47dc8e9 | 196 | this->Stop(); |
sowmy87 | 1:9a7e6c978adb | 197 | deg=deg*PIVET_ADJUSTMENT; |
sowmy87 | 0:d2dcb47dc8e9 | 198 | wait(0.1); |
sowmy87 | 0:d2dcb47dc8e9 | 199 | if (serial->writeable()) |
sowmy87 | 0:d2dcb47dc8e9 | 200 | serial->printf("digo 1:%i:%i 2:%i:%i\r",-deg,PIVET_SPEED,deg,PIVET_SPEED); |
sowmy87 | 0:d2dcb47dc8e9 | 201 | |
sowmy87 | 0:d2dcb47dc8e9 | 202 | } |
sowmy87 | 0:d2dcb47dc8e9 | 203 | |
sowmy87 | 0:d2dcb47dc8e9 | 204 | void Serializer::SetLeftPWM(int pwm) { |
sowmy87 | 0:d2dcb47dc8e9 | 205 | _lPWM=-pwm; |
sowmy87 | 0:d2dcb47dc8e9 | 206 | if (serial->writeable()) |
sowmy87 | 0:d2dcb47dc8e9 | 207 | serial->printf("pwm 1:%i\r",_lPWM); |
sowmy87 | 0:d2dcb47dc8e9 | 208 | |
sowmy87 | 0:d2dcb47dc8e9 | 209 | } |
sowmy87 | 0:d2dcb47dc8e9 | 210 | |
sowmy87 | 0:d2dcb47dc8e9 | 211 | void Serializer::SetRightPWM(int pwm) { |
sowmy87 | 0:d2dcb47dc8e9 | 212 | _rPWM=-pwm; |
sowmy87 | 0:d2dcb47dc8e9 | 213 | if (serial->writeable()) |
sowmy87 | 0:d2dcb47dc8e9 | 214 | serial->printf("pwm 2:%i\r",_rPWM); |
sowmy87 | 0:d2dcb47dc8e9 | 215 | } |
sowmy87 | 0:d2dcb47dc8e9 | 216 | |
sowmy87 | 3:94b650d0861d | 217 | void Serializer::SetPWM(int pwm){ |
sowmy87 | 3:94b650d0861d | 218 | _rPWM=-pwm; |
sowmy87 | 3:94b650d0861d | 219 | _lPWM=-pwm; |
sowmy87 | 3:94b650d0861d | 220 | if (serial->writeable()) |
sowmy87 | 3:94b650d0861d | 221 | serial->printf("pwm 1:%i 2:%i\r",_lPWM, _rPWM); |
sowmy87 | 3:94b650d0861d | 222 | } |
sowmy87 | 3:94b650d0861d | 223 | |
sowmy87 | 3:94b650d0861d | 224 | void Serializer::SetPWM(int lPwm, int rPwm){ |
sowmy87 | 3:94b650d0861d | 225 | _rPWM=-rPwm; |
sowmy87 | 3:94b650d0861d | 226 | _lPWM=-lPwm; |
sowmy87 | 3:94b650d0861d | 227 | if (serial->writeable()) |
sowmy87 | 3:94b650d0861d | 228 | serial->printf("pwm 1:%i 2:%i\r",_lPWM, _rPWM); |
sowmy87 | 3:94b650d0861d | 229 | } |
sowmy87 | 3:94b650d0861d | 230 | |
sowmy87 | 0:d2dcb47dc8e9 | 231 | int Serializer::GetCountLeft() { |
sowmy87 | 0:d2dcb47dc8e9 | 232 | if (serial->writeable()) { |
sowmy87 | 0:d2dcb47dc8e9 | 233 | serial->printf("getenc 1\r"); |
sowmy87 | 1:9a7e6c978adb | 234 | // pcc.printf("Sendreq\t"); |
sowmy87 | 0:d2dcb47dc8e9 | 235 | } |
sowmy87 | 0:d2dcb47dc8e9 | 236 | wait(0.01); |
sowmy87 | 0:d2dcb47dc8e9 | 237 | int ret=0; |
sowmy87 | 0:d2dcb47dc8e9 | 238 | char c=0; |
sowmy87 | 0:d2dcb47dc8e9 | 239 | while (serial->readable()) { |
sowmy87 | 1:9a7e6c978adb | 240 | // pcc.printf("Reading"); |
sowmy87 | 0:d2dcb47dc8e9 | 241 | c=serial->getc(); |
sowmy87 | 1:9a7e6c978adb | 242 | // pcc.putc(c); |
sowmy87 | 0:d2dcb47dc8e9 | 243 | if (c>='0'&&c<='9') { |
sowmy87 | 0:d2dcb47dc8e9 | 244 | c-='0'; |
sowmy87 | 0:d2dcb47dc8e9 | 245 | ret*=10; |
sowmy87 | 0:d2dcb47dc8e9 | 246 | ret+=c; |
sowmy87 | 0:d2dcb47dc8e9 | 247 | } |
sowmy87 | 0:d2dcb47dc8e9 | 248 | } |
sowmy87 | 0:d2dcb47dc8e9 | 249 | return ret; |
sowmy87 | 0:d2dcb47dc8e9 | 250 | } |
sowmy87 | 0:d2dcb47dc8e9 | 251 | |
sowmy87 | 0:d2dcb47dc8e9 | 252 | int Serializer::GetCountRight() { |
sowmy87 | 0:d2dcb47dc8e9 | 253 | if (serial->writeable()) { |
sowmy87 | 0:d2dcb47dc8e9 | 254 | serial->printf("getenc 2\r"); |
sowmy87 | 1:9a7e6c978adb | 255 | // pcc.printf("Sendreq\t"); |
sowmy87 | 0:d2dcb47dc8e9 | 256 | } |
sowmy87 | 0:d2dcb47dc8e9 | 257 | wait(0.01); |
sowmy87 | 0:d2dcb47dc8e9 | 258 | int ret=0; |
sowmy87 | 0:d2dcb47dc8e9 | 259 | char c=0; |
sowmy87 | 0:d2dcb47dc8e9 | 260 | while (serial->readable()) { |
sowmy87 | 1:9a7e6c978adb | 261 | // pcc.printf("Reading"); |
sowmy87 | 0:d2dcb47dc8e9 | 262 | c=serial->getc(); |
sowmy87 | 1:9a7e6c978adb | 263 | // pcc.putc(c); |
sowmy87 | 0:d2dcb47dc8e9 | 264 | if (c>='0'&&c<='9') { |
sowmy87 | 0:d2dcb47dc8e9 | 265 | c-='0'; |
sowmy87 | 0:d2dcb47dc8e9 | 266 | ret*=10; |
sowmy87 | 0:d2dcb47dc8e9 | 267 | ret+=c; |
sowmy87 | 0:d2dcb47dc8e9 | 268 | } |
sowmy87 | 0:d2dcb47dc8e9 | 269 | } |
sowmy87 | 0:d2dcb47dc8e9 | 270 | return ret; |
sowmy87 | 0:d2dcb47dc8e9 | 271 | } |
sowmy87 | 0:d2dcb47dc8e9 | 272 | int Serializer::GetCount() { |
sowmy87 | 0:d2dcb47dc8e9 | 273 | return GetCountLeft(); |
sowmy87 | 0:d2dcb47dc8e9 | 274 | } |
sowmy87 | 2:9e0d3f159ec3 | 275 | float Serializer::GetDistanceLeft() { |
sowmy87 | 2:9e0d3f159ec3 | 276 | return float(GetCountLeft()*PULSE_DISTANCE); |
sowmy87 | 0:d2dcb47dc8e9 | 277 | } |
sowmy87 | 2:9e0d3f159ec3 | 278 | float Serializer::GetDistanceRight() { |
sowmy87 | 2:9e0d3f159ec3 | 279 | return float(GetCountRight()*PULSE_DISTANCE); |
sowmy87 | 0:d2dcb47dc8e9 | 280 | } |
sowmy87 | 2:9e0d3f159ec3 | 281 | float Serializer::GetDistance() { |
sowmy87 | 2:9e0d3f159ec3 | 282 | return float(GetCountLeft()*PULSE_DISTANCE); |
sowmy87 | 0:d2dcb47dc8e9 | 283 | } |
sowmy87 | 0:d2dcb47dc8e9 | 284 | |
sowmy87 | 0:d2dcb47dc8e9 | 285 | |
sowmy87 | 0:d2dcb47dc8e9 | 286 | //unused and untested |
sowmy87 | 0:d2dcb47dc8e9 | 287 | int Serializer::GetReply() { |
sowmy87 | 0:d2dcb47dc8e9 | 288 | int returnValue=0; |
sowmy87 | 0:d2dcb47dc8e9 | 289 | char c=0; |
sowmy87 | 0:d2dcb47dc8e9 | 290 | char readyToReturn=0; |
sowmy87 | 0:d2dcb47dc8e9 | 291 | char ack=0; |
sowmy87 | 0:d2dcb47dc8e9 | 292 | char nack=0; |
sowmy87 | 0:d2dcb47dc8e9 | 293 | wait(0.0001); |
sowmy87 | 0:d2dcb47dc8e9 | 294 | while (serial->readable()) { |
sowmy87 | 0:d2dcb47dc8e9 | 295 | c=serial->getc(); |
sowmy87 | 0:d2dcb47dc8e9 | 296 | if (readyToReturn)continue; |
sowmy87 | 0:d2dcb47dc8e9 | 297 | if (c=='N'&&nack==0)nack=1; |
sowmy87 | 0:d2dcb47dc8e9 | 298 | else nack=0; |
sowmy87 | 0:d2dcb47dc8e9 | 299 | if (c=='A'&&ack==0)ack++; |
sowmy87 | 0:d2dcb47dc8e9 | 300 | else ack=nack=0; |
sowmy87 | 0:d2dcb47dc8e9 | 301 | if (c=='C'&&ack==1)ack++; |
sowmy87 | 0:d2dcb47dc8e9 | 302 | else ack=nack=0; |
sowmy87 | 0:d2dcb47dc8e9 | 303 | if (c=='K'&&ack==2)ack++; |
sowmy87 | 0:d2dcb47dc8e9 | 304 | else ack=nack=0; |
sowmy87 | 0:d2dcb47dc8e9 | 305 | if (ack==3) |
sowmy87 | 0:d2dcb47dc8e9 | 306 | if (nack==1) |
sowmy87 | 0:d2dcb47dc8e9 | 307 | returnValue=1; |
sowmy87 | 0:d2dcb47dc8e9 | 308 | else |
sowmy87 | 0:d2dcb47dc8e9 | 309 | returnValue=0; |
sowmy87 | 0:d2dcb47dc8e9 | 310 | if (c=='>')readyToReturn=1; |
sowmy87 | 0:d2dcb47dc8e9 | 311 | } |
sowmy87 | 0:d2dcb47dc8e9 | 312 | return returnValue; |
sowmy87 | 0:d2dcb47dc8e9 | 313 | } |
sowmy87 | 0:d2dcb47dc8e9 | 314 | |
sowmy87 | 0:d2dcb47dc8e9 | 315 | |
sowmy87 | 0:d2dcb47dc8e9 | 316 | void Serializer::InterruptHandler() { |
sowmy87 | 1:9a7e6c978adb | 317 | char c=0; |
sowmy87 | 1:9a7e6c978adb | 318 | char bsy=_isBusy; |
sowmy87 | 0:d2dcb47dc8e9 | 319 | while (serial->readable()) { |
sowmy87 | 0:d2dcb47dc8e9 | 320 | c=serial->getc(); |
sowmy87 | 1:9a7e6c978adb | 321 | if (!_isBusy) |
sowmy87 | 1:9a7e6c978adb | 322 | continue; |
sowmy87 | 1:9a7e6c978adb | 323 | |
sowmy87 | 1:9a7e6c978adb | 324 | if (c=='1') |
sowmy87 | 1:9a7e6c978adb | 325 | bsy=1; |
sowmy87 | 1:9a7e6c978adb | 326 | else if (c=='0') |
sowmy87 | 1:9a7e6c978adb | 327 | bsy=0; |
sowmy87 | 0:d2dcb47dc8e9 | 328 | } |
sowmy87 | 1:9a7e6c978adb | 329 | if (_isBusy&&!bsy) _isBusy=0; |
sowmy87 | 1:9a7e6c978adb | 330 | } |