code
Dependencies: MPU6050_SIM5320_TEST SDFileSystem WakeUp
Fork of Nucleo_L476RG_SDCard_WorkingSample by
SensorBoards.cpp
- Committer:
- suads
- Date:
- 2017-09-13
- Revision:
- 2:f745f2656606
- Parent:
- 1:d5774258d18b
File content as of revision 2:f745f2656606:
#include "SensorBoards.h" #include "mbed.h" uint8_t SensorBoards::getSensorNumbers() { I2C i2c(D14, D15); char cmd[1]; for(int i=0; i<numberOfBoards; i++) { uint8_t write_adress=(boards[i].I2CAddress << 1) & 0xFE; uint8_t read_adress=(boards[i].I2CAddress << 1) | 0x01; i2c.start(); i2c.write(write_adress); //WRITE_ADRESS i2c.write(SENSOR_NUMBERS); //CMD 0XA1 wait(0.5); i2c.stop(); i2c.start(); i2c.read(read_adress,cmd,1); i2c.stop(); boards[i].numberOfSensors=cmd[0]; //printf("beoj senzora %d\n",boards[i].numberOfSensors); } return 1; //return boards[0].numberOfSensors; } uint8_t SensorBoards::getSensorIDs() { //wait(3); char cmd[2]; //printf("a1=%02x",boards[0].I2CAddress); I2C i2c(D14, D15); printf("Get sensor id's\n"); // uint8_t length=2;//get_sensor_numbers(adress); // uint8_t i=0; // uint8_t value=0; // printf("adresa= %02x",boards[0].I2CAddress); for(int i=0; i<numberOfBoards; i++) { //for(int k=0; k<boards[i].numberOfSensors; k++) { //printf("__%02x",boards[0].I2CAddress); // uint8_t write_adress=(0x4a << 1) & 0xFE; //uint8_t read_adress=(0x4a << 1) | 0x01; uint8_t write_adress=(boards[i].I2CAddress << 1) & 0xFE; uint8_t read_adress=(boards[i].I2CAddress << 1) | 0x01; i2c.start();//SD_CARD_WRITE i2c.write(write_adress); i2c.write(SENSORS_IDS); //A2 wait(0.5); i2c.stop(); wait(0.5); i2c.start(); i2c.read(read_adress,cmd,2); i2c.stop(); // boards[i].sensorIDs[i]= // IDBuffer[0]=cmd[0]; for(int k=0; k<boards[i].numberOfSensors; k++) { boards[i].sensorIDs[k]=cmd[k]; // printf("ove %d\n",boards[i].sensorIDs[k]); } } // printf("prosoooo sammmmm\n"); //printf("i=%02x \n",IDBuffer[1]); return 1; } void SensorBoards::getSensorReadings(uint8_t address, uint8_t ID, uint8_t *IDMeasure) { I2C i2c(D14, D15); char cmd[4]; float value; uint8_t write_adress=(address << 1) & 0xFE; uint8_t read_adress=(address << 1) | 0x01; i2c.start();//SD_CARD_WRITE i2c.write(write_adress); i2c.write(SENSOR_READINGS); //A3 wait(0.2); i2c.write(ID); //id i2c.stop(); wait(2); i2c.start(); i2c.read(read_adress,cmd,4); i2c.stop(); memcpy(&value,&cmd,4); //*val=value; for(int i=0;i<4;i++) IDMeasure[i]=cmd[i]; printf("value=%f \n",value); // return 1; } uint8_t SensorBoards::sensorBoardScanner() { char ucdata_write[2]; short count=0; I2C i2c(D14, D15); // sda, scl for (int Device_Adress=0; Device_Adress<=0xFE; Device_Adress+=2) { //Stepping in 2 Because Read/Write use LSB if (!i2c.write((Device_Adress|WRITE), ucdata_write, 1, 0)) { // Check for ACK from i2c Device NB I am 'ORing' the Write Bit if(Device_Adress>>1!=0x68) { //printf("ACK from the Device at Address %#4x\n\r",Device_Adress>>1); //lcd.printf("ACK at:%#4x\n",Device_Adress); boards[count].I2CAddress=Device_Adress>>1; count++; numberOfBoards++; } } } //printf("\n\r %d Devices have been detected!\n\r",count); if (numberOfBoards!=0) return 1; else return 0; } uint8_t SensorBoards::returnBoardAdd() { return boards[0].I2CAddress; }