code

Dependencies:   MPU6050_SIM5320_TEST SDFileSystem WakeUp

Fork of Nucleo_L476RG_SDCard_WorkingSample by M J.

Committer:
suads
Date:
Wed Sep 13 16:07:18 2017 +0000
Revision:
2:f745f2656606
Parent:
1:d5774258d18b
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suads 1:d5774258d18b 1 #include "SensorBoards.h"
suads 2:f745f2656606 2 #include "mbed.h"
suads 1:d5774258d18b 3
suads 1:d5774258d18b 4
suads 2:f745f2656606 5 uint8_t SensorBoards::getSensorNumbers()
suads 1:d5774258d18b 6 {
suads 2:f745f2656606 7 I2C i2c(D14, D15);
suads 2:f745f2656606 8 char cmd[1];
suads 2:f745f2656606 9 for(int i=0; i<numberOfBoards; i++) {
suads 2:f745f2656606 10 uint8_t write_adress=(boards[i].I2CAddress << 1) & 0xFE;
suads 2:f745f2656606 11 uint8_t read_adress=(boards[i].I2CAddress << 1) | 0x01;
suads 2:f745f2656606 12 i2c.start();
suads 2:f745f2656606 13 i2c.write(write_adress); //WRITE_ADRESS
suads 2:f745f2656606 14 i2c.write(SENSOR_NUMBERS); //CMD 0XA1
suads 2:f745f2656606 15 wait(0.5);
suads 2:f745f2656606 16 i2c.stop();
suads 2:f745f2656606 17 i2c.start();
suads 2:f745f2656606 18 i2c.read(read_adress,cmd,1);
suads 2:f745f2656606 19 i2c.stop();
suads 2:f745f2656606 20 boards[i].numberOfSensors=cmd[0];
suads 2:f745f2656606 21 //printf("beoj senzora %d\n",boards[i].numberOfSensors);
suads 2:f745f2656606 22 }
suads 2:f745f2656606 23 return 1;
suads 2:f745f2656606 24
suads 2:f745f2656606 25
suads 1:d5774258d18b 26
suads 1:d5774258d18b 27
suads 2:f745f2656606 28 //return boards[0].numberOfSensors;
suads 1:d5774258d18b 29 }
suads 2:f745f2656606 30 uint8_t SensorBoards::getSensorIDs()
suads 1:d5774258d18b 31 {
suads 2:f745f2656606 32 //wait(3);
suads 2:f745f2656606 33 char cmd[2];
suads 2:f745f2656606 34 //printf("a1=%02x",boards[0].I2CAddress);
suads 2:f745f2656606 35 I2C i2c(D14, D15);
suads 2:f745f2656606 36 printf("Get sensor id's\n");
suads 2:f745f2656606 37 // uint8_t length=2;//get_sensor_numbers(adress);
suads 2:f745f2656606 38 // uint8_t i=0;
suads 2:f745f2656606 39 // uint8_t value=0;
suads 2:f745f2656606 40 // printf("adresa= %02x",boards[0].I2CAddress);
suads 2:f745f2656606 41 for(int i=0; i<numberOfBoards; i++) {
suads 2:f745f2656606 42 //for(int k=0; k<boards[i].numberOfSensors; k++) {
suads 2:f745f2656606 43 //printf("__%02x",boards[0].I2CAddress);
suads 2:f745f2656606 44 // uint8_t write_adress=(0x4a << 1) & 0xFE;
suads 2:f745f2656606 45 //uint8_t read_adress=(0x4a << 1) | 0x01;
suads 2:f745f2656606 46 uint8_t write_adress=(boards[i].I2CAddress << 1) & 0xFE;
suads 2:f745f2656606 47 uint8_t read_adress=(boards[i].I2CAddress << 1) | 0x01;
suads 2:f745f2656606 48 i2c.start();//SD_CARD_WRITE
suads 2:f745f2656606 49 i2c.write(write_adress);
suads 2:f745f2656606 50 i2c.write(SENSORS_IDS); //A2
suads 2:f745f2656606 51 wait(0.5);
suads 2:f745f2656606 52 i2c.stop();
suads 2:f745f2656606 53 wait(0.5);
suads 2:f745f2656606 54 i2c.start();
suads 2:f745f2656606 55 i2c.read(read_adress,cmd,2);
suads 2:f745f2656606 56 i2c.stop();
suads 2:f745f2656606 57 // boards[i].sensorIDs[i]=
suads 2:f745f2656606 58 // IDBuffer[0]=cmd[0];
suads 2:f745f2656606 59
suads 2:f745f2656606 60 for(int k=0; k<boards[i].numberOfSensors; k++) {
suads 2:f745f2656606 61 boards[i].sensorIDs[k]=cmd[k];
suads 2:f745f2656606 62 // printf("ove %d\n",boards[i].sensorIDs[k]);
suads 1:d5774258d18b 63 }
suads 1:d5774258d18b 64 }
suads 2:f745f2656606 65
suads 2:f745f2656606 66 // printf("prosoooo sammmmm\n");
suads 2:f745f2656606 67 //printf("i=%02x \n",IDBuffer[1]);
suads 2:f745f2656606 68 return 1;
suads 2:f745f2656606 69 }
suads 2:f745f2656606 70 void SensorBoards::getSensorReadings(uint8_t address, uint8_t ID, uint8_t *IDMeasure) {
suads 2:f745f2656606 71 I2C i2c(D14, D15);
suads 2:f745f2656606 72 char cmd[4];
suads 2:f745f2656606 73 float value;
suads 2:f745f2656606 74 uint8_t write_adress=(address << 1) & 0xFE;
suads 2:f745f2656606 75 uint8_t read_adress=(address << 1) | 0x01;
suads 2:f745f2656606 76 i2c.start();//SD_CARD_WRITE
suads 2:f745f2656606 77 i2c.write(write_adress);
suads 2:f745f2656606 78 i2c.write(SENSOR_READINGS); //A3
suads 2:f745f2656606 79 wait(0.2);
suads 2:f745f2656606 80 i2c.write(ID); //id
suads 2:f745f2656606 81 i2c.stop();
suads 2:f745f2656606 82 wait(2);
suads 2:f745f2656606 83 i2c.start();
suads 2:f745f2656606 84 i2c.read(read_adress,cmd,4);
suads 2:f745f2656606 85 i2c.stop();
suads 2:f745f2656606 86 memcpy(&value,&cmd,4);
suads 2:f745f2656606 87 //*val=value;
suads 2:f745f2656606 88 for(int i=0;i<4;i++)
suads 2:f745f2656606 89 IDMeasure[i]=cmd[i];
suads 2:f745f2656606 90 printf("value=%f \n",value);
suads 2:f745f2656606 91 // return 1;
suads 2:f745f2656606 92
suads 2:f745f2656606 93
suads 2:f745f2656606 94
suads 2:f745f2656606 95
suads 2:f745f2656606 96 }
suads 2:f745f2656606 97 uint8_t SensorBoards::sensorBoardScanner() {
suads 2:f745f2656606 98 char ucdata_write[2];
suads 2:f745f2656606 99 short count=0;
suads 2:f745f2656606 100 I2C i2c(D14, D15); // sda, scl
suads 2:f745f2656606 101 for (int Device_Adress=0; Device_Adress<=0xFE; Device_Adress+=2) { //Stepping in 2 Because Read/Write use LSB
suads 2:f745f2656606 102 if (!i2c.write((Device_Adress|WRITE), ucdata_write, 1, 0)) { // Check for ACK from i2c Device NB I am 'ORing' the Write Bit
suads 2:f745f2656606 103 if(Device_Adress>>1!=0x68) {
suads 2:f745f2656606 104 //printf("ACK from the Device at Address %#4x\n\r",Device_Adress>>1);
suads 2:f745f2656606 105 //lcd.printf("ACK at:%#4x\n",Device_Adress);
suads 2:f745f2656606 106 boards[count].I2CAddress=Device_Adress>>1;
suads 2:f745f2656606 107 count++;
suads 2:f745f2656606 108 numberOfBoards++;
suads 2:f745f2656606 109 }
suads 2:f745f2656606 110 }
suads 2:f745f2656606 111 }
suads 2:f745f2656606 112 //printf("\n\r %d Devices have been detected!\n\r",count);
suads 2:f745f2656606 113 if (numberOfBoards!=0)
suads 2:f745f2656606 114 return 1;
suads 2:f745f2656606 115 else
suads 2:f745f2656606 116 return 0;
suads 2:f745f2656606 117 }
suads 2:f745f2656606 118 uint8_t SensorBoards::returnBoardAdd() {
suads 2:f745f2656606 119 return boards[0].I2CAddress;
suads 2:f745f2656606 120 }