code
Dependencies: MPU6050_SIM5320_TEST SDFileSystem WakeUp
Fork of Nucleo_L476RG_SDCard_WorkingSample by
SensorBoards.cpp@2:f745f2656606, 2017-09-13 (annotated)
- 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?
User | Revision | Line number | New 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 | } |