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.

Committer:
nydus
Date:
Fri Feb 25 17:23:42 2011 +0000
Revision:
0:559a18121e83

        

Who changed what in which revision?

UserRevisionLine numberNew 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