code

Dependencies:   MPU6050_SIM5320_TEST SDFileSystem WakeUp

Fork of Nucleo_L476RG_SDCard_WorkingSample by M J.

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;
    }