EEP fORK
Dependencies: BLE_API mbed nRF51822
Fork of MCS_LRF by
Diff: laser.cpp
- Revision:
- 18:08184949ab30
- Parent:
- 15:bc4f8c597c26
--- a/laser.cpp Fri Jun 16 05:09:17 2017 +0000 +++ b/laser.cpp Tue Jul 18 05:17:37 2017 +0000 @@ -23,7 +23,7 @@ void Laser::discardResponse() { // char c = 0; - wait_ms(20); // wait for the response + wait_ms(30); // wait for the response while(serial.readable()) { serial.getc(); } @@ -41,6 +41,7 @@ sendCommand(cmd); processResponse(); + setRedDot(true); } } @@ -90,8 +91,6 @@ wait_ms(1000); enableMeasurement(true); busy = false; - //return true; - } else { buf[i -1] = 0; } @@ -123,19 +122,19 @@ } else { sendCommand("switchMeasOff\n"); - discardResponse(); + discardResponse(); + sendCommand("2 0 startPwrSave;"); + discardResponse(); } } void Laser::setRedDot(bool on) { if(on) { - //char cmd[] = "0 -1 5 doMeasDistExt\n"; // doing a measurement turns the redDot on char cmd[] = "0 3 0 -1 3 doLaserCmd;\n"; sendCommand(cmd); wait_ms(120); // take a while for a response for to measurement command discardResponse(); -// triggerDistanceMeasurement(); } else { sendCommand("switchMeasOff\n"); discardResponse(); @@ -169,16 +168,8 @@ powerOffState = false; connectPower(); - - // trun power back on and reinstate serial and laser - //DigitalIn rx(p26, PullUp); -// serialPtr = new Serial(p27, p26); -// serialPtr->baud(READER_BAUD_RATE); -// disableFlowControl(); -// laserPtr = new Laser(*serialPtr); - enableMeasurement(true); - setRedDot(1); + setRedDot(true); } } @@ -186,22 +177,9 @@ { if(powerOffState == false) { powerOffState = true; - setRedDot(0); // this disables measurements + setRedDot(false); // this disables measurements removePower(); - - // also take power off the Laser, but first ensure io pins are not powered - // if(serialPtr != NULL) delete serialPtr; -// serialPtr = new Serial(NC, p26); -// DigitalOut rx(p26); -// DigitalOut tx(p27); -// rx = 0; -// tx = 0; - // if(laserPtr != NULL) delete laserPtr; - // laserPtr = new Laser(*serialPtr); - - // nReset = 0; - // disableLRF = 1; } } @@ -234,95 +212,3 @@ { enableMeasurement(false); } - - - - -//void Laser::processRxData(char c) -//{ -// if(c != '\n') { -// buf[idx++] = c; -// if(idx == bufSize) idx = 0; // avoid overflow -// } else { -// buf[idx] = 0; // null terminate the string -// processBuffer(); -// idx = 0; -// } -//} - -//float Laser::getDistance() -//{ -// float distance = -4.0; -// const int bufSize = 50; -// char data[bufSize]; -// int i = 0; -// //char cmd[] = ";\n"; -// char cmd[] = "0 -1 10 doMeasDistExt\n"; // single reading averaged over 10 measurements -// //char cmd[] = "0 -1 -1 doMeasDistExt\n"; // single reading of single measurement -// -// if (sendCommand(cmd) == true) { -// // Note: Need to actually read from the serial to clear the RX interrupt -// char c = 0; -// uint16_t count = 0; -// do { -// if(serial.readable()) { -// c = serial.getc(); -// data[i++] = c; -// } else { -// wait_us(100); -// } -// } while (c != '\n' && i < bufSize && count++ < 5000); // timeout after about 500ms and ensure no overflow -// -// if (count >= 5000 || i >= bufSize) return -2.0; // timeout or overflow -// -// // now that we have the reply parse it -// data[i - 1] = 0; // null terminate the string -// -// //reply is in this form '2 0 1844364 324 Reply'. 2nd number is error code, 3rd number is distance in um, 4th number is measurement signal -// vector<char*> v; -// split(data, ' ', v); -// -// if (v.size() != 6 || atoi(v[1]) != 0 || strcmp(v[5], "Reply") != 0) { -// // there is an error -// distance = -3.0; -// } else { -// distance = atoi(v[2]) / 1000000.0; // distance in m -// } -// } -// -// return distance; -//} - -//void Laser::processBuffer() -//{ -// //float distance; -//// vector<char*> v; -//// // debugCallback(buf); -//// -//// split(buf, ' ', v); -//// -//// if (v.size() != 6 || atoi(v[1]) != 0 || strcmp(v[5], "Reply") != 0) { -//// // there is an error -//// distanceCallback(-1.0); -//// } else -//// { -//// distance = atoi(v[2]) / 1000000.0; // distance in m -//// distanceCallback(distance); -//// } -// -// -// float distance = -5; -// vector<char*> v; -// -// split(buf, ' ', v); -// -// if (v.size() != 6 || atoi(v[1]) != 0 || strcmp(v[5], "Reply") != 0) { -// // there is an error -// distanceCallback(-1.0, 0.0); -// } else { -// float elapsed = (float)(timer.read_us()/1000.0); // elapsed in ms -// distance = atoi(v[2]) / 1000000.0; // distance in m -// distanceCallback(distance, elapsed); -// } -//} -