algoritmo logica difusa sensores navegacion

Dependencies:   GPS MODI2C SRF05 mbed HMC5883

Committer:
arturocontreras
Date:
Sat Jul 19 05:35:58 2014 +0000
Revision:
0:1c15748ff0e1
logica difusa

Who changed what in which revision?

UserRevisionLine numberNew contents of line
arturocontreras 0:1c15748ff0e1 1 #include "I2C_Sensor.h"
arturocontreras 0:1c15748ff0e1 2
arturocontreras 0:1c15748ff0e1 3 // calculate the 8-Bit write/read I2C-Address from the 7-Bit adress of the device
arturocontreras 0:1c15748ff0e1 4 #define GET_I2C_WRITE_ADDRESS(ADR) (ADR << 1&0xFE) // ADR & 1111 1110
arturocontreras 0:1c15748ff0e1 5 #define GET_I2C_READ_ADDRESS(ADR) (ADR << 1|0x01) // ADR | 0000 0001
arturocontreras 0:1c15748ff0e1 6
arturocontreras 0:1c15748ff0e1 7 I2C_Sensor::I2C_Sensor(PinName sda, PinName scl, char i2c_address) : i2c_init(sda, scl), i2c(sda, scl), local("local")
arturocontreras 0:1c15748ff0e1 8 {
arturocontreras 0:1c15748ff0e1 9 I2C_Sensor::i2c_address = i2c_address;
arturocontreras 0:1c15748ff0e1 10 i2c_init.frequency(400000); // standard speed
arturocontreras 0:1c15748ff0e1 11 i2c.frequency(400000); // standard speed
arturocontreras 0:1c15748ff0e1 12 //i2c.frequency(1500000); // ultrafast!
arturocontreras 0:1c15748ff0e1 13 }
arturocontreras 0:1c15748ff0e1 14
arturocontreras 0:1c15748ff0e1 15 void I2C_Sensor::saveCalibrationValues(float values[], int size, char * filename)
arturocontreras 0:1c15748ff0e1 16 {
arturocontreras 0:1c15748ff0e1 17 FILE *fp = fopen(strcat("/local/", filename), "w");
arturocontreras 0:1c15748ff0e1 18 for(int i = 0; i < size; i++)
arturocontreras 0:1c15748ff0e1 19 fprintf(fp, "%f\r\n", values[i]);
arturocontreras 0:1c15748ff0e1 20 fclose(fp);
arturocontreras 0:1c15748ff0e1 21 }
arturocontreras 0:1c15748ff0e1 22
arturocontreras 0:1c15748ff0e1 23 void I2C_Sensor::loadCalibrationValues(float values[], int size, char * filename)
arturocontreras 0:1c15748ff0e1 24 {
arturocontreras 0:1c15748ff0e1 25 FILE *fp = fopen(strcat("/local/", filename), "r");
arturocontreras 0:1c15748ff0e1 26 for(int i = 0; i < size; i++)
arturocontreras 0:1c15748ff0e1 27 fscanf(fp, "%f", &values[i]);
arturocontreras 0:1c15748ff0e1 28 fclose(fp);
arturocontreras 0:1c15748ff0e1 29 }
arturocontreras 0:1c15748ff0e1 30
arturocontreras 0:1c15748ff0e1 31 //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
arturocontreras 0:1c15748ff0e1 32 // ATTENTION!!! there was a problem with other interrupts disturbing the i2c communication of the chip... that's why I use I2C to initialise the sonsors and MODI2C to get the data (only made with readMultiRegister)
arturocontreras 0:1c15748ff0e1 33 // IT DIDN'T WORK STABLE IN OTHER COMBINATIONS (if someone has an idea why please let me know)
arturocontreras 0:1c15748ff0e1 34 //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
arturocontreras 0:1c15748ff0e1 35
arturocontreras 0:1c15748ff0e1 36 char I2C_Sensor::readRegister(char reg)
arturocontreras 0:1c15748ff0e1 37 {
arturocontreras 0:1c15748ff0e1 38 char value = 0;
arturocontreras 0:1c15748ff0e1 39
arturocontreras 0:1c15748ff0e1 40 i2c_init.write(i2c_address, &reg, 1);
arturocontreras 0:1c15748ff0e1 41 i2c_init.read(i2c_address, &value, 1);
arturocontreras 0:1c15748ff0e1 42
arturocontreras 0:1c15748ff0e1 43 return value;
arturocontreras 0:1c15748ff0e1 44 }
arturocontreras 0:1c15748ff0e1 45
arturocontreras 0:1c15748ff0e1 46 void I2C_Sensor::writeRegister(char reg, char data)
arturocontreras 0:1c15748ff0e1 47 {
arturocontreras 0:1c15748ff0e1 48 char buffer[2] = {reg, data};
arturocontreras 0:1c15748ff0e1 49 i2c_init.write(i2c_address, buffer, 2);
arturocontreras 0:1c15748ff0e1 50 }
arturocontreras 0:1c15748ff0e1 51
arturocontreras 0:1c15748ff0e1 52 void I2C_Sensor::readMultiRegister(char reg, char* output, int size)
arturocontreras 0:1c15748ff0e1 53 {
arturocontreras 0:1c15748ff0e1 54 i2c.write (i2c_address, &reg, 1); // tell register address of the MSB get the sensor to do slave-transmit subaddress updating.
arturocontreras 0:1c15748ff0e1 55 i2c.read (i2c_address, output, size); // tell it where to store the data read
arturocontreras 0:1c15748ff0e1 56 }