Matthias Grob / Mbed 2 deprecated FlyBed2

Dependencies:   mbed

Dependents:   fluy343

Committer:
maetugr
Date:
Sun Jul 06 09:25:09 2014 +0000
Revision:
6:1aa4f722e8e0
Parent:
5:06e978fd147a
before cascade PID - Rate, PID - Angle

Who changed what in which revision?

UserRevisionLine numberNew contents of line
maetugr 0:12950aa67f2a 1 #include "I2C_Sensor.h"
maetugr 0:12950aa67f2a 2
maetugr 0:12950aa67f2a 3 // calculate the 8-Bit write/read I2C-Address from the 7-Bit adress of the device
maetugr 0:12950aa67f2a 4 #define GET_I2C_WRITE_ADDRESS(ADR) (ADR << 1&0xFE) // ADR & 1111 1110
maetugr 0:12950aa67f2a 5 #define GET_I2C_READ_ADDRESS(ADR) (ADR << 1|0x01) // ADR | 0000 0001
maetugr 0:12950aa67f2a 6
maetugr 6:1aa4f722e8e0 7 I2C_Sensor::I2C_Sensor(PinName sda, PinName scl, char i2c_address) : i2c(sda, scl), local("local")
maetugr 0:12950aa67f2a 8 {
maetugr 0:12950aa67f2a 9 I2C_Sensor::i2c_address = i2c_address;
maetugr 5:06e978fd147a 10 i2c.frequency(400000); // standard speed
maetugr 5:06e978fd147a 11 //i2c.frequency(1000000); // ultrafast!
maetugr 0:12950aa67f2a 12 }
maetugr 0:12950aa67f2a 13
maetugr 0:12950aa67f2a 14 void I2C_Sensor::saveCalibrationValues(float values[], int size, char * filename)
maetugr 0:12950aa67f2a 15 {
maetugr 0:12950aa67f2a 16 FILE *fp = fopen(strcat("/local/", filename), "w");
maetugr 0:12950aa67f2a 17 for(int i = 0; i < size; i++)
maetugr 0:12950aa67f2a 18 fprintf(fp, "%f\r\n", values[i]);
maetugr 0:12950aa67f2a 19 fclose(fp);
maetugr 0:12950aa67f2a 20 }
maetugr 0:12950aa67f2a 21
maetugr 0:12950aa67f2a 22 void I2C_Sensor::loadCalibrationValues(float values[], int size, char * filename)
maetugr 0:12950aa67f2a 23 {
maetugr 0:12950aa67f2a 24 FILE *fp = fopen(strcat("/local/", filename), "r");
maetugr 0:12950aa67f2a 25 for(int i = 0; i < size; i++)
maetugr 0:12950aa67f2a 26 fscanf(fp, "%f", &values[i]);
maetugr 0:12950aa67f2a 27 fclose(fp);
maetugr 0:12950aa67f2a 28 }
maetugr 0:12950aa67f2a 29
maetugr 5:06e978fd147a 30 // I2C functions --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
maetugr 5:06e978fd147a 31
maetugr 0:12950aa67f2a 32
maetugr 0:12950aa67f2a 33 char I2C_Sensor::readRegister(char reg)
maetugr 0:12950aa67f2a 34 {
maetugr 0:12950aa67f2a 35 char value = 0;
maetugr 0:12950aa67f2a 36
maetugr 0:12950aa67f2a 37 i2c.write(i2c_address, &reg, 1);
maetugr 0:12950aa67f2a 38 i2c.read(i2c_address, &value, 1);
maetugr 0:12950aa67f2a 39
maetugr 0:12950aa67f2a 40 return value;
maetugr 0:12950aa67f2a 41 }
maetugr 0:12950aa67f2a 42
maetugr 0:12950aa67f2a 43 void I2C_Sensor::writeRegister(char reg, char data)
maetugr 0:12950aa67f2a 44 {
maetugr 0:12950aa67f2a 45 char buffer[2] = {reg, data};
maetugr 0:12950aa67f2a 46 i2c.write(i2c_address, buffer, 2);
maetugr 0:12950aa67f2a 47 }
maetugr 0:12950aa67f2a 48
maetugr 5:06e978fd147a 49 int I2C_Sensor::readMultiRegister(char reg, char* output, int size)
maetugr 0:12950aa67f2a 50 {
maetugr 5:06e978fd147a 51 if (0 != i2c.write (i2c_address, &reg, 1)) return 1; // tell register address of the MSB get the sensor to do slave-transmit subaddress updating.
maetugr 5:06e978fd147a 52 if (0 != i2c.read (i2c_address, output, size)) return 1; // tell it where to store the data read
maetugr 5:06e978fd147a 53 return 0;
maetugr 0:12950aa67f2a 54 }