Robinson Lopez Monzon / SRF02
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers SRF02.cpp Source File

SRF02.cpp

00001 #include "SRF02.h"
00002 
00003 
00004 SRF02::SRF02(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr) {
00005     }
00006 
00007 SRF02::~SRF02() {
00008 
00009 }
00010 
00011 //Get the data in centimeters
00012 
00013 int SRF02::readcm() {
00014 
00015     char cmd[2];
00016     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;
00017 
00018 
00019 // Get range data from SRF02 in centimeters
00020     cmd[0] = 0x00;                      
00021     cmd[1] = 0x51;                     
00022     m_i2c.write(m_addr, cmd, 2);          
00023 
00024     wait(0.07);                         
00025 
00026 
00027     cmd[0] = 0x02;                        
00028     m_i2c.write(m_addr, cmd, 1, 1);        
00029     m_i2c.read(m_addr, eco_high, 1);            
00030     
00031     cmd[0] = 0x03;
00032     m_i2c.write(m_addr,cmd,1,1);
00033     m_i2c.read(m_addr,eco_low,1);
00034 
00035     int range = (eco_high[0]<<8)|eco_low[0];
00036 
00037     return range;
00038 }
00039 
00040 //Get the data in inches
00041 
00042 int SRF02::readinch() {
00043 
00044     char cmd[2];
00045     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;
00046 
00047 
00048 // Get range data from SRF02 in inches
00049     cmd[0] = 0x00;                      
00050     cmd[1] = 0x50;                     
00051     m_i2c.write(m_addr, cmd, 2);          
00052 
00053     wait(0.07);                         
00054 
00055 
00056     cmd[0] = 0x02;                        
00057     m_i2c.write(m_addr, cmd, 1, 1);        
00058     m_i2c.read(m_addr, eco_high, 1);            
00059     
00060     cmd[0] = 0x03;
00061     m_i2c.write(m_addr,cmd,1,1);
00062     m_i2c.read(m_addr,eco_low,1);
00063 
00064     int range = (eco_high[0]<<8)|eco_low[0];
00065 
00066     return range;
00067 }
00068 
00069 void SRF02::change_addr(char new_addr){
00070 
00071 //Change adress of the device. Remember to have only one sensor conected to execute this method.
00072 
00073     char cmd[2];
00074     
00075     cmd[0]=0x00;
00076     cmd[1]=0xA0;
00077     m_i2c.write(m_addr,cmd,2);
00078     cmd[0]=0x00;
00079     cmd[1]=0xAA;
00080     m_i2c.write(m_addr,cmd,2);
00081     cmd[0]=0x00;
00082     cmd[1]=0xA5;
00083     m_i2c.write(m_addr,cmd,2);
00084     cmd[0]=0x00;
00085     cmd[1]=new_addr;
00086     m_i2c.write(m_addr,cmd,2);
00087     
00088     }
00089