Interface library for the Devantech SRF02/SRF08 ultrasonic i2c rangers. Depends on I2cRtosDriver lib!

Committer:
humlet
Date:
Sat Jun 01 07:40:00 2013 +0000
Revision:
3:70c946ba29cc
Parent:
2:dfc8b09b4e3b
commitNpublish

Who changed what in which revision?

UserRevisionLine numberNew contents of line
humlet 2:dfc8b09b4e3b 1 #include "Srf0208IF.h"
humlet 2:dfc8b09b4e3b 2 #include "Thread.h"
humlet 2:dfc8b09b4e3b 3 #include "I2CMasterRtos.h"
humlet 0:2686e857daf6 4
humlet 2:dfc8b09b4e3b 5 using namespace mbed;
humlet 3:70c946ba29cc 6 using namespace rtos;
humlet 2:dfc8b09b4e3b 7
humlet 2:dfc8b09b4e3b 8 bool Srf0208IF::triggerRanging()
humlet 0:2686e857daf6 9 {
humlet 0:2686e857daf6 10 const char regNcmd[2]= {0x00,0x52};
humlet 2:dfc8b09b4e3b 11 return !m_i2c.write(m_adr, regNcmd, 2);
humlet 0:2686e857daf6 12 }
humlet 2:dfc8b09b4e3b 13 int Srf0208IF::readTransitTime_us()
humlet 0:2686e857daf6 14 {
humlet 0:2686e857daf6 15 char result[2];
humlet 2:dfc8b09b4e3b 16 bool ok = !m_i2c.read(m_adr, 0x02, result, 2);
humlet 2:dfc8b09b4e3b 17 return ok ? twoByte2int(result) : -1;
humlet 0:2686e857daf6 18 }
humlet 2:dfc8b09b4e3b 19 void Srf0208IF::resetI2CAdress(int newAddress)
humlet 0:2686e857daf6 20 {
humlet 0:2686e857daf6 21 char regNcmd[2];
humlet 0:2686e857daf6 22
humlet 0:2686e857daf6 23 regNcmd[0]=0x00;
humlet 0:2686e857daf6 24
humlet 0:2686e857daf6 25 regNcmd[1]=0xA0;
humlet 0:2686e857daf6 26 m_i2c.write(m_adr,regNcmd,2);
humlet 2:dfc8b09b4e3b 27 Thread::wait(50);
humlet 0:2686e857daf6 28
humlet 0:2686e857daf6 29 regNcmd[1]=0xAA;
humlet 0:2686e857daf6 30 m_i2c.write(m_adr,regNcmd,2);
humlet 2:dfc8b09b4e3b 31 Thread::wait(50);
humlet 0:2686e857daf6 32
humlet 0:2686e857daf6 33 regNcmd[1]=0xA5;
humlet 0:2686e857daf6 34 m_i2c.write(m_adr,regNcmd,2);
humlet 2:dfc8b09b4e3b 35 Thread::wait(50);
humlet 0:2686e857daf6 36
humlet 0:2686e857daf6 37 regNcmd[1]=newAddress;
humlet 0:2686e857daf6 38 m_i2c.write(m_adr,regNcmd,2);
humlet 2:dfc8b09b4e3b 39 Thread::wait(50);
humlet 2:dfc8b09b4e3b 40 }
humlet 2:dfc8b09b4e3b 41 int Srf0208IF::readSWRevision()
humlet 2:dfc8b09b4e3b 42 {
humlet 2:dfc8b09b4e3b 43 char swRev;
humlet 2:dfc8b09b4e3b 44 bool ok = !m_i2c.read(m_adr, 0x00, &swRev, 1);
humlet 2:dfc8b09b4e3b 45 return ok && swRev!=0xff ? swRev : -1;
humlet 2:dfc8b09b4e3b 46 }
humlet 2:dfc8b09b4e3b 47
humlet 2:dfc8b09b4e3b 48
humlet 2:dfc8b09b4e3b 49
humlet 2:dfc8b09b4e3b 50 bool Srf02IF::triggerPing()
humlet 2:dfc8b09b4e3b 51 {
humlet 2:dfc8b09b4e3b 52 const char regNcmd[2]= {0x00,0x5C};
humlet 2:dfc8b09b4e3b 53 return !m_i2c.write(m_adr, regNcmd, 2);
humlet 2:dfc8b09b4e3b 54 }
humlet 2:dfc8b09b4e3b 55 bool Srf02IF::triggerEchoMeasurement()
humlet 2:dfc8b09b4e3b 56 {
humlet 2:dfc8b09b4e3b 57 const char regNcmd[2]= {0x00,0x58};
humlet 2:dfc8b09b4e3b 58 return !m_i2c.write(m_adr, regNcmd, 2);
humlet 2:dfc8b09b4e3b 59 }
humlet 2:dfc8b09b4e3b 60 int Srf02IF::readMinimalTransitTime_us()
humlet 2:dfc8b09b4e3b 61 {
humlet 2:dfc8b09b4e3b 62 char result[2];
humlet 2:dfc8b09b4e3b 63 bool ok = !m_i2c.read(m_adr, 0x04, result, 2);
humlet 2:dfc8b09b4e3b 64 return ok ? twoByte2int(result) : -1;
humlet 0:2686e857daf6 65 }
humlet 0:2686e857daf6 66
humlet 0:2686e857daf6 67
humlet 2:dfc8b09b4e3b 68
humlet 2:dfc8b09b4e3b 69 int Srf08IF::readBrightness()
humlet 2:dfc8b09b4e3b 70 {
humlet 2:dfc8b09b4e3b 71 char val;
humlet 2:dfc8b09b4e3b 72 bool ok = !m_i2c.read(m_adr, 0x01, &val, 1);
humlet 2:dfc8b09b4e3b 73 return ok ? val : -1;
humlet 2:dfc8b09b4e3b 74 }
humlet 2:dfc8b09b4e3b 75 bool Srf08IF::triggerANNRanging()
humlet 2:dfc8b09b4e3b 76 {
humlet 2:dfc8b09b4e3b 77 const char regNcmd[2]= {0x00,0x55};
humlet 2:dfc8b09b4e3b 78 return !m_i2c.write(m_adr, regNcmd, 2);
humlet 2:dfc8b09b4e3b 79 }
humlet 2:dfc8b09b4e3b 80 bool Srf08IF::writeMaxDist(int maxDst)
humlet 2:dfc8b09b4e3b 81 {
humlet 2:dfc8b09b4e3b 82 char regNcmd[2];
humlet 2:dfc8b09b4e3b 83 regNcmd[0] = 0x02;
humlet 2:dfc8b09b4e3b 84 regNcmd[0] = (char)maxDst;
humlet 2:dfc8b09b4e3b 85 return !m_i2c.write(m_adr, regNcmd, 2);
humlet 2:dfc8b09b4e3b 86 }
humlet 2:dfc8b09b4e3b 87 bool Srf08IF::writeMaxGain(int maxGain)
humlet 2:dfc8b09b4e3b 88 {
humlet 2:dfc8b09b4e3b 89 char regNcmd[2];
humlet 2:dfc8b09b4e3b 90 regNcmd[0] = 0x01;
humlet 2:dfc8b09b4e3b 91 regNcmd[0] = (char)maxGain;
humlet 2:dfc8b09b4e3b 92 return !m_i2c.write(m_adr, regNcmd, 2);
humlet 2:dfc8b09b4e3b 93 }
humlet 2:dfc8b09b4e3b 94 bool Srf08IF::burstRead(int startReg, int stopReg)
humlet 2:dfc8b09b4e3b 95 {
humlet 2:dfc8b09b4e3b 96 if(startReg<0)startReg=0;
humlet 2:dfc8b09b4e3b 97 if(stopReg>35)stopReg=35;
humlet 2:dfc8b09b4e3b 98 return !m_i2c.read(m_adr, startReg, &(m_rawBuffer[startReg]), stopReg-startReg+1);
humlet 2:dfc8b09b4e3b 99 }
humlet 2:dfc8b09b4e3b 100
humlet 2:dfc8b09b4e3b 101
humlet 2:dfc8b09b4e3b 102
humlet 2:dfc8b09b4e3b 103
humlet 2:dfc8b09b4e3b 104
humlet 2:dfc8b09b4e3b 105
humlet 2:dfc8b09b4e3b 106
humlet 2:dfc8b09b4e3b 107
humlet 2:dfc8b09b4e3b 108