minor modified version

Dependents:   uchiwa_tone

Fork of MjGP2Y0E03 by Takashi Matsuoka

Committer:
okano
Date:
Mon Jun 08 09:48:44 2015 +0000
Revision:
2:a79f43833351
Parent:
1:1832cde75561
Customized version of "MjGP2Y0E03" library. ; Added a function which returns normalized distance (from 0.0 to 1.0).; Namespace definition is removed.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
matsujirushi 0:33c4a1de6547 1 #include "MjGP2Y0E03.h"
matsujirushi 0:33c4a1de6547 2
matsujirushi 1:1832cde75561 3 #define IMAGE_SENSOR_DATA_NUMBER (220)
matsujirushi 1:1832cde75561 4
okano 2:a79f43833351 5 //namespace matsujirushi {
matsujirushi 0:33c4a1de6547 6
matsujirushi 0:33c4a1de6547 7 MjGP2Y0E03::MjGP2Y0E03(I2C* i2c, uint8_t address)
matsujirushi 0:33c4a1de6547 8 {
matsujirushi 0:33c4a1de6547 9 this->i2c = i2c;
matsujirushi 0:33c4a1de6547 10 this->address = address;
matsujirushi 0:33c4a1de6547 11 }
matsujirushi 0:33c4a1de6547 12
matsujirushi 0:33c4a1de6547 13 uint16_t MjGP2Y0E03::getDistance()
matsujirushi 0:33c4a1de6547 14 {
matsujirushi 1:1832cde75561 15 uint8_t data[2];
matsujirushi 1:1832cde75561 16
matsujirushi 1:1832cde75561 17 read(0x5e, data, sizeof (data)); // Distance
matsujirushi 1:1832cde75561 18
matsujirushi 1:1832cde75561 19 return ((uint16_t)data[0] << 4) + (data[1] & 0x0f);
matsujirushi 1:1832cde75561 20 }
matsujirushi 1:1832cde75561 21
okano 2:a79f43833351 22 float MjGP2Y0E03::rd()
okano 2:a79f43833351 23 {
okano 2:a79f43833351 24 return ( (float)getDistance() / 4095.0 );
okano 2:a79f43833351 25 }
okano 2:a79f43833351 26
matsujirushi 1:1832cde75561 27 bool MjGP2Y0E03::getImageSensorData(uint32_t *data, size_t dataSize, size_t *dataSizeActual)
matsujirushi 1:1832cde75561 28 {
okano 2:a79f43833351 29 if (dataSize < sizeof (uint32_t) * 220) {
okano 2:a79f43833351 30 if (dataSizeActual != NULL) {
matsujirushi 1:1832cde75561 31 *dataSizeActual = sizeof (uint32_t) * 220;
matsujirushi 1:1832cde75561 32 }
matsujirushi 1:1832cde75561 33 return false;
matsujirushi 1:1832cde75561 34 }
okano 2:a79f43833351 35
matsujirushi 1:1832cde75561 36 // write(0xef, 0x00); // Bank Select = Bank0
matsujirushi 1:1832cde75561 37 // write(0xec, 0xff); // Clock Select = manual clock
matsujirushi 1:1832cde75561 38 // wait_ms(80);
okano 2:a79f43833351 39
matsujirushi 1:1832cde75561 40 write(0x03, 0x00); // Hold Bit = Hold
matsujirushi 1:1832cde75561 41 wait_ms(80);
okano 2:a79f43833351 42
matsujirushi 1:1832cde75561 43 write(0x4c, 0x10); // SRAM Access = Access SRAM
matsujirushi 1:1832cde75561 44 wait_ms(80);
okano 2:a79f43833351 45
matsujirushi 1:1832cde75561 46 uint8_t dataL[IMAGE_SENSOR_DATA_NUMBER];
matsujirushi 1:1832cde75561 47 write(0x90, 0x10); // Read out Image Sensor Data = Low Level
matsujirushi 1:1832cde75561 48 read(0x00, dataL, sizeof (dataL));
okano 2:a79f43833351 49
matsujirushi 1:1832cde75561 50 uint8_t dataM[IMAGE_SENSOR_DATA_NUMBER];
matsujirushi 1:1832cde75561 51 write(0x90, 0x11); // Read out Image Sensor Data = Middle Level
matsujirushi 1:1832cde75561 52 read(0x00, dataM, sizeof (dataM));
okano 2:a79f43833351 53
matsujirushi 1:1832cde75561 54 uint8_t dataH[IMAGE_SENSOR_DATA_NUMBER];
matsujirushi 1:1832cde75561 55 write(0x90, 0x12); // Read out Image Sensor Data = High Level
matsujirushi 1:1832cde75561 56 read(0x00, dataH, sizeof (dataH));
matsujirushi 1:1832cde75561 57
matsujirushi 1:1832cde75561 58 write(0x90, 0x00); // Read out Image Sensor Data = Disable
matsujirushi 1:1832cde75561 59 write(0x03, 0x01); // Hold Bit = Device enable normally
okano 2:a79f43833351 60
okano 2:a79f43833351 61 for (int i = 0; i < IMAGE_SENSOR_DATA_NUMBER; i++) {
matsujirushi 1:1832cde75561 62 *data++ = dataH[i] * 65536 + dataM[i] * 256 + dataL[i];
matsujirushi 1:1832cde75561 63 }
okano 2:a79f43833351 64 if (dataSizeActual != NULL) {
matsujirushi 1:1832cde75561 65 *dataSizeActual = sizeof (uint32_t) * 220;
matsujirushi 1:1832cde75561 66 }
matsujirushi 1:1832cde75561 67
okano 2:a79f43833351 68 return true;
matsujirushi 1:1832cde75561 69 }
matsujirushi 1:1832cde75561 70
matsujirushi 1:1832cde75561 71 void MjGP2Y0E03::read(uint8_t regAddress, uint8_t *data, size_t dataSize)
matsujirushi 1:1832cde75561 72 {
matsujirushi 1:1832cde75561 73 i2c->write(address, (char*)&regAddress, 1, true);
matsujirushi 1:1832cde75561 74 i2c->read(address, (char*)data, dataSize);
matsujirushi 1:1832cde75561 75 }
matsujirushi 1:1832cde75561 76
matsujirushi 1:1832cde75561 77 void MjGP2Y0E03::write(uint8_t regAddress, uint8_t data)
matsujirushi 1:1832cde75561 78 {
matsujirushi 1:1832cde75561 79 char buffer[] = { regAddress, data, };
matsujirushi 1:1832cde75561 80 i2c->write(address, buffer, sizeof (buffer));
matsujirushi 0:33c4a1de6547 81 }
matsujirushi 0:33c4a1de6547 82
okano 2:a79f43833351 83 //} // namespace matsujirushi
matsujirushi 0:33c4a1de6547 84
okano 2:a79f43833351 85