Sensors

Committer:
jmateo09
Date:
Thu Feb 28 15:54:42 2019 +0000
Revision:
0:5e6bde18bc44
Sensors

Who changed what in which revision?

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