Sensor library
Sensors.cpp@0:7c37eb579038, 2019-05-15 (annotated)
- Committer:
- jmateo09
- Date:
- Wed May 15 13:44:30 2019 +0000
- Revision:
- 0:7c37eb579038
Sensors
Who changed what in which revision?
User | Revision | Line number | New 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 | } |