Sensor library

Committer:
jmateo09
Date:
Wed May 15 13:44:30 2019 +0000
Revision:
0:7c37eb579038
Sensors

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jmateo09 0:7c37eb579038 1 #include "Sensors.h"
jmateo09 0:7c37eb579038 2
jmateo09 0:7c37eb579038 3 Magnetic::Magnetic(): i2c(p28, p27)
jmateo09 0:7c37eb579038 4 {
jmateo09 0:7c37eb579038 5
jmateo09 0:7c37eb579038 6 }
jmateo09 0:7c37eb579038 7
jmateo09 0:7c37eb579038 8 ////////////////////////////////////TLV493//////////////////////////////////////
jmateo09 0:7c37eb579038 9 void Magnetic::ReadMag(float *output)
jmateo09 0:7c37eb579038 10 {
jmateo09 0:7c37eb579038 11 char Data[7];
jmateo09 0:7c37eb579038 12 int i;
jmateo09 0:7c37eb579038 13 i2c.read( HallAddress,Data,7);
jmateo09 0:7c37eb579038 14
jmateo09 0:7c37eb579038 15 i = Data[6] | ((Data[3] & 0xF0) <<4);
jmateo09 0:7c37eb579038 16 i = (i >> 11) == 0 ? i : -1 ^ 0xFFF | i;
jmateo09 0:7c37eb579038 17 output[3] = (i-320)*1.1;
jmateo09 0:7c37eb579038 18
jmateo09 0:7c37eb579038 19 i =((Data[4] & 0xF0)>>4) | (Data[0] <<4);
jmateo09 0:7c37eb579038 20 i = (i >> 11) == 0 ? i : -1 ^ 0xFFF | i;
jmateo09 0:7c37eb579038 21 output[0]=i * 0.098 * 10.0; //0.098mT/LSB 10Gauss/mT;
jmateo09 0:7c37eb579038 22 if(abs(output[0])<2) //the sensor has about a 0.2mT | 2Gauss units drift
jmateo09 0:7c37eb579038 23 output[0] = 0; //this is a software filter that suppresses most of the noise
jmateo09 0:7c37eb579038 24
jmateo09 0:7c37eb579038 25 i =(Data[4] & 0x0F) | (Data[1] <<4);
jmateo09 0:7c37eb579038 26 i = (i >> 11) == 0 ? i : -1 ^ 0xFFF | i;
jmateo09 0:7c37eb579038 27 output[1]=i * 0.098 * 10.0; //0.098mT/LSB 10Gauss/mT;
jmateo09 0:7c37eb579038 28 if(abs(output[1])<2) //the sensor has about a 0.2mT | 2Gauss units drift
jmateo09 0:7c37eb579038 29 output[1] = 0; //this is a software filter that suppresses most of the noise
jmateo09 0:7c37eb579038 30
jmateo09 0:7c37eb579038 31 i =(Data[5] & 0x0F) | (Data[2] <<4);
jmateo09 0:7c37eb579038 32 i = (i >> 11) == 0 ? i : -1 ^ 0xFFF | i;
jmateo09 0:7c37eb579038 33 output[2]=i * 0.098 * 10.0; //0.098mT/LSB 10Gauss/mT;
jmateo09 0:7c37eb579038 34 // if(abs(output[2])<2) //the sensor has about a 0.2mT | 2Gauss units drift
jmateo09 0:7c37eb579038 35 // output[2] = 0; //this is a software filter that suppresses most of the noise
jmateo09 0:7c37eb579038 36 }
jmateo09 0:7c37eb579038 37
jmateo09 0:7c37eb579038 38 Accelerometer::Accelerometer(): accelerometer(p28, p27)
jmateo09 0:7c37eb579038 39 {
jmateo09 0:7c37eb579038 40
jmateo09 0:7c37eb579038 41 }
jmateo09 0:7c37eb579038 42
jmateo09 0:7c37eb579038 43 void Accelerometer::Init()
jmateo09 0:7c37eb579038 44 {
jmateo09 0:7c37eb579038 45 //Setup up of the Accelerometer(ADXL345),refer to the Mbed libary for any changes.
jmateo09 0:7c37eb579038 46 accelerometer.setPowerControl(0x00); //Go into standby mode to configure the device.
jmateo09 0:7c37eb579038 47 accelerometer.setDataFormatControl(0x0B); //Full resolution, +/-16g, 4mg/LSB.
jmateo09 0:7c37eb579038 48 accelerometer.setDataRate(ADXL345_25HZ); //25Hz data rate.
jmateo09 0:7c37eb579038 49 accelerometer.setPowerControl(0x08); //Measurement mode.
jmateo09 0:7c37eb579038 50 }
jmateo09 0:7c37eb579038 51 void Accelerometer::ReadAcc(float *output)
jmateo09 0:7c37eb579038 52 {
jmateo09 0:7c37eb579038 53 int readings[3];
jmateo09 0:7c37eb579038 54 accelerometer.getOutput(readings);
jmateo09 0:7c37eb579038 55 wait_us(1);
jmateo09 0:7c37eb579038 56 output[0] = (int16_t) readings[0]; // X-axis
jmateo09 0:7c37eb579038 57 output[1] = (int16_t) readings[1]; // Y-Axis
jmateo09 0:7c37eb579038 58 output[2] = (int16_t) readings[2]; // Z-Axis
jmateo09 0:7c37eb579038 59 output[3] = (atan2 (output[1],output[0]) * 180 / PI) + 180; // Calculate Angle usoing X and Y
jmateo09 0:7c37eb579038 60 }
jmateo09 0:7c37eb579038 61
jmateo09 0:7c37eb579038 62 LCD::LCD(): i2c_lcd(p9, p10),lcd(&i2c_lcd,LCDaddress,TextLCD::LCD20x4),ioSetup()
jmateo09 0:7c37eb579038 63 {
jmateo09 0:7c37eb579038 64
jmateo09 0:7c37eb579038 65 }
jmateo09 0:7c37eb579038 66 void LCD::Readlcd()
jmateo09 0:7c37eb579038 67 {
jmateo09 0:7c37eb579038 68
jmateo09 0:7c37eb579038 69 }
jmateo09 0:7c37eb579038 70
jmateo09 0:7c37eb579038 71 //////////////////////////////////LCD_RGB////////////////////////////////////////
jmateo09 0:7c37eb579038 72 void LCD::LCDR()
jmateo09 0:7c37eb579038 73 {
jmateo09 0:7c37eb579038 74 ioSetup.LCDRed = true;
jmateo09 0:7c37eb579038 75 ioSetup.LCDGreen = false;
jmateo09 0:7c37eb579038 76 ioSetup.LCDBlue = false;
jmateo09 0:7c37eb579038 77 }
jmateo09 0:7c37eb579038 78
jmateo09 0:7c37eb579038 79 void LCD::LCDG()
jmateo09 0:7c37eb579038 80 {
jmateo09 0:7c37eb579038 81 ioSetup.LCDRed = false;
jmateo09 0:7c37eb579038 82 ioSetup.LCDGreen = true;
jmateo09 0:7c37eb579038 83 ioSetup.LCDBlue = false;
jmateo09 0:7c37eb579038 84 }
jmateo09 0:7c37eb579038 85
jmateo09 0:7c37eb579038 86 void LCD::LCDB()
jmateo09 0:7c37eb579038 87 {
jmateo09 0:7c37eb579038 88 ioSetup.LCDRed = false;
jmateo09 0:7c37eb579038 89 ioSetup.LCDGreen = false;
jmateo09 0:7c37eb579038 90 ioSetup.LCDBlue = true;
jmateo09 0:7c37eb579038 91 }
jmateo09 0:7c37eb579038 92
jmateo09 0:7c37eb579038 93 void LCD::LCDW()
jmateo09 0:7c37eb579038 94 {
jmateo09 0:7c37eb579038 95 ioSetup.LCDRed = 1.0;
jmateo09 0:7c37eb579038 96 ioSetup.LCDGreen = 0.8;
jmateo09 0:7c37eb579038 97 ioSetup.LCDBlue = 1.0;
jmateo09 0:7c37eb579038 98 }
jmateo09 0:7c37eb579038 99
jmateo09 0:7c37eb579038 100 void LCD::LCDOFF()
jmateo09 0:7c37eb579038 101 {
jmateo09 0:7c37eb579038 102 ioSetup.LCDRed = false;
jmateo09 0:7c37eb579038 103 ioSetup.LCDGreen = false;
jmateo09 0:7c37eb579038 104 ioSetup.LCDBlue = false;
jmateo09 0:7c37eb579038 105 }
jmateo09 0:7c37eb579038 106
jmateo09 0:7c37eb579038 107 void LCD::RefreshLCD(float *AccData,float *MagData)
jmateo09 0:7c37eb579038 108 {
jmateo09 0:7c37eb579038 109 Battery b;
jmateo09 0:7c37eb579038 110 LCDW();
jmateo09 0:7c37eb579038 111 time_t Time = time(0);
jmateo09 0:7c37eb579038 112 char buffer[32];
jmateo09 0:7c37eb579038 113 strftime(buffer, 26, "%d-%m-%Y %H:%M:%S", localtime(&Time));
jmateo09 0:7c37eb579038 114
jmateo09 0:7c37eb579038 115 lcd.locate(0,0);
jmateo09 0:7c37eb579038 116 lcd.printf(buffer);
jmateo09 0:7c37eb579038 117 lcd.locate(0,2);
jmateo09 0:7c37eb579038 118 lcd.printf("%.0f %.1f %.0f %.1f ",AccData[3],b.GetBatteryVoltage(),MagData[3],MagData[2]);
jmateo09 0:7c37eb579038 119 lcd.locate(0,1);
jmateo09 0:7c37eb579038 120 lcd.printf("Pos|Vbat|Temp| MagZ ");
jmateo09 0:7c37eb579038 121 lcd.locate(0,3);
jmateo09 0:7c37eb579038 122 lcd.printf(" Press start button ");
jmateo09 0:7c37eb579038 123
jmateo09 0:7c37eb579038 124 }
jmateo09 0:7c37eb579038 125
jmateo09 0:7c37eb579038 126 Battery::Battery() :Battery_Status(p20)
jmateo09 0:7c37eb579038 127 {
jmateo09 0:7c37eb579038 128 }
jmateo09 0:7c37eb579038 129 /////////////////////////////////Battery Voltage/////////////////////////////////
jmateo09 0:7c37eb579038 130 float Battery::GetBatteryVoltage()
jmateo09 0:7c37eb579038 131 {
jmateo09 0:7c37eb579038 132
jmateo09 0:7c37eb579038 133 float R1 = 10000 , R2 = 2440;
jmateo09 0:7c37eb579038 134 float BatteryR = Battery_Status.read()*3.3;
jmateo09 0:7c37eb579038 135 float BatteryV = (BatteryR * (R1 + R2)/R2)+0.78;
jmateo09 0:7c37eb579038 136 return BatteryV;
jmateo09 0:7c37eb579038 137 }