code

Dependencies:   MPU6050_SIM5320_TEST SDFileSystem WakeUp

Fork of Nucleo_L476RG_SDCard_WorkingSample by M J.

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