This library contains all the functions necesary to perform an application using the SRF02 sensor. Esta librería contiene los métodos necesarios para poder configurar todos los parámetros del sensor SRF02.
SRF02.cpp@0:559a18121e83, 2011-02-25 (annotated)
- Committer:
- nydus
- Date:
- Fri Feb 25 17:23:42 2011 +0000
- Revision:
- 0:559a18121e83
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nydus | 0:559a18121e83 | 1 | #include "SRF02.h" |
nydus | 0:559a18121e83 | 2 | |
nydus | 0:559a18121e83 | 3 | |
nydus | 0:559a18121e83 | 4 | SRF02::SRF02(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr) { |
nydus | 0:559a18121e83 | 5 | } |
nydus | 0:559a18121e83 | 6 | |
nydus | 0:559a18121e83 | 7 | SRF02::~SRF02() { |
nydus | 0:559a18121e83 | 8 | |
nydus | 0:559a18121e83 | 9 | } |
nydus | 0:559a18121e83 | 10 | |
nydus | 0:559a18121e83 | 11 | //Get the data in centimeters |
nydus | 0:559a18121e83 | 12 | |
nydus | 0:559a18121e83 | 13 | int SRF02::readcm() { |
nydus | 0:559a18121e83 | 14 | |
nydus | 0:559a18121e83 | 15 | char cmd[2]; |
nydus | 0:559a18121e83 | 16 | 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; |
nydus | 0:559a18121e83 | 17 | |
nydus | 0:559a18121e83 | 18 | |
nydus | 0:559a18121e83 | 19 | // Get range data from SRF02 in centimeters |
nydus | 0:559a18121e83 | 20 | cmd[0] = 0x00; |
nydus | 0:559a18121e83 | 21 | cmd[1] = 0x51; |
nydus | 0:559a18121e83 | 22 | m_i2c.write(m_addr, cmd, 2); |
nydus | 0:559a18121e83 | 23 | |
nydus | 0:559a18121e83 | 24 | wait(0.07); |
nydus | 0:559a18121e83 | 25 | |
nydus | 0:559a18121e83 | 26 | |
nydus | 0:559a18121e83 | 27 | cmd[0] = 0x02; |
nydus | 0:559a18121e83 | 28 | m_i2c.write(m_addr, cmd, 1, 1); |
nydus | 0:559a18121e83 | 29 | m_i2c.read(m_addr, eco_high, 1); |
nydus | 0:559a18121e83 | 30 | |
nydus | 0:559a18121e83 | 31 | cmd[0] = 0x03; |
nydus | 0:559a18121e83 | 32 | m_i2c.write(m_addr,cmd,1,1); |
nydus | 0:559a18121e83 | 33 | m_i2c.read(m_addr,eco_low,1); |
nydus | 0:559a18121e83 | 34 | |
nydus | 0:559a18121e83 | 35 | int range = (eco_high[0]<<8)|eco_low[0]; |
nydus | 0:559a18121e83 | 36 | |
nydus | 0:559a18121e83 | 37 | return range; |
nydus | 0:559a18121e83 | 38 | } |
nydus | 0:559a18121e83 | 39 | |
nydus | 0:559a18121e83 | 40 | //Get the data in inches |
nydus | 0:559a18121e83 | 41 | |
nydus | 0:559a18121e83 | 42 | int SRF02::readinch() { |
nydus | 0:559a18121e83 | 43 | |
nydus | 0:559a18121e83 | 44 | char cmd[2]; |
nydus | 0:559a18121e83 | 45 | 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; |
nydus | 0:559a18121e83 | 46 | |
nydus | 0:559a18121e83 | 47 | |
nydus | 0:559a18121e83 | 48 | // Get range data from SRF02 in inches |
nydus | 0:559a18121e83 | 49 | cmd[0] = 0x00; |
nydus | 0:559a18121e83 | 50 | cmd[1] = 0x50; |
nydus | 0:559a18121e83 | 51 | m_i2c.write(m_addr, cmd, 2); |
nydus | 0:559a18121e83 | 52 | |
nydus | 0:559a18121e83 | 53 | wait(0.07); |
nydus | 0:559a18121e83 | 54 | |
nydus | 0:559a18121e83 | 55 | |
nydus | 0:559a18121e83 | 56 | cmd[0] = 0x02; |
nydus | 0:559a18121e83 | 57 | m_i2c.write(m_addr, cmd, 1, 1); |
nydus | 0:559a18121e83 | 58 | m_i2c.read(m_addr, eco_high, 1); |
nydus | 0:559a18121e83 | 59 | |
nydus | 0:559a18121e83 | 60 | cmd[0] = 0x03; |
nydus | 0:559a18121e83 | 61 | m_i2c.write(m_addr,cmd,1,1); |
nydus | 0:559a18121e83 | 62 | m_i2c.read(m_addr,eco_low,1); |
nydus | 0:559a18121e83 | 63 | |
nydus | 0:559a18121e83 | 64 | int range = (eco_high[0]<<8)|eco_low[0]; |
nydus | 0:559a18121e83 | 65 | |
nydus | 0:559a18121e83 | 66 | return range; |
nydus | 0:559a18121e83 | 67 | } |
nydus | 0:559a18121e83 | 68 | |
nydus | 0:559a18121e83 | 69 | void SRF02::change_addr(char new_addr){ |
nydus | 0:559a18121e83 | 70 | |
nydus | 0:559a18121e83 | 71 | //Change adress of the device. Remember to have only one sensor conected to execute this method. |
nydus | 0:559a18121e83 | 72 | |
nydus | 0:559a18121e83 | 73 | char cmd[2]; |
nydus | 0:559a18121e83 | 74 | |
nydus | 0:559a18121e83 | 75 | cmd[0]=0x00; |
nydus | 0:559a18121e83 | 76 | cmd[1]=0xA0; |
nydus | 0:559a18121e83 | 77 | m_i2c.write(m_addr,cmd,2); |
nydus | 0:559a18121e83 | 78 | cmd[0]=0x00; |
nydus | 0:559a18121e83 | 79 | cmd[1]=0xAA; |
nydus | 0:559a18121e83 | 80 | m_i2c.write(m_addr,cmd,2); |
nydus | 0:559a18121e83 | 81 | cmd[0]=0x00; |
nydus | 0:559a18121e83 | 82 | cmd[1]=0xA5; |
nydus | 0:559a18121e83 | 83 | m_i2c.write(m_addr,cmd,2); |
nydus | 0:559a18121e83 | 84 | cmd[0]=0x00; |
nydus | 0:559a18121e83 | 85 | cmd[1]=new_addr; |
nydus | 0:559a18121e83 | 86 | m_i2c.write(m_addr,cmd,2); |
nydus | 0:559a18121e83 | 87 | |
nydus | 0:559a18121e83 | 88 | } |
nydus | 0:559a18121e83 | 89 |