Based on Robinson Lopez Monzon library: This library contains all the functions necesary to perform an application using the SRF02 sensor. Modified by Dury: replaced wait() functions that are not usefull for program performance. Esta librería contiene los métodos necesarios para poder configurar todos los parámetros del sensor SRF02.
Fork of SRF02 by
SRF02.cpp
- Committer:
- nydus
- Date:
- 2011-02-25
- Revision:
- 0:559a18121e83
- Child:
- 1:d624771f0bd3
File content as of revision 0:559a18121e83:
#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(0.07); 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; // Get range data from SRF02 in inches cmd[0] = 0x00; cmd[1] = 0x50; m_i2c.write(m_addr, cmd, 2); wait(0.07); 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; } void SRF02::change_addr(char new_addr){ //Change adress of the device. Remember to have only one sensor conected to execute this method. 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); }