code
Dependencies: MPU6050_SIM5320_TEST SDFileSystem WakeUp
Fork of Nucleo_L476RG_SDCard_WorkingSample by
Diff: SensorBoards.cpp
- Revision:
- 2:f745f2656606
- Parent:
- 1:d5774258d18b
--- a/SensorBoards.cpp Sat Sep 09 14:36:17 2017 +0000 +++ b/SensorBoards.cpp Wed Sep 13 16:07:18 2017 +0000 @@ -1,39 +1,120 @@ #include "SensorBoards.h" - -uint8_t SensorBoards::getSensorNumbers(uint8_t address) -{ - //return boards[0].numberOfSensors; -} -uint8_t SensorBoards::getSensorIDs(uint8_t address, uint8_t *IDBuffer) -{ +#include "mbed.h" -} -void SensorBoards::getSensorReadings(uint8_t address, uint8_t ID, uint8_t* IDMeasure) +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::sensorBoardScanner() +uint8_t SensorBoards::getSensorIDs() { - 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 - printf("ACK from the Device at Address %#4x\n\r",Device_Adress>>1); - //lcd.printf("ACK at:%#4x\n",Device_Adress); - boards[0].I2CAddress=Device_Adress>>1; - count=count+1; + //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("\n\r %d Devices have been detected!\n\r",count); - if (count!=0) - return 1; -else - return 0; -} -uint8_t SensorBoards::returnBoardAdd() -{ - return boards[0].I2CAddress; -} \ No newline at end of file + + // 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; + } \ No newline at end of file