lab 4

Dependencies:   BufferedSerial

Committer:
ccpjboss
Date:
Thu May 27 08:53:19 2021 +0000
Revision:
0:0d3a25d4697e
tet

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ccpjboss 0:0d3a25d4697e 1 /*
ccpjboss 0:0d3a25d4697e 2 * RoboPeak RPLIDAR Driver for Arduino
ccpjboss 0:0d3a25d4697e 3 * RoboPeak.com
ccpjboss 0:0d3a25d4697e 4 *
ccpjboss 0:0d3a25d4697e 5 * Copyright (c) 2014, RoboPeak
ccpjboss 0:0d3a25d4697e 6 * All rights reserved.
ccpjboss 0:0d3a25d4697e 7 *
ccpjboss 0:0d3a25d4697e 8 * Redistribution and use in source and binary forms, with or without modification,
ccpjboss 0:0d3a25d4697e 9 * are permitted provided that the following conditions are met:
ccpjboss 0:0d3a25d4697e 10 *
ccpjboss 0:0d3a25d4697e 11 * 1. Redistributions of source code must retain the above copyright notice,
ccpjboss 0:0d3a25d4697e 12 * this list of conditions and the following disclaimer.
ccpjboss 0:0d3a25d4697e 13 *
ccpjboss 0:0d3a25d4697e 14 * 2. Redistributions in binary form must reproduce the above copyright notice,
ccpjboss 0:0d3a25d4697e 15 * this list of conditions and the following disclaimer in the documentation
ccpjboss 0:0d3a25d4697e 16 * and/or other materials provided with the distribution.
ccpjboss 0:0d3a25d4697e 17 *
ccpjboss 0:0d3a25d4697e 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
ccpjboss 0:0d3a25d4697e 19 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
ccpjboss 0:0d3a25d4697e 20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
ccpjboss 0:0d3a25d4697e 21 * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
ccpjboss 0:0d3a25d4697e 22 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
ccpjboss 0:0d3a25d4697e 23 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
ccpjboss 0:0d3a25d4697e 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
ccpjboss 0:0d3a25d4697e 25 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
ccpjboss 0:0d3a25d4697e 26 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
ccpjboss 0:0d3a25d4697e 27 *
ccpjboss 0:0d3a25d4697e 28 */
ccpjboss 0:0d3a25d4697e 29
ccpjboss 0:0d3a25d4697e 30 #pragma once
ccpjboss 0:0d3a25d4697e 31 #include "mbed.h"
ccpjboss 0:0d3a25d4697e 32 #include "inc/rptypes.h"
ccpjboss 0:0d3a25d4697e 33 #include "inc/rplidar_cmd.h"
ccpjboss 0:0d3a25d4697e 34 #include <BufferedSerial.h>
ccpjboss 0:0d3a25d4697e 35 //#include "../BufferedSerial/BufferedSerial.h"
ccpjboss 0:0d3a25d4697e 36 struct RPLidarMeasurement
ccpjboss 0:0d3a25d4697e 37 {
ccpjboss 0:0d3a25d4697e 38 float distance;
ccpjboss 0:0d3a25d4697e 39 float angle;
ccpjboss 0:0d3a25d4697e 40 uint8_t quality;
ccpjboss 0:0d3a25d4697e 41 bool startBit;
ccpjboss 0:0d3a25d4697e 42 };
ccpjboss 0:0d3a25d4697e 43
ccpjboss 0:0d3a25d4697e 44 class RPLidar
ccpjboss 0:0d3a25d4697e 45 {
ccpjboss 0:0d3a25d4697e 46 public:
ccpjboss 0:0d3a25d4697e 47 enum {
ccpjboss 0:0d3a25d4697e 48 RPLIDAR_SERIAL_BAUDRATE = 115200,
ccpjboss 0:0d3a25d4697e 49 RPLIDAR_DEFAULT_TIMEOUT = 500,
ccpjboss 0:0d3a25d4697e 50 };
ccpjboss 0:0d3a25d4697e 51
ccpjboss 0:0d3a25d4697e 52 void Thread_readSensor(void);
ccpjboss 0:0d3a25d4697e 53 int32_t pollSensorData(struct RPLidarMeasurement *_data);
ccpjboss 0:0d3a25d4697e 54 RPLidar(Serial *_pc);
ccpjboss 0:0d3a25d4697e 55 RPLidar();
ccpjboss 0:0d3a25d4697e 56 ~RPLidar();
ccpjboss 0:0d3a25d4697e 57
ccpjboss 0:0d3a25d4697e 58 // open the given serial interface and try to connect to the RPLIDAR
ccpjboss 0:0d3a25d4697e 59 //bool begin(BufferedSerial &serialobj);
ccpjboss 0:0d3a25d4697e 60 void begin(BufferedSerial &serialobj);
ccpjboss 0:0d3a25d4697e 61 // close the currently opened serial interface
ccpjboss 0:0d3a25d4697e 62 void end();
ccpjboss 0:0d3a25d4697e 63
ccpjboss 0:0d3a25d4697e 64 // check whether the serial interface is opened
ccpjboss 0:0d3a25d4697e 65 // bool isOpen();
ccpjboss 0:0d3a25d4697e 66
ccpjboss 0:0d3a25d4697e 67 // ask the RPLIDAR for its health info
ccpjboss 0:0d3a25d4697e 68 u_result getHealth(rplidar_response_device_health_t & healthinfo, _u32 timeout = RPLIDAR_DEFAULT_TIMEOUT);
ccpjboss 0:0d3a25d4697e 69
ccpjboss 0:0d3a25d4697e 70 // ask the RPLIDAR for its device info like the serial number
ccpjboss 0:0d3a25d4697e 71 u_result getDeviceInfo(rplidar_response_device_info_t & info, _u32 timeout = RPLIDAR_DEFAULT_TIMEOUT);
ccpjboss 0:0d3a25d4697e 72
ccpjboss 0:0d3a25d4697e 73 // stop the measurement operation
ccpjboss 0:0d3a25d4697e 74 u_result stop();
ccpjboss 0:0d3a25d4697e 75
ccpjboss 0:0d3a25d4697e 76 // start the measurement operation
ccpjboss 0:0d3a25d4697e 77 u_result startThreadScan();
ccpjboss 0:0d3a25d4697e 78 u_result startScan(bool force = true, _u32 timeout = RPLIDAR_DEFAULT_TIMEOUT*2);
ccpjboss 0:0d3a25d4697e 79
ccpjboss 0:0d3a25d4697e 80
ccpjboss 0:0d3a25d4697e 81 // wait for one sample point to arrive
ccpjboss 0:0d3a25d4697e 82 u_result waitPoint(_u32 timeout = RPLIDAR_DEFAULT_TIMEOUT);
ccpjboss 0:0d3a25d4697e 83
ccpjboss 0:0d3a25d4697e 84 u_result _sendCommand(_u8 cmd, const void * payload, size_t payloadsize);
ccpjboss 0:0d3a25d4697e 85 // retrieve currently received sample point
ccpjboss 0:0d3a25d4697e 86 int Data[360];
ccpjboss 0:0d3a25d4697e 87 int ang,dis;
ccpjboss 0:0d3a25d4697e 88 int angMin,angMax;
ccpjboss 0:0d3a25d4697e 89 void setAngle(int min,int max);
ccpjboss 0:0d3a25d4697e 90 void get_lidar();
ccpjboss 0:0d3a25d4697e 91 const RPLidarMeasurement & getCurrentPoint()
ccpjboss 0:0d3a25d4697e 92 {
ccpjboss 0:0d3a25d4697e 93 return _currentMeasurement;
ccpjboss 0:0d3a25d4697e 94 }
ccpjboss 0:0d3a25d4697e 95
ccpjboss 0:0d3a25d4697e 96 private:
ccpjboss 0:0d3a25d4697e 97 _u8 recvPos_g;
ccpjboss 0:0d3a25d4697e 98 rplidar_response_measurement_node_t node_g;
ccpjboss 0:0d3a25d4697e 99
ccpjboss 0:0d3a25d4697e 100 //Thread *thread_p;
ccpjboss 0:0d3a25d4697e 101 Thread thread;
ccpjboss 0:0d3a25d4697e 102 //Mail<struct RPLidarMeasurement, 100> mail_box; //
ccpjboss 0:0d3a25d4697e 103 Mutex mutex_measurements;
ccpjboss 0:0d3a25d4697e 104 bool useThread;
ccpjboss 0:0d3a25d4697e 105
ccpjboss 0:0d3a25d4697e 106 struct RPLidarMeasurement currentMeasurement_fromThread;
ccpjboss 0:0d3a25d4697e 107 bool newMeasurement;
ccpjboss 0:0d3a25d4697e 108
ccpjboss 0:0d3a25d4697e 109 u_result pollPoint();
ccpjboss 0:0d3a25d4697e 110 //Serial *pc;
ccpjboss 0:0d3a25d4697e 111 protected:
ccpjboss 0:0d3a25d4697e 112 // u_result _sendCommand(_u8 cmd, const void * payload, size_t payloadsize);
ccpjboss 0:0d3a25d4697e 113 u_result _waitResponseHeader(rplidar_ans_header_t * header, _u32 timeout);
ccpjboss 0:0d3a25d4697e 114
ccpjboss 0:0d3a25d4697e 115 protected:
ccpjboss 0:0d3a25d4697e 116 BufferedSerial * _bined_serialdev;
ccpjboss 0:0d3a25d4697e 117 RPLidarMeasurement _currentMeasurement;
ccpjboss 0:0d3a25d4697e 118 };