![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Regenerating PPM signal based on distances from ultrasonic sensors, ESP8266 for connectin via wifi. Autonomous quadcopter behaviour, autonomou height holding. Flying direction based on front and back ultrasonic sensors.
Dependencies: ConfigFile HCSR04 PID PPM2 mbed-rtos mbed
Diff: SRFO2/SRFO2.cpp
- Revision:
- 2:d172c9963f87
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SRFO2/SRFO2.cpp Thu Oct 26 15:54:47 2017 +0000 @@ -0,0 +1,91 @@ +#include "srf02.h" + +SRF02::SRF02(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr) +{ +} + +SRF02::~SRF02() +{ +} + +//Get the data in centimeters +int SRF02::readcm() +{ + char cmd[2]; + char eco_high[1],eco_low[1]; //this is because the sensor, sends the data in tow bytes, and you have tu read from two different registers 0x02 and 0x03; + + + // Get range data from SRF02 in centimeters + cmd[0] = 0x00; + cmd[1] = 0x51; + m_i2c.write(m_addr, cmd, 2); + + wait_ranging(); + + + cmd[0] = 0x02; + m_i2c.write(m_addr, cmd, 1, 1); + m_i2c.read(m_addr, eco_high, 1); + + cmd[0] = 0x03; + m_i2c.write(m_addr,cmd,1,1); + m_i2c.read(m_addr,eco_low,1); + + int range = (eco_high[0]<<8)|eco_low[0]; + + return range; +} + +//Get the data in inches +int SRF02::readinch() +{ + char cmd[2]; + char eco_high[1],eco_low[1]; //this is because the sensor, sends the data in tow bytes, and you have tu read from two different registers 0x02 and 0x03; + + cmd[0] = 0x00; + cmd[1] = 0x50; + m_i2c.write(m_addr, cmd, 2); + + wait_ranging(); + + cmd[0] = 0x02; + m_i2c.write(m_addr, cmd, 1, 1); + m_i2c.read(m_addr, eco_high, 1); + + cmd[0] = 0x03; + m_i2c.write(m_addr,cmd,1,1); + m_i2c.read(m_addr,eco_low,1); + + int range = (eco_high[0]<<8)|eco_low[0]; + + return range; +} + +//Change adress of the device. Remember to have only one sensor conected to execute this method. +void SRF02::change_addr(char new_addr) +{ + char cmd[2]; + + cmd[0]=0x00; + cmd[1]=0xA0; + m_i2c.write(m_addr,cmd,2); + cmd[0]=0x00; + cmd[1]=0xAA; + m_i2c.write(m_addr,cmd,2); + cmd[0]=0x00; + cmd[1]=0xA5; + m_i2c.write(m_addr,cmd,2); + cmd[0]=0x00; + cmd[1]=new_addr; + m_i2c.write(m_addr,cmd,2); + + } + +void SRF02::wait_ranging(void) +{ + char eco; + + do { + eco=m_i2c.read(1); + }while(eco == 0xff); +} \ No newline at end of file