diff --git a/modules/catkin_ws/src/car/include/ultrasonic/USS_SRF02.h b/modules/catkin_ws/src/car/include/ultrasonic/USS_SRF02.h new file mode 100644 index 0000000000000000000000000000000000000000..092d475a8a2655b6557273e0eabe44676bca49b9 --- /dev/null +++ b/modules/catkin_ws/src/car/include/ultrasonic/USS_SRF02.h @@ -0,0 +1,21 @@ +#ifndef USS_SRF02_H_ +#define USS_SRF02_H_ + +class USS_SRF02{ + +public: + USS_SRF02(int devId); + + int getDistance(); + +private: + + void setup(); + + int devId; + + int fd; +}; + + +#endif /* USS_SRF02_H_ */ diff --git a/modules/catkin_ws/src/car/src/ultrasonic/USS_SRF02.cpp b/modules/catkin_ws/src/car/src/ultrasonic/USS_SRF02.cpp new file mode 100644 index 0000000000000000000000000000000000000000..85243aad010d5cc6f31325258c3859016e084018 --- /dev/null +++ b/modules/catkin_ws/src/car/src/ultrasonic/USS_SRF02.cpp @@ -0,0 +1,63 @@ +#include "../include/USS_SRF02.h" +#include "../lib/wiringPi/wiringPi/wiringPiI2C.h" + +#include <iostream> + +#include <unistd.h> + +//gpio pins where the sonar is connected +const int SRF02_SDA = 8; //i2c data pin ; +const int SRF02_SCL = 9; //i2c clock pin ; + +// addresses of the sonars, the number is also as a sticker on the devices themselves +const int DEVICE_ADDRESS1 = 0x74; +const int DEVICE_ADDRESS2 = 0x76; +const int DEVICE_ADDRESS3 = 0x77; + +//path to i2c file +const char *DEVICE = "/dev/i2c-1"; + +const int COMMAND_REGISTER = 0x00; +const int RESULT_HIGH_BYTE = 0x02; +const int RESULT_LOW_BYTE = 0x03; +const int RANGING_MODE_CM = 0x51; + +const int DELAY = 70; //70 ms for ranging to finish + +int main() { + + USS_SRF02 uss(0x74); + + while(1){ + std::cout << uss.getDistance() << std::endl; + } + return 0; +} + +USS_SRF02::USS_SRF02(int devId) { + this->fd = -1; //no file opened yet + this->devId = devId; +} + +int USS_SRF02::getDistance() { + int distance; + + if(fd == -1){ + USS_SRF02::setup(); + } + + wiringPiI2CWriteReg8(fd, COMMAND_REGISTER, RANGING_MODE_CM); + usleep(DELAY * 1000); + distance = wiringPiI2CReadReg16(fd, RESULT_LOW_BYTE); + + return distance; +} + +void USS_SRF02::setup() { + + USS_SRF02::fd = wiringPiI2CSetupInterface(DEVICE, this->devId); + //todo error handling, + //however wiringPiI2CSetupInterface() calls exit() if it fails + + +}