First Revision of sample code for interfacing ROHM Multi-Sensor Shield board with MultiTech's DragonFly Host Board

Dependencies:   mbed

Fork of ROHM-DragonFly-MultiSensorShield_Interface by Francis Lee

Code Example for ROHM Mutli-Sensor Shield interfaced onto the MultiTech DragonFly Host Cell Board

This code was written to be used with the MultiTech DragonFly Evaluation Kit.

This is the basic example code for interfacing ROHM's Multi-sensor Shield Board onto this board.

Additional information about the ROHM MultiSensor Shield Board can be found at the following link: https://github.com/ROHMUSDC/ROHM_SensorPlatform_Multi-Sensor-Shield

Operation

Ultimately, this code will initialize all the sensors on the Multi-sensor shield board and then poll the sensors. The sensor data will then be returned through the on-board USB to UART interface and can be viewable on any PC with a standard COM port reader (Terminal, TeraTerm, HyperTerm, etc...)

Supported ROHM Sensor Devices

  • BDE0600G Temperature Sensor
  • BM1383GLV Pressure Sensor
  • BU52014 Hall Sensor
  • ML8511 UV Sensor
  • RPR-0521 ALS/PROX Sensor
  • BH1745NUC Color Sensor
  • KMX62 Accel/Mag Sensor
  • KX122 Accel Sensor
  • KXG03 Gyro/Accel Sensor

Sensor Applicable Code Sections

  • All functionality can be found in the function main()
  • Ultimately code is split up into an "initalization" and "main loop" section
  • Specific sensor information can be found using the #ifdef statements at the beginning of the code

Questions/Feedback

Please feel free to let us know any questions/feedback/comments/concerns you may have by addressing the following e-mail:

Committer:
kbahar3
Date:
Mon Jan 04 22:56:55 2016 +0000
Revision:
8:9ab9b42c3be4
Parent:
7:ae40e49391c8
No Changes to the Main Code, only updated mbed-src to mbed library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kbahar3 5:bd9652c0f991 1 /*
kbahar3 5:bd9652c0f991 2 Sample Program Description:
kbahar3 5:bd9652c0f991 3 This Program will enable to Multi-Tech Dragonfly platform to utilize ROHM's Multi-sensor Shield Board.
kbahar3 5:bd9652c0f991 4 This program will initialize all sensors on the shield and then read back the sensor data.
kbahar3 5:bd9652c0f991 5 Data will then be output to the UART Debug Terminal every 1 second.
kbahar3 5:bd9652c0f991 6
kbahar3 5:bd9652c0f991 7 Sample Program Author:
kbahar3 5:bd9652c0f991 8 ROHM USDC
kbahar3 5:bd9652c0f991 9
kbahar3 5:bd9652c0f991 10 Additional Resources:
kbahar3 5:bd9652c0f991 11 ROHM Sensor Shield GitHub Repository: https://github.com/ROHMUSDC/ROHM_SensorPlatform_Multi-Sensor-Shield
kbahar3 5:bd9652c0f991 12 */
BlueShadow 0:698b236430f4 13 #include "mbed.h"
BlueShadow 0:698b236430f4 14
kbahar3 5:bd9652c0f991 15 //Macros for checking each of the different Sensor Devices
kbahar3 5:bd9652c0f991 16 #define AnalogTemp //BDE0600
kbahar3 5:bd9652c0f991 17 #define AnalogUV //ML8511
kbahar3 7:ae40e49391c8 18 #define HallSensor //BU52014
kbahar3 5:bd9652c0f991 19 #define RPR0521 //RPR0521
kbahar3 5:bd9652c0f991 20 #define KMX62 //KMX61, Accel/Mag
kbahar3 5:bd9652c0f991 21 #define COLOR //BH1745
kbahar3 7:ae40e49391c8 22 #define KX122 //KX122, Accel Only
kbahar3 5:bd9652c0f991 23 #define Pressure //BM1383
kbahar3 7:ae40e49391c8 24 #define KXG03 //KXG03
kbahar3 5:bd9652c0f991 25
kbahar3 5:bd9652c0f991 26 //Define Pins for I2C Interface
sk84life85 2:0c50ce4d9d04 27 I2C i2c(I2C_SDA, I2C_SCL);
kbahar3 5:bd9652c0f991 28 bool RepStart = true;
kbahar3 5:bd9652c0f991 29 bool NoRepStart = false;
kbahar3 5:bd9652c0f991 30
kbahar3 5:bd9652c0f991 31 //Define Sensor Variables
kbahar3 5:bd9652c0f991 32 #ifdef AnalogTemp
kbahar3 5:bd9652c0f991 33 AnalogIn BDE0600_Temp(PC_4); //Mapped to A2
kbahar3 5:bd9652c0f991 34 uint16_t BDE0600_Temp_value;
kbahar3 5:bd9652c0f991 35 float BDE0600_output;
kbahar3 5:bd9652c0f991 36 #endif
kbahar3 5:bd9652c0f991 37
kbahar3 5:bd9652c0f991 38 #ifdef AnalogUV
kbahar3 5:bd9652c0f991 39 AnalogIn ML8511_UV(PC_1); //Mapped to A4
kbahar3 5:bd9652c0f991 40 uint16_t ML8511_UV_value;
kbahar3 5:bd9652c0f991 41 float ML8511_output;
kbahar3 5:bd9652c0f991 42 #endif
BlueShadow 0:698b236430f4 43
kbahar3 5:bd9652c0f991 44 #ifdef HallSensor
kbahar3 5:bd9652c0f991 45 DigitalIn Hall_GPIO0(PC_8);
kbahar3 5:bd9652c0f991 46 DigitalIn Hall_GPIO1(PB_5);
kbahar3 5:bd9652c0f991 47 int Hall_Return1;
kbahar3 5:bd9652c0f991 48 int Hall_Return0;
kbahar3 5:bd9652c0f991 49 #endif
BlueShadow 0:698b236430f4 50
kbahar3 5:bd9652c0f991 51 #ifdef RPR0521
kbahar3 5:bd9652c0f991 52 int RPR0521_addr_w = 0x70; //7bit addr = 0x38, with write bit 0
kbahar3 5:bd9652c0f991 53 int RPR0521_addr_r = 0x71; //7bit addr = 0x38, with read bit 1
kbahar3 5:bd9652c0f991 54 char RPR0521_ModeControl[2] = {0x41, 0xE6};
kbahar3 5:bd9652c0f991 55 char RPR0521_ALSPSControl[2] = {0x42, 0x03};
kbahar3 5:bd9652c0f991 56 char RPR0521_Persist[2] = {0x43, 0x20};
kbahar3 5:bd9652c0f991 57 char RPR0521_Addr_ReadData = 0x44;
kbahar3 5:bd9652c0f991 58 char RPR0521_Content_ReadData[6];
kbahar3 5:bd9652c0f991 59 int RPR0521_PS_RAWOUT = 0;
kbahar3 5:bd9652c0f991 60 float RPR0521_PS_OUT = 0;
kbahar3 5:bd9652c0f991 61 int RPR0521_ALS_D0_RAWOUT = 0;
kbahar3 5:bd9652c0f991 62 int RPR0521_ALS_D1_RAWOUT = 0;
kbahar3 5:bd9652c0f991 63 float RPR0521_ALS_DataRatio = 0;
kbahar3 5:bd9652c0f991 64 float RPR0521_ALS_OUT = 0;
kbahar3 5:bd9652c0f991 65 #endif
BlueShadow 0:698b236430f4 66
kbahar3 5:bd9652c0f991 67 #ifdef KMX62
kbahar3 5:bd9652c0f991 68 int KMX62_addr_w = 0x1C; //7bit addr = 0x38, with write bit 0
kbahar3 5:bd9652c0f991 69 int KMX62_addr_r = 0x1D; //7bit addr = 0x38, with read bit 1
kbahar3 5:bd9652c0f991 70 char KMX62_CNTL2[2] = {0x3A, 0x5F};
kbahar3 5:bd9652c0f991 71 char KMX62_Addr_Accel_ReadData = 0x0A;
kbahar3 5:bd9652c0f991 72 char KMX62_Content_Accel_ReadData[6];
kbahar3 5:bd9652c0f991 73 char KMX62_Addr_Mag_ReadData = 0x10;
kbahar3 5:bd9652c0f991 74 char KMX62_Content_Mag_ReadData[6];
kbahar3 5:bd9652c0f991 75 short int MEMS_Accel_Xout = 0;
kbahar3 5:bd9652c0f991 76 short int MEMS_Accel_Yout = 0;
kbahar3 5:bd9652c0f991 77 short int MEMS_Accel_Zout = 0;
kbahar3 5:bd9652c0f991 78 double MEMS_Accel_Conv_Xout = 0;
kbahar3 5:bd9652c0f991 79 double MEMS_Accel_Conv_Yout = 0;
kbahar3 5:bd9652c0f991 80 double MEMS_Accel_Conv_Zout = 0;
kbahar3 5:bd9652c0f991 81 short int MEMS_Mag_Xout = 0;
kbahar3 5:bd9652c0f991 82 short int MEMS_Mag_Yout = 0;
kbahar3 5:bd9652c0f991 83 short int MEMS_Mag_Zout = 0;
kbahar3 5:bd9652c0f991 84 float MEMS_Mag_Conv_Xout = 0;
kbahar3 5:bd9652c0f991 85 float MEMS_Mag_Conv_Yout = 0;
kbahar3 5:bd9652c0f991 86 float MEMS_Mag_Conv_Zout = 0;
kbahar3 5:bd9652c0f991 87 #endif
kbahar3 5:bd9652c0f991 88
kbahar3 5:bd9652c0f991 89 #ifdef COLOR
kbahar3 5:bd9652c0f991 90 int BH1745_addr_w = 0x72; //write
kbahar3 5:bd9652c0f991 91 int BH1745_addr_r = 0x73; //read
kbahar3 5:bd9652c0f991 92 char BH1745_persistence[2] = {0x61, 0x03};
kbahar3 5:bd9652c0f991 93 char BH1745_mode1[2] = {0x41, 0x00};
kbahar3 5:bd9652c0f991 94 char BH1745_mode2[2] = {0x42, 0x92};
kbahar3 5:bd9652c0f991 95 char BH1745_mode3[2] = {0x43, 0x02};
kbahar3 5:bd9652c0f991 96 char BH1745_Content_ReadData[6];
kbahar3 5:bd9652c0f991 97 char BH1745_Addr_color_ReadData = 0x50;
kbahar3 5:bd9652c0f991 98 int BH1745_Red;
kbahar3 5:bd9652c0f991 99 int BH1745_Blue;
kbahar3 5:bd9652c0f991 100 int BH1745_Green;
kbahar3 5:bd9652c0f991 101 #endif
BlueShadow 0:698b236430f4 102
kbahar3 7:ae40e49391c8 103 #ifdef KX122
kbahar3 7:ae40e49391c8 104 int KX122_addr_w = 0x3C; //write
kbahar3 7:ae40e49391c8 105 int KX122_addr_r = 0x3D; //read
kbahar3 7:ae40e49391c8 106 char KX122_Accel_CNTL1[2] = {0x18, 0x41};
kbahar3 7:ae40e49391c8 107 char KX122_Accel_ODCNTL[2] = {0x1B, 0x02};
kbahar3 7:ae40e49391c8 108 char KX122_Accel_CNTL3[2] = {0x1A, 0xD8};
kbahar3 7:ae40e49391c8 109 char KX122_Accel_TILT_TIMER[2] = {0x22, 0x01};
kbahar3 7:ae40e49391c8 110 char KX122_Accel_CNTL2[2] = {0x18, 0xC1};
kbahar3 7:ae40e49391c8 111 char KX122_Content_ReadData[6];
kbahar3 7:ae40e49391c8 112 char KX122_Addr_Accel_ReadData = 0x06;
kbahar3 7:ae40e49391c8 113 float KX122_Accel_X;
kbahar3 7:ae40e49391c8 114 float KX122_Accel_Y;
kbahar3 7:ae40e49391c8 115 float KX122_Accel_Z;
kbahar3 7:ae40e49391c8 116 short int KX122_Accel_X_RawOUT = 0;
kbahar3 7:ae40e49391c8 117 short int KX122_Accel_Y_RawOUT = 0;
kbahar3 7:ae40e49391c8 118 short int KX122_Accel_Z_RawOUT = 0;
kbahar3 7:ae40e49391c8 119 int KX122_Accel_X_LB = 0;
kbahar3 7:ae40e49391c8 120 int KX122_Accel_X_HB = 0;
kbahar3 7:ae40e49391c8 121 int KX122_Accel_Y_LB = 0;
kbahar3 7:ae40e49391c8 122 int KX122_Accel_Y_HB = 0;
kbahar3 7:ae40e49391c8 123 int KX122_Accel_Z_LB = 0;
kbahar3 7:ae40e49391c8 124 int KX122_Accel_Z_HB = 0;
kbahar3 7:ae40e49391c8 125 #endif
kbahar3 7:ae40e49391c8 126
kbahar3 7:ae40e49391c8 127 #ifdef KXG03
kbahar3 7:ae40e49391c8 128 int i = 11;
kbahar3 7:ae40e49391c8 129 int t = 1;
kbahar3 7:ae40e49391c8 130 short int aveX = 0;
kbahar3 7:ae40e49391c8 131 short int aveX2 = 0;
kbahar3 7:ae40e49391c8 132 short int aveX3 = 0;
kbahar3 7:ae40e49391c8 133 short int aveY = 0;
kbahar3 7:ae40e49391c8 134 short int aveY2 = 0;
kbahar3 7:ae40e49391c8 135 short int aveY3 = 0;
kbahar3 7:ae40e49391c8 136 short int aveZ = 0;
kbahar3 7:ae40e49391c8 137 short int aveZ2 = 0;
kbahar3 7:ae40e49391c8 138 short int aveZ3 = 0;
kbahar3 7:ae40e49391c8 139 float ave22;
kbahar3 7:ae40e49391c8 140 float ave33;
kbahar3 7:ae40e49391c8 141 int KXG03_addr_w = 0x9C; //write
kbahar3 7:ae40e49391c8 142 int KXG03_addr_r = 0x9D; //read
kbahar3 7:ae40e49391c8 143 char KXG03_STBY_REG[2] = {0x43, 0x00};
kbahar3 7:ae40e49391c8 144 char KXG03_Content_Gyro_ReadData[6];
kbahar3 7:ae40e49391c8 145 char KXG03_Content_Accel_ReadData[6];
kbahar3 7:ae40e49391c8 146 char KXG03_Addr_Gyro_ReadData = 0x02;
kbahar3 7:ae40e49391c8 147 char KXG03_Addr_Accel_ReadData = 0x08;
kbahar3 7:ae40e49391c8 148 float KXG03_Gyro_X;
kbahar3 7:ae40e49391c8 149 float KXG03_Gyro_Y;
kbahar3 7:ae40e49391c8 150 float KXG03_Gyro_Z;
kbahar3 7:ae40e49391c8 151 short int KXG03_Gyro_X_RawOUT = 0;
kbahar3 7:ae40e49391c8 152 short int KXG03_Gyro_Y_RawOUT = 0;
kbahar3 7:ae40e49391c8 153 short int KXG03_Gyro_Z_RawOUT = 0;
kbahar3 7:ae40e49391c8 154 short int KXG03_Gyro_X_RawOUT2 = 0;
kbahar3 7:ae40e49391c8 155 short int KXG03_Gyro_Y_RawOUT2 = 0;
kbahar3 7:ae40e49391c8 156 short int KXG03_Gyro_Z_RawOUT2 = 0;
kbahar3 7:ae40e49391c8 157 float KXG03_Accel_X;
kbahar3 7:ae40e49391c8 158 float KXG03_Accel_Y;
kbahar3 7:ae40e49391c8 159 float KXG03_Accel_Z;
kbahar3 7:ae40e49391c8 160 short int KXG03_Accel_X_RawOUT = 0;
kbahar3 7:ae40e49391c8 161 short int KXG03_Accel_Y_RawOUT = 0;
kbahar3 7:ae40e49391c8 162 short int KXG03_Accel_Z_RawOUT = 0;
kbahar3 5:bd9652c0f991 163 #endif
kbahar3 5:bd9652c0f991 164
kbahar3 5:bd9652c0f991 165 #ifdef Pressure
kbahar3 5:bd9652c0f991 166 int Press_addr_w = 0xBA; //write
kbahar3 5:bd9652c0f991 167 int Press_addr_r = 0xBB; //read
kbahar3 5:bd9652c0f991 168 char PWR_DOWN[2] = {0x12, 0x01};
kbahar3 5:bd9652c0f991 169 char SLEEP[2] = {0x13, 0x01};
kbahar3 5:bd9652c0f991 170 char Mode_Control[2] = {0x14, 0xC4};
kbahar3 5:bd9652c0f991 171 char Press_Content_ReadData[6];
kbahar3 5:bd9652c0f991 172 char Press_Addr_ReadData =0x1A;
kbahar3 5:bd9652c0f991 173 int BM1383_Temp_highByte;
kbahar3 5:bd9652c0f991 174 int BM1383_Temp_lowByte;
kbahar3 5:bd9652c0f991 175 int BM1383_Pres_highByte;
kbahar3 5:bd9652c0f991 176 int BM1383_Pres_lowByte;
kbahar3 5:bd9652c0f991 177 int BM1383_Pres_leastByte;
kbahar3 5:bd9652c0f991 178 short int BM1383_Temp_Out;
kbahar3 5:bd9652c0f991 179 float BM1383_Temp_Conv_Out;
kbahar3 5:bd9652c0f991 180 float BM1383_Pres_Conv_Out;
kbahar3 5:bd9652c0f991 181 float BM1383_Var;
kbahar3 5:bd9652c0f991 182 float BM1383_Deci;
kbahar3 5:bd9652c0f991 183 #endif
BlueShadow 0:698b236430f4 184
BlueShadow 0:698b236430f4 185 int main() {
sk84life85 2:0c50ce4d9d04 186
kbahar3 5:bd9652c0f991 187 //Initialization Section Start! **********************************************************
kbahar3 5:bd9652c0f991 188
kbahar3 5:bd9652c0f991 189 //Initialize I2C Devices **********************************************************
sk84life85 2:0c50ce4d9d04 190
kbahar3 5:bd9652c0f991 191 #ifdef RPR0521
kbahar3 5:bd9652c0f991 192 i2c.write(RPR0521_addr_w, &RPR0521_ModeControl[0], 2, false);
kbahar3 5:bd9652c0f991 193 i2c.write(RPR0521_addr_w, &RPR0521_ALSPSControl[0], 2, false);
kbahar3 5:bd9652c0f991 194 i2c.write(RPR0521_addr_w, &RPR0521_Persist[0], 2, false);
kbahar3 5:bd9652c0f991 195 #endif
kbahar3 5:bd9652c0f991 196
kbahar3 5:bd9652c0f991 197 #ifdef KMX62
kbahar3 5:bd9652c0f991 198 i2c.write(KMX62_addr_w, &KMX62_CNTL2[0], 2, false);
kbahar3 5:bd9652c0f991 199 #endif
kbahar3 5:bd9652c0f991 200
kbahar3 5:bd9652c0f991 201 #ifdef COLOR
kbahar3 5:bd9652c0f991 202 i2c.write(BH1745_addr_w, &BH1745_persistence[0], 2, false);
kbahar3 5:bd9652c0f991 203 i2c.write(BH1745_addr_w, &BH1745_mode1[0], 2, false);
kbahar3 5:bd9652c0f991 204 i2c.write(BH1745_addr_w, &BH1745_mode2[0], 2, false);
kbahar3 5:bd9652c0f991 205 i2c.write(BH1745_addr_w, &BH1745_mode3[0], 2, false);
kbahar3 5:bd9652c0f991 206 #endif
kbahar3 5:bd9652c0f991 207
kbahar3 7:ae40e49391c8 208 #ifdef KX122
kbahar3 7:ae40e49391c8 209 i2c.write(KX122_addr_w, &KX122_Accel_CNTL1[0], 2, false);
kbahar3 7:ae40e49391c8 210 i2c.write(KX122_addr_w, &KX122_Accel_ODCNTL[0], 2, false);
kbahar3 7:ae40e49391c8 211 i2c.write(KX122_addr_w, &KX122_Accel_CNTL3[0], 2, false);
kbahar3 7:ae40e49391c8 212 i2c.write(KX122_addr_w, &KX122_Accel_TILT_TIMER[0], 2, false);
kbahar3 7:ae40e49391c8 213 i2c.write(KX122_addr_w, &KX122_Accel_CNTL2[0], 2, false);
kbahar3 7:ae40e49391c8 214 #endif
kbahar3 7:ae40e49391c8 215
kbahar3 7:ae40e49391c8 216 #ifdef KXG03
kbahar3 7:ae40e49391c8 217 i2c.write(KXG03_addr_w, &KXG03_STBY_REG[0], 2, false);
kbahar3 5:bd9652c0f991 218 #endif
kbahar3 5:bd9652c0f991 219
kbahar3 5:bd9652c0f991 220 #ifdef Pressure
kbahar3 5:bd9652c0f991 221 i2c.write(Press_addr_w, &PWR_DOWN[0], 2, false);
kbahar3 5:bd9652c0f991 222 i2c.write(Press_addr_w, &SLEEP[0], 2, false);
kbahar3 5:bd9652c0f991 223 i2c.write(Press_addr_w, &Mode_Control[0], 2, false);
kbahar3 5:bd9652c0f991 224 #endif
kbahar3 5:bd9652c0f991 225 //End Initialization Section **********************************************************
kbahar3 5:bd9652c0f991 226
kbahar3 5:bd9652c0f991 227 //Begin Main Loop **********************************************************
BlueShadow 0:698b236430f4 228 while (1) {
kbahar3 5:bd9652c0f991 229
kbahar3 5:bd9652c0f991 230 // ADC Routines *******************************************************
kbahar3 5:bd9652c0f991 231 #ifdef AnalogTemp
kbahar3 5:bd9652c0f991 232 BDE0600_Temp_value = BDE0600_Temp.read_u16();
kbahar3 5:bd9652c0f991 233
kbahar3 5:bd9652c0f991 234 BDE0600_output = (float)BDE0600_Temp_value * (float)0.000050354; //(value * (3.3V/65535))
kbahar3 5:bd9652c0f991 235 BDE0600_output = (BDE0600_output-(float)1.753)/((float)-0.01068) + (float)30;
kbahar3 5:bd9652c0f991 236
kbahar3 5:bd9652c0f991 237 printf("BDE0600 Analog Temp Sensor Data:\r\n");
kbahar3 7:ae40e49391c8 238 printf(" Temp = %.2f degC\r\n", BDE0600_output);
kbahar3 5:bd9652c0f991 239 #endif
kbahar3 5:bd9652c0f991 240
kbahar3 5:bd9652c0f991 241 #ifdef AnalogUV
kbahar3 5:bd9652c0f991 242 ML8511_UV_value = ML8511_UV.read_u16();
kbahar3 5:bd9652c0f991 243 ML8511_output = (float)ML8511_UV_value * (float)0.000050354; //(value * (3.3V/65535)) //Note to self: when playing with this, a negative value is seen... Honestly, I think this has to do with my ADC converstion...
kbahar3 5:bd9652c0f991 244 ML8511_output = (ML8511_output-(float)2.2)/((float)0.129) + 10; // Added +5 to the offset so when inside (aka, no UV, readings show 0)... this is the wrong approach... and the readings don't make sense... Fix this.
kbahar3 5:bd9652c0f991 245
kbahar3 5:bd9652c0f991 246 printf("ML8511 Analog UV Sensor Data:\r\n");
kbahar3 5:bd9652c0f991 247 printf(" UV = %.1f mW/cm2\r\n", ML8511_output);
kbahar3 5:bd9652c0f991 248 #endif
kbahar3 5:bd9652c0f991 249
kbahar3 5:bd9652c0f991 250 // GPI Routines *******************************************************
kbahar3 5:bd9652c0f991 251 #ifdef HallSensor
kbahar3 5:bd9652c0f991 252 Hall_Return0 = Hall_GPIO0;
kbahar3 5:bd9652c0f991 253 Hall_Return1 = Hall_GPIO1;
kbahar3 5:bd9652c0f991 254
kbahar3 5:bd9652c0f991 255 printf("BU52011 Hall Switch Sensor Data:\r\n");
kbahar3 5:bd9652c0f991 256 printf(" South Detect = %d\r\n", Hall_Return0);
kbahar3 5:bd9652c0f991 257 printf(" North Detect = %d\r\n", Hall_Return1);
kbahar3 5:bd9652c0f991 258 #endif
kbahar3 5:bd9652c0f991 259
sk84life85 2:0c50ce4d9d04 260 // I2C Routines *******************************************************
kbahar3 5:bd9652c0f991 261 #ifdef COLOR
kbahar3 5:bd9652c0f991 262 //Read color data from the IC
kbahar3 5:bd9652c0f991 263 i2c.write(BH1745_addr_w, &BH1745_Addr_color_ReadData, 1, RepStart);
kbahar3 5:bd9652c0f991 264 i2c.read(BH1745_addr_r, &BH1745_Content_ReadData[0], 6, NoRepStart);
kbahar3 5:bd9652c0f991 265
kbahar3 5:bd9652c0f991 266 //separate all data read into colors
kbahar3 5:bd9652c0f991 267 BH1745_Red = (BH1745_Content_ReadData[1]<<8) | (BH1745_Content_ReadData[0]);
kbahar3 5:bd9652c0f991 268 BH1745_Green = (BH1745_Content_ReadData[3]<<8) | (BH1745_Content_ReadData[2]);
kbahar3 5:bd9652c0f991 269 BH1745_Blue = (BH1745_Content_ReadData[5]<<8) | (BH1745_Content_ReadData[4]);
kbahar3 5:bd9652c0f991 270
kbahar3 5:bd9652c0f991 271 //Output Data into UART
kbahar3 5:bd9652c0f991 272 printf("BH1745 COLOR Sensor Data:\r\n");
kbahar3 5:bd9652c0f991 273 printf(" Red = %d ADC Counts\r\n",BH1745_Red);
kbahar3 5:bd9652c0f991 274 printf(" Green = %d ADC Counts\r\n",BH1745_Green);
kbahar3 5:bd9652c0f991 275 printf(" Blue = %d ADC Counts\r\n",BH1745_Blue);
kbahar3 5:bd9652c0f991 276 #endif
kbahar3 5:bd9652c0f991 277
kbahar3 5:bd9652c0f991 278 #ifdef RPR0521 //als digital
kbahar3 5:bd9652c0f991 279 i2c.write(RPR0521_addr_w, &RPR0521_Addr_ReadData, 1, RepStart);
kbahar3 5:bd9652c0f991 280 i2c.read(RPR0521_addr_r, &RPR0521_Content_ReadData[0], 6, NoRepStart);
kbahar3 5:bd9652c0f991 281
kbahar3 5:bd9652c0f991 282 RPR0521_PS_RAWOUT = (RPR0521_Content_ReadData[1]<<8) | (RPR0521_Content_ReadData[0]);
kbahar3 5:bd9652c0f991 283 RPR0521_ALS_D0_RAWOUT = (RPR0521_Content_ReadData[3]<<8) | (RPR0521_Content_ReadData[2]);
kbahar3 5:bd9652c0f991 284 RPR0521_ALS_D1_RAWOUT = (RPR0521_Content_ReadData[5]<<8) | (RPR0521_Content_ReadData[4]);
kbahar3 5:bd9652c0f991 285 RPR0521_ALS_DataRatio = (float)RPR0521_ALS_D1_RAWOUT / (float)RPR0521_ALS_D0_RAWOUT;
kbahar3 5:bd9652c0f991 286
kbahar3 5:bd9652c0f991 287 if(RPR0521_ALS_DataRatio < (float)0.595){
kbahar3 5:bd9652c0f991 288 RPR0521_ALS_OUT = ((float)1.682*(float)RPR0521_ALS_D0_RAWOUT - (float)1.877*(float)RPR0521_ALS_D1_RAWOUT);
kbahar3 5:bd9652c0f991 289 }
kbahar3 5:bd9652c0f991 290 else if(RPR0521_ALS_DataRatio < (float)1.015){
kbahar3 5:bd9652c0f991 291 RPR0521_ALS_OUT = ((float)0.644*(float)RPR0521_ALS_D0_RAWOUT - (float)0.132*(float)RPR0521_ALS_D1_RAWOUT);
kbahar3 5:bd9652c0f991 292 }
kbahar3 5:bd9652c0f991 293 else if(RPR0521_ALS_DataRatio < (float)1.352){
kbahar3 5:bd9652c0f991 294 RPR0521_ALS_OUT = ((float)0.756*(float)RPR0521_ALS_D0_RAWOUT - (float)0.243*(float)RPR0521_ALS_D1_RAWOUT);
kbahar3 5:bd9652c0f991 295 }
kbahar3 5:bd9652c0f991 296 else if(RPR0521_ALS_DataRatio < (float)3.053){
kbahar3 5:bd9652c0f991 297 RPR0521_ALS_OUT = ((float)0.766*(float)RPR0521_ALS_D0_RAWOUT - (float)0.25*(float)RPR0521_ALS_D1_RAWOUT);
kbahar3 5:bd9652c0f991 298 }
kbahar3 5:bd9652c0f991 299 else{
kbahar3 5:bd9652c0f991 300 RPR0521_ALS_OUT = 0;
sk84life85 2:0c50ce4d9d04 301 }
kbahar3 5:bd9652c0f991 302 printf("RPR-0521 ALS/PROX Sensor Data:\r\n");
kbahar3 5:bd9652c0f991 303 printf(" ALS = %0.2f lx\r\n", RPR0521_ALS_OUT);
kbahar3 5:bd9652c0f991 304 printf(" PROX= %u ADC Counts\r\n", RPR0521_PS_RAWOUT);
kbahar3 5:bd9652c0f991 305 #endif
kbahar3 5:bd9652c0f991 306
kbahar3 5:bd9652c0f991 307 #ifdef KMX62
kbahar3 5:bd9652c0f991 308 //Read Accel Portion from the IC
kbahar3 5:bd9652c0f991 309 i2c.write(KMX62_addr_w, &KMX62_Addr_Accel_ReadData, 1, RepStart);
kbahar3 5:bd9652c0f991 310 i2c.read(KMX62_addr_r, &KMX62_Content_Accel_ReadData[0], 6, NoRepStart);
kbahar3 5:bd9652c0f991 311
kbahar3 5:bd9652c0f991 312 //Note: The highbyte and low byte return a 14bit value, dropping the two LSB in the Low byte.
kbahar3 5:bd9652c0f991 313 // However, because we need the signed value, we will adjust the value when converting to "g"
kbahar3 5:bd9652c0f991 314 MEMS_Accel_Xout = (KMX62_Content_Accel_ReadData[1]<<8) | (KMX62_Content_Accel_ReadData[0]);
kbahar3 5:bd9652c0f991 315 MEMS_Accel_Yout = (KMX62_Content_Accel_ReadData[3]<<8) | (KMX62_Content_Accel_ReadData[2]);
kbahar3 5:bd9652c0f991 316 MEMS_Accel_Zout = (KMX62_Content_Accel_ReadData[5]<<8) | (KMX62_Content_Accel_ReadData[4]);
kbahar3 5:bd9652c0f991 317
kbahar3 5:bd9652c0f991 318 //Note: Conversion to G is as follows:
kbahar3 5:bd9652c0f991 319 // Axis_ValueInG = MEMS_Accel_axis / 1024
kbahar3 5:bd9652c0f991 320 // However, since we did not remove the LSB previously, we need to divide by 4 again
kbahar3 5:bd9652c0f991 321 // Thus, we will divide the output by 4096 (1024*4) to convert and cancel out the LSB
kbahar3 5:bd9652c0f991 322 MEMS_Accel_Conv_Xout = ((float)MEMS_Accel_Xout/4096/2);
kbahar3 5:bd9652c0f991 323 MEMS_Accel_Conv_Yout = ((float)MEMS_Accel_Yout/4096/2);
kbahar3 5:bd9652c0f991 324 MEMS_Accel_Conv_Zout = ((float)MEMS_Accel_Zout/4096/2);
kbahar3 5:bd9652c0f991 325
kbahar3 5:bd9652c0f991 326 //Read Mag portion from the IC
kbahar3 5:bd9652c0f991 327 i2c.write(KMX62_addr_w, &KMX62_Addr_Mag_ReadData, 1, RepStart);
kbahar3 5:bd9652c0f991 328 i2c.read(KMX62_addr_r, &KMX62_Content_Mag_ReadData[0], 6, NoRepStart);
kbahar3 5:bd9652c0f991 329
kbahar3 5:bd9652c0f991 330 //Note: The highbyte and low byte return a 14bit value, dropping the two LSB in the Low byte.
kbahar3 5:bd9652c0f991 331 // However, because we need the signed value, we will adjust the value when converting to "g"
kbahar3 5:bd9652c0f991 332 MEMS_Mag_Xout = (KMX62_Content_Mag_ReadData[1]<<8) | (KMX62_Content_Mag_ReadData[0]);
kbahar3 5:bd9652c0f991 333 MEMS_Mag_Yout = (KMX62_Content_Mag_ReadData[3]<<8) | (KMX62_Content_Mag_ReadData[2]);
kbahar3 5:bd9652c0f991 334 MEMS_Mag_Zout = (KMX62_Content_Mag_ReadData[5]<<8) | (KMX62_Content_Mag_ReadData[4]);
kbahar3 5:bd9652c0f991 335
kbahar3 5:bd9652c0f991 336 //Note: Conversion to G is as follows:
kbahar3 5:bd9652c0f991 337 // Axis_ValueInG = MEMS_Accel_axis / 1024
kbahar3 5:bd9652c0f991 338 // However, since we did not remove the LSB previously, we need to divide by 4 again
kbahar3 5:bd9652c0f991 339 // Thus, we will divide the output by 4095 (1024*4) to convert and cancel out the LSB
kbahar3 5:bd9652c0f991 340 MEMS_Mag_Conv_Xout = (float)MEMS_Mag_Xout/4096*(float)0.146;
kbahar3 5:bd9652c0f991 341 MEMS_Mag_Conv_Yout = (float)MEMS_Mag_Yout/4096*(float)0.146;
kbahar3 5:bd9652c0f991 342 MEMS_Mag_Conv_Zout = (float)MEMS_Mag_Zout/4096*(float)0.146;
kbahar3 5:bd9652c0f991 343
kbahar3 5:bd9652c0f991 344 // Return Data to UART
kbahar3 5:bd9652c0f991 345 printf("KMX62 Accel+Mag Sensor Data:\r\n");
kbahar3 5:bd9652c0f991 346 printf(" AccX= %0.2f g\r\n", MEMS_Accel_Conv_Xout);
kbahar3 5:bd9652c0f991 347 printf(" AccY= %0.2f g\r\n", MEMS_Accel_Conv_Yout);
kbahar3 5:bd9652c0f991 348 printf(" AccZ= %0.2f g\r\n", MEMS_Accel_Conv_Zout);
kbahar3 6:872eb454b3c4 349 printf(" MagX= %0.2f uT\r\n", MEMS_Mag_Conv_Xout);
kbahar3 6:872eb454b3c4 350 printf(" MagY= %0.2f uT\r\n", MEMS_Mag_Conv_Yout);
kbahar3 6:872eb454b3c4 351 printf(" MagZ= %0.2f uT\r\n", MEMS_Mag_Conv_Zout);
kbahar3 5:bd9652c0f991 352 #endif
sk84life85 2:0c50ce4d9d04 353
kbahar3 7:ae40e49391c8 354 #ifdef KX122
kbahar3 7:ae40e49391c8 355 //Read KX122 Portion from the IC
kbahar3 7:ae40e49391c8 356 i2c.write(KX122_addr_w, &KX122_Addr_Accel_ReadData, 1, RepStart);
kbahar3 7:ae40e49391c8 357 i2c.read(KX122_addr_r, &KX122_Content_ReadData[0], 6, NoRepStart);
kbahar3 5:bd9652c0f991 358
kbahar3 5:bd9652c0f991 359 //Format Data
kbahar3 7:ae40e49391c8 360 KX122_Accel_X_RawOUT = (KX122_Content_ReadData[1]<<8) | (KX122_Content_ReadData[0]);
kbahar3 7:ae40e49391c8 361 KX122_Accel_Y_RawOUT = (KX122_Content_ReadData[3]<<8) | (KX122_Content_ReadData[2]);
kbahar3 7:ae40e49391c8 362 KX122_Accel_Z_RawOUT = (KX122_Content_ReadData[5]<<8) | (KX122_Content_ReadData[4]);
kbahar3 5:bd9652c0f991 363
kbahar3 5:bd9652c0f991 364 //Scale Data
kbahar3 7:ae40e49391c8 365 KX122_Accel_X = (float)KX122_Accel_X_RawOUT / 16384;
kbahar3 7:ae40e49391c8 366 KX122_Accel_Y = (float)KX122_Accel_Y_RawOUT / 16384;
kbahar3 7:ae40e49391c8 367 KX122_Accel_Z = (float)KX122_Accel_Z_RawOUT / 16384;
kbahar3 5:bd9652c0f991 368
kbahar3 5:bd9652c0f991 369 //Return Data through UART
kbahar3 7:ae40e49391c8 370 printf("KX122 Accelerometer Sensor Data: \r\n");
kbahar3 7:ae40e49391c8 371 printf(" AccX= %0.2f g\r\n", KX122_Accel_X);
kbahar3 7:ae40e49391c8 372 printf(" AccY= %0.2f g\r\n", KX122_Accel_Y);
kbahar3 7:ae40e49391c8 373 printf(" AccZ= %0.2f g\r\n", KX122_Accel_Z);
kbahar3 7:ae40e49391c8 374 #endif
kbahar3 7:ae40e49391c8 375
kbahar3 7:ae40e49391c8 376 #ifdef KXG03
kbahar3 7:ae40e49391c8 377 //Read KXG03 Gyro Portion from the IC
kbahar3 7:ae40e49391c8 378 i2c.write(KXG03_addr_w, &KXG03_Addr_Gyro_ReadData, 1, RepStart);
kbahar3 7:ae40e49391c8 379 i2c.read(KXG03_addr_r, &KXG03_Content_Gyro_ReadData[0], 6, NoRepStart);
kbahar3 7:ae40e49391c8 380
kbahar3 7:ae40e49391c8 381 if (t == 1){
kbahar3 7:ae40e49391c8 382 int i = 11;
kbahar3 7:ae40e49391c8 383 while(--i)
kbahar3 7:ae40e49391c8 384 {
kbahar3 7:ae40e49391c8 385 //Read KXG03 Gyro Portion from the IC
kbahar3 7:ae40e49391c8 386 i2c.write(KXG03_addr_w, &KXG03_Addr_Gyro_ReadData, 1, RepStart);
kbahar3 7:ae40e49391c8 387 i2c.read(KXG03_addr_r, &KXG03_Content_Gyro_ReadData[0], 6, NoRepStart);
kbahar3 7:ae40e49391c8 388
kbahar3 7:ae40e49391c8 389 //Format Data
kbahar3 7:ae40e49391c8 390 KXG03_Gyro_X_RawOUT = (KXG03_Content_Gyro_ReadData[1]<<8) | (KXG03_Content_Gyro_ReadData[0]);
kbahar3 7:ae40e49391c8 391 KXG03_Gyro_Y_RawOUT = (KXG03_Content_Gyro_ReadData[3]<<8) | (KXG03_Content_Gyro_ReadData[2]);
kbahar3 7:ae40e49391c8 392 KXG03_Gyro_Z_RawOUT = (KXG03_Content_Gyro_ReadData[5]<<8) | (KXG03_Content_Gyro_ReadData[4]);
kbahar3 7:ae40e49391c8 393 aveX = KXG03_Gyro_X_RawOUT;
kbahar3 7:ae40e49391c8 394 aveY = KXG03_Gyro_Y_RawOUT;
kbahar3 7:ae40e49391c8 395 aveZ = KXG03_Gyro_Z_RawOUT;
kbahar3 7:ae40e49391c8 396 aveX2 = aveX2 + aveX;
kbahar3 7:ae40e49391c8 397 aveY2 = aveY2 + aveY;
kbahar3 7:ae40e49391c8 398 aveZ2 = aveZ2 + aveZ;
kbahar3 7:ae40e49391c8 399 }
kbahar3 7:ae40e49391c8 400 aveX3 = aveX2 / 10;
kbahar3 7:ae40e49391c8 401 aveY3 = aveY2 / 10;
kbahar3 7:ae40e49391c8 402 aveZ3 = aveZ2 / 10;
kbahar3 7:ae40e49391c8 403 printf("KXG03 Gyroscopic Sensor Data: \r\n");
kbahar3 7:ae40e49391c8 404 printf("KXG03 Gyroscopic Offset Calculation: \r\n");
kbahar3 7:ae40e49391c8 405 printf(" aveX2= %d \r\n", aveX2);
kbahar3 7:ae40e49391c8 406 printf(" aveY2= %d \r\n", aveY2);
kbahar3 7:ae40e49391c8 407 printf(" aveZ2= %d \r\n", aveZ2);
kbahar3 7:ae40e49391c8 408 printf(" aveX3= %d \r\n", aveX3);
kbahar3 7:ae40e49391c8 409 printf(" aveY3= %d \r\n", aveY3);
kbahar3 7:ae40e49391c8 410 printf(" aveZ3= %d \r\n", aveZ3);
kbahar3 7:ae40e49391c8 411 t = 0;
kbahar3 7:ae40e49391c8 412 }
kbahar3 7:ae40e49391c8 413
kbahar3 7:ae40e49391c8 414 else {
kbahar3 7:ae40e49391c8 415 //Read KXG03 Gyro Portion from the IC
kbahar3 7:ae40e49391c8 416 i2c.write(KXG03_addr_w, &KXG03_Addr_Gyro_ReadData, 1, RepStart);
kbahar3 7:ae40e49391c8 417 i2c.read(KXG03_addr_r, &KXG03_Content_Gyro_ReadData[0], 6, NoRepStart);
kbahar3 7:ae40e49391c8 418
kbahar3 7:ae40e49391c8 419 //Format Data
kbahar3 7:ae40e49391c8 420 KXG03_Gyro_X_RawOUT = (KXG03_Content_Gyro_ReadData[1]<<8) | (KXG03_Content_Gyro_ReadData[0]);
kbahar3 7:ae40e49391c8 421 KXG03_Gyro_Y_RawOUT = (KXG03_Content_Gyro_ReadData[3]<<8) | (KXG03_Content_Gyro_ReadData[2]);
kbahar3 7:ae40e49391c8 422 KXG03_Gyro_Z_RawOUT = (KXG03_Content_Gyro_ReadData[5]<<8) | (KXG03_Content_Gyro_ReadData[4]);
kbahar3 7:ae40e49391c8 423
kbahar3 7:ae40e49391c8 424 //printf(" aveX3= %d \r\n", aveX3);
kbahar3 7:ae40e49391c8 425 //printf(" aveY3= %d \r\n", aveY3);
kbahar3 7:ae40e49391c8 426 //printf(" aveZ3= %d \r\n", aveZ3);
kbahar3 7:ae40e49391c8 427
kbahar3 7:ae40e49391c8 428 KXG03_Gyro_X_RawOUT2 = KXG03_Gyro_X_RawOUT - aveX3;
kbahar3 7:ae40e49391c8 429 KXG03_Gyro_Y_RawOUT2 = KXG03_Gyro_Y_RawOUT - aveY3;
kbahar3 7:ae40e49391c8 430 KXG03_Gyro_Z_RawOUT2 = KXG03_Gyro_Z_RawOUT - aveZ3;
kbahar3 7:ae40e49391c8 431
kbahar3 7:ae40e49391c8 432 //Scale Data
kbahar3 7:ae40e49391c8 433 KXG03_Gyro_X = (float)KXG03_Gyro_X_RawOUT2 * (float)0.007813 + (float)0.000004;
kbahar3 7:ae40e49391c8 434 KXG03_Gyro_Y = (float)KXG03_Gyro_Y_RawOUT2 * (float)0.007813 + (float)0.000004;
kbahar3 7:ae40e49391c8 435 KXG03_Gyro_Z = (float)KXG03_Gyro_Z_RawOUT2 * (float)0.007813 + (float)0.000004;
kbahar3 7:ae40e49391c8 436
kbahar3 7:ae40e49391c8 437 printf("KXG03 Gyroscopic Sensor Data: \r\n");
kbahar3 7:ae40e49391c8 438 printf(" GyroX= %0.2f deg/sec\r\n", KXG03_Gyro_X);
kbahar3 7:ae40e49391c8 439 printf(" GyroY= %0.2f deg/sec\r\n", KXG03_Gyro_Y);
kbahar3 7:ae40e49391c8 440 printf(" GyroZ= %0.2f deg/sec\r\n", KXG03_Gyro_Z);
kbahar3 7:ae40e49391c8 441
kbahar3 7:ae40e49391c8 442 //Read KXG03 Accel Portion from the IC
kbahar3 7:ae40e49391c8 443 i2c.write(KXG03_addr_w, &KXG03_Addr_Accel_ReadData, 1, RepStart);
kbahar3 7:ae40e49391c8 444 i2c.read(KXG03_addr_r, &KXG03_Content_Accel_ReadData[0], 6, NoRepStart);
kbahar3 7:ae40e49391c8 445
kbahar3 7:ae40e49391c8 446 KXG03_Accel_X_RawOUT = (KXG03_Content_Accel_ReadData[1]<<8) | (KXG03_Content_Accel_ReadData[0]);
kbahar3 7:ae40e49391c8 447 KXG03_Accel_Y_RawOUT = (KXG03_Content_Accel_ReadData[3]<<8) | (KXG03_Content_Accel_ReadData[2]);
kbahar3 7:ae40e49391c8 448 KXG03_Accel_Z_RawOUT = (KXG03_Content_Accel_ReadData[5]<<8) | (KXG03_Content_Accel_ReadData[4]);
kbahar3 7:ae40e49391c8 449
kbahar3 7:ae40e49391c8 450 //Scale Data
kbahar3 7:ae40e49391c8 451 KXG03_Accel_X = (float)KXG03_Accel_X_RawOUT * (float)0.000061 + (float)0.000017;
kbahar3 7:ae40e49391c8 452 KXG03_Accel_Y = (float)KXG03_Accel_Y_RawOUT * (float)0.000061 + (float)0.000017;
kbahar3 7:ae40e49391c8 453 KXG03_Accel_Z = (float)KXG03_Accel_Z_RawOUT * (float)0.000061 + (float)0.000017;
kbahar3 7:ae40e49391c8 454
kbahar3 7:ae40e49391c8 455 //Return Data through UART
kbahar3 7:ae40e49391c8 456 printf(" AccX= %0.2f g\r\n", KXG03_Accel_X);
kbahar3 7:ae40e49391c8 457 printf(" AccY= %0.2f g\r\n", KXG03_Accel_Y);
kbahar3 7:ae40e49391c8 458 printf(" AccZ= %0.2f g\r\n", KXG03_Accel_Z);
kbahar3 7:ae40e49391c8 459 aveX2 = 0;
kbahar3 7:ae40e49391c8 460 aveY2 = 0;
kbahar3 7:ae40e49391c8 461 aveZ2 = 0;
kbahar3 7:ae40e49391c8 462 }
kbahar3 5:bd9652c0f991 463 #endif
kbahar3 5:bd9652c0f991 464
kbahar3 5:bd9652c0f991 465 #ifdef Pressure
kbahar3 5:bd9652c0f991 466 i2c.write(Press_addr_w, &Press_Addr_ReadData, 1, RepStart);
kbahar3 5:bd9652c0f991 467 i2c.read(Press_addr_r, &Press_Content_ReadData[0], 6, NoRepStart);
kbahar3 5:bd9652c0f991 468
kbahar3 5:bd9652c0f991 469 BM1383_Temp_Out = (Press_Content_ReadData[0]<<8) | (Press_Content_ReadData[1]);
kbahar3 5:bd9652c0f991 470 BM1383_Temp_Conv_Out = (float)BM1383_Temp_Out/32;
kbahar3 5:bd9652c0f991 471
kbahar3 5:bd9652c0f991 472 BM1383_Var = (Press_Content_ReadData[2]<<3) | (Press_Content_ReadData[3] >> 5);
kbahar3 5:bd9652c0f991 473 BM1383_Deci = ((Press_Content_ReadData[3] & 0x1f) << 6 | ((Press_Content_ReadData[4] >> 2)));
kbahar3 5:bd9652c0f991 474 BM1383_Deci = (float)BM1383_Deci* (float)0.00048828125; //0.00048828125 = 2^-11
kbahar3 5:bd9652c0f991 475 BM1383_Pres_Conv_Out = (BM1383_Var + BM1383_Deci); //question pending here...
kbahar3 5:bd9652c0f991 476
kbahar3 5:bd9652c0f991 477 printf("BM1383 Pressure Sensor Data:\r\n");
kbahar3 7:ae40e49391c8 478 printf(" Temperature= %0.2f degC\r\n", BM1383_Temp_Conv_Out);
kbahar3 5:bd9652c0f991 479 printf(" Pressure = %0.2f hPa\r\n", BM1383_Pres_Conv_Out);
kbahar3 5:bd9652c0f991 480 #endif
sk84life85 2:0c50ce4d9d04 481 //*********************************************************************
kbahar3 5:bd9652c0f991 482
kbahar3 5:bd9652c0f991 483 printf("\r\n");
kbahar3 5:bd9652c0f991 484 wait(1); //Wait before re-gathering sensor data
BlueShadow 0:698b236430f4 485 }
kbahar3 5:bd9652c0f991 486 }