Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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
