sra-romi
Dependencies: BufferedSerial Matrix
Diff: rplidar/rplidar.h
- Revision:
- 0:2b691d200d6f
- Child:
- 2:e27733eaa594
diff -r 000000000000 -r 2b691d200d6f rplidar/rplidar.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rplidar/rplidar.h Tue Apr 09 17:53:31 2019 +0000 @@ -0,0 +1,114 @@ +/* + * RoboPeak RPLIDAR Driver for Arduino + * RoboPeak.com + * + * Copyright (c) 2014, RoboPeak + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#pragma once +#include "mbed.h" +#include "inc/rptypes.h" +#include "inc/rplidar_cmd.h" +#include <BufferedSerial.h> +//#include "../BufferedSerial/BufferedSerial.h" +struct RPLidarMeasurement +{ + float distance; + float angle; + uint8_t quality; + bool startBit; +}; + +class RPLidar +{ +public: + enum { + RPLIDAR_SERIAL_BAUDRATE = 115200, + RPLIDAR_DEFAULT_TIMEOUT = 500, + }; + + void Thread_readSensor(void); + int32_t pollSensorData(struct RPLidarMeasurement *_data); + RPLidar(Serial *_pc); + RPLidar(); + ~RPLidar(); + + // open the given serial interface and try to connect to the RPLIDAR + //bool begin(BufferedSerial &serialobj); + void begin(BufferedSerial &serialobj); + // close the currently opened serial interface + void end(); + + // check whether the serial interface is opened + // bool isOpen(); + + // ask the RPLIDAR for its health info + u_result getHealth(rplidar_response_device_health_t & healthinfo, _u32 timeout = RPLIDAR_DEFAULT_TIMEOUT); + + // ask the RPLIDAR for its device info like the serial number + u_result getDeviceInfo(rplidar_response_device_info_t & info, _u32 timeout = RPLIDAR_DEFAULT_TIMEOUT); + + // stop the measurement operation + u_result stop(); + + // start the measurement operation + u_result startThreadScan(); + u_result startScan(bool force = true, _u32 timeout = RPLIDAR_DEFAULT_TIMEOUT*2); + + + // wait for one sample point to arrive + u_result waitPoint(_u32 timeout = RPLIDAR_DEFAULT_TIMEOUT); + + u_result _sendCommand(_u8 cmd, const void * payload, size_t payloadsize); + // retrieve currently received sample point + int Data[360]; + int ang,dis; + int angMin,angMax; + void setAngle(int min,int max); + void get_lidar(); + const RPLidarMeasurement & getCurrentPoint() + { + return _currentMeasurement; + } + +private: + _u8 recvPos_g; + rplidar_response_measurement_node_t node_g; + + //Thread *thread_p; + Thread thread; + Mail<struct RPLidarMeasurement, 100> mail_box; // + bool useThread; + + u_result pollPoint(); + //Serial *pc; +protected: +// u_result _sendCommand(_u8 cmd, const void * payload, size_t payloadsize); + u_result _waitResponseHeader(rplidar_ans_header_t * header, _u32 timeout); + +protected: + BufferedSerial * _bined_serialdev; + RPLidarMeasurement _currentMeasurement; +};