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

Committer:
humlet
Date:
Sun May 26 20:52:27 2013 +0000
Revision:
2:dfc8b09b4e3b
Parent:
SRF02_IF.cpp@1:32c4dd194228
Child:
3:70c946ba29cc
initial

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