System Management code
Dependencies: CANBuffer mbed SystemManagement mbed-rtos
System Management code for Penn Electric Racing
Functions:
Controls Fans and Pumps via instruction from CAN Messages, ramps them up over time to prevent damage
Turns on/off DC-DC converter via instruction from CAN Messages
SysMngmt.cpp@0:e516fcccccda, 2014-10-01 (annotated)
- Committer:
- martydd3
- Date:
- Wed Oct 01 12:52:26 2014 +0000
- Revision:
- 0:e516fcccccda
- Child:
- 1:e02eb179aed3
Added LPCDigitalOut, LPCDigitalIn, and CANBuffer Libaries; Comments on code in SysMngmt.cpp involving register and pin access; Note: LPCDigitalOut.h defines a void mode(PinMode) which isn't in LPCDigitalOut.cpp, causes a linking error if used
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
martydd3 | 0:e516fcccccda | 1 | /* |
martydd3 | 0:e516fcccccda | 2 | Reads CAN Messages and various data inputs, outputs using Xbee radio modules |
martydd3 | 0:e516fcccccda | 3 | |
martydd3 | 0:e516fcccccda | 4 | Revised Sept 30, 2014: Began analyzing and commenting program, trying to figure out what the hell it does (Martin Deng) |
martydd3 | 0:e516fcccccda | 5 | */ |
martydd3 | 0:e516fcccccda | 6 | |
martydd3 | 0:e516fcccccda | 7 | #include"SysMngmt.h" |
martydd3 | 0:e516fcccccda | 8 | #include"Get_IMD.h" |
martydd3 | 0:e516fcccccda | 9 | #include"PollSwitch.h" |
martydd3 | 0:e516fcccccda | 10 | #include"TemperatureRead.h" |
martydd3 | 0:e516fcccccda | 11 | #include"Store_RTC.h" |
martydd3 | 0:e516fcccccda | 12 | #include"XBee_Lib.h" |
martydd3 | 0:e516fcccccda | 13 | #include"CANBuffer.h" |
martydd3 | 0:e516fcccccda | 14 | |
martydd3 | 0:e516fcccccda | 15 | |
martydd3 | 0:e516fcccccda | 16 | RTCStore store; |
martydd3 | 0:e516fcccccda | 17 | CANBuffer RecieveBuffer(CAN1, MEDIUM); |
martydd3 | 0:e516fcccccda | 18 | XBee250x XbeeTx; |
martydd3 | 0:e516fcccccda | 19 | |
martydd3 | 0:e516fcccccda | 20 | //Possible problems in IMD coz change of counter |
martydd3 | 0:e516fcccccda | 21 | //Possible problems in BatteryStatus coz change in library |
martydd3 | 0:e516fcccccda | 22 | |
martydd3 | 0:e516fcccccda | 23 | /* |
martydd3 | 0:e516fcccccda | 24 | |
martydd3 | 0:e516fcccccda | 25 | Attach Ticker every 10msec to |
martydd3 | 0:e516fcccccda | 26 | Get IMD |
martydd3 | 0:e516fcccccda | 27 | Poll Switches |
martydd3 | 0:e516fcccccda | 28 | Temperature Read |
martydd3 | 0:e516fcccccda | 29 | Get Battery State |
martydd3 | 0:e516fcccccda | 30 | End Ticker Send message through CAN |
martydd3 | 0:e516fcccccda | 31 | |
martydd3 | 0:e516fcccccda | 32 | CAN interrupt Rx Interrupt |
martydd3 | 0:e516fcccccda | 33 | Recieve CAN message into a buffer. Return |
martydd3 | 0:e516fcccccda | 34 | Buffer values(as long as !empty) -> SD Card, Xbee -> remove element |
martydd3 | 0:e516fcccccda | 35 | */ |
martydd3 | 0:e516fcccccda | 36 | |
martydd3 | 0:e516fcccccda | 37 | /* |
martydd3 | 0:e516fcccccda | 38 | extern "C" void CAN_IRQHandler(void) |
martydd3 | 0:e516fcccccda | 39 | { |
martydd3 | 0:e516fcccccda | 40 | CANMessage Rxmsg; |
martydd3 | 0:e516fcccccda | 41 | CAN_SysM.read(Rxmsg); |
martydd3 | 0:e516fcccccda | 42 | RecieveBuffer.add(Rxmsg); |
martydd3 | 0:e516fcccccda | 43 | } |
martydd3 | 0:e516fcccccda | 44 | */ |
martydd3 | 0:e516fcccccda | 45 | |
martydd3 | 0:e516fcccccda | 46 | extern "C" void TIMER2_IRQHandler(void) |
martydd3 | 0:e516fcccccda | 47 | { |
martydd3 | 0:e516fcccccda | 48 | if((LPC_TIM2->IR & 0x01) == 0x01) // if MR0 interrupt |
martydd3 | 0:e516fcccccda | 49 | { |
martydd3 | 0:e516fcccccda | 50 | //printf("Every 1ms\n\r"); |
martydd3 | 0:e516fcccccda | 51 | LPC_TIM2->IR |= 1 << 0; // Clear MR0 interrupt flag |
martydd3 | 0:e516fcccccda | 52 | |
martydd3 | 0:e516fcccccda | 53 | Bat_I_Ratio=BatISense.read(); |
martydd3 | 0:e516fcccccda | 54 | BATA_msec=(((Bat_I_Ratio*3.3) - BAT_ISENSE_OFFSET_V)/BAT_ISENSE_INCREMENT); |
martydd3 | 0:e516fcccccda | 55 | BATmA_Hr+=(BATA_msec*MSEC_HRS); |
martydd3 | 0:e516fcccccda | 56 | store.write(BATmA_Hr,0); |
martydd3 | 0:e516fcccccda | 57 | |
martydd3 | 0:e516fcccccda | 58 | DC_I_Ratio=DCSense.read(); |
martydd3 | 0:e516fcccccda | 59 | DCA_msec=(((DC_I_Ratio*3.3) - DC_DC_ISENSE_OFFSET_V)/DC_DC_ISENSE_INCREMENT); |
martydd3 | 0:e516fcccccda | 60 | store.write(DCA_msec,1); |
martydd3 | 0:e516fcccccda | 61 | |
martydd3 | 0:e516fcccccda | 62 | LPC_TIM2->TCR |= (1<<1); //Reset Timer1 |
martydd3 | 0:e516fcccccda | 63 | LPC_TIM2->TCR &= ~(1<<1); //Re Enable Timer1 |
martydd3 | 0:e516fcccccda | 64 | } |
martydd3 | 0:e516fcccccda | 65 | } |
martydd3 | 0:e516fcccccda | 66 | |
martydd3 | 0:e516fcccccda | 67 | |
martydd3 | 0:e516fcccccda | 68 | void Poll() |
martydd3 | 0:e516fcccccda | 69 | { |
martydd3 | 0:e516fcccccda | 70 | uint16_t Rxpoll; |
martydd3 | 0:e516fcccccda | 71 | uint16_t recv,temp,i=0; //Test |
martydd3 | 0:e516fcccccda | 72 | char Result[4]={0}; |
martydd3 | 0:e516fcccccda | 73 | Rxpoll=PollSwitch(); |
martydd3 | 0:e516fcccccda | 74 | |
martydd3 | 0:e516fcccccda | 75 | Result[0]=(char)(Rxpoll&0x00ff); |
martydd3 | 0:e516fcccccda | 76 | Result[1]=(char)((Rxpoll&0xff00)>>8); |
martydd3 | 0:e516fcccccda | 77 | CANMessage Txmsg(410,Result,sizeof(Result)); |
martydd3 | 0:e516fcccccda | 78 | CAN_SysM.write(Txmsg); |
martydd3 | 0:e516fcccccda | 79 | |
martydd3 | 0:e516fcccccda | 80 | //Test |
martydd3 | 0:e516fcccccda | 81 | recv=(((uint16_t)Txmsg.data[1]<<8) | (0x00ff&(uint16_t)Txmsg.data[0])); |
martydd3 | 0:e516fcccccda | 82 | printf("Recv:%d\n\r",recv); |
martydd3 | 0:e516fcccccda | 83 | |
martydd3 | 0:e516fcccccda | 84 | while(i <= 12) |
martydd3 | 0:e516fcccccda | 85 | { |
martydd3 | 0:e516fcccccda | 86 | temp=recv; |
martydd3 | 0:e516fcccccda | 87 | if(((temp & (1 << i))>>i)==1) |
martydd3 | 0:e516fcccccda | 88 | pc.printf("Switch OFF:%d\n\r",i); |
martydd3 | 0:e516fcccccda | 89 | ++i; |
martydd3 | 0:e516fcccccda | 90 | } |
martydd3 | 0:e516fcccccda | 91 | } |
martydd3 | 0:e516fcccccda | 92 | |
martydd3 | 0:e516fcccccda | 93 | |
martydd3 | 0:e516fcccccda | 94 | void Temp() |
martydd3 | 0:e516fcccccda | 95 | { |
martydd3 | 0:e516fcccccda | 96 | float DC_DC_Temperature, Coolant1_Temperature, Coolant2_Temperature, ChargerFET_Temperature; |
martydd3 | 0:e516fcccccda | 97 | float Resistance; |
martydd3 | 0:e516fcccccda | 98 | float Vadc; |
martydd3 | 0:e516fcccccda | 99 | int i; |
martydd3 | 0:e516fcccccda | 100 | ftc send, recv; |
martydd3 | 0:e516fcccccda | 101 | recv.FLOAT=0.0; |
martydd3 | 0:e516fcccccda | 102 | send.FLOAT=0.0; |
martydd3 | 0:e516fcccccda | 103 | |
martydd3 | 0:e516fcccccda | 104 | Vadc=DC_DC.read()*VDD; |
martydd3 | 0:e516fcccccda | 105 | Resistance=((float)R10K*Vadc)/((float)VDD + Vadc); |
martydd3 | 0:e516fcccccda | 106 | DC_DC_Temperature=ReadTemp(TR_NXFT15XH103FA_Map, Resistance, TABLE_SIZE_NXFT15XH103FA); |
martydd3 | 0:e516fcccccda | 107 | send.FLOAT=DC_DC_Temperature; |
martydd3 | 0:e516fcccccda | 108 | CANMessage Txmsg_DC_DC(450,send.C_FLOAT,sizeof(send.C_FLOAT)); |
martydd3 | 0:e516fcccccda | 109 | CAN_SysM.write(Txmsg_DC_DC); |
martydd3 | 0:e516fcccccda | 110 | |
martydd3 | 0:e516fcccccda | 111 | for(i=0; i<4;i++) |
martydd3 | 0:e516fcccccda | 112 | recv.C_FLOAT[i]=Txmsg_DC_DC.data[i]; |
martydd3 | 0:e516fcccccda | 113 | pc.printf("DC_DC:%f\n\r",recv.FLOAT); |
martydd3 | 0:e516fcccccda | 114 | |
martydd3 | 0:e516fcccccda | 115 | Vadc=ChargerFET.read()*VDD; |
martydd3 | 0:e516fcccccda | 116 | Resistance=((float)R10K*Vadc)/((float)VDD + Vadc); |
martydd3 | 0:e516fcccccda | 117 | ChargerFET_Temperature=ReadTemp(TR_NXFT15XH103FA_Map, Resistance, TABLE_SIZE_NXFT15XH103FA); |
martydd3 | 0:e516fcccccda | 118 | send.FLOAT=ChargerFET_Temperature; |
martydd3 | 0:e516fcccccda | 119 | CANMessage Txmsg_ChargerFET(451,send.C_FLOAT,sizeof(send.C_FLOAT)); |
martydd3 | 0:e516fcccccda | 120 | CAN_SysM.write(Txmsg_ChargerFET); |
martydd3 | 0:e516fcccccda | 121 | |
martydd3 | 0:e516fcccccda | 122 | for(i=0; i<4;i++) |
martydd3 | 0:e516fcccccda | 123 | recv.C_FLOAT[i]=Txmsg_ChargerFET.data[i]; |
martydd3 | 0:e516fcccccda | 124 | pc.printf("ChargerFET:%f\n\r",recv.FLOAT); |
martydd3 | 0:e516fcccccda | 125 | |
martydd3 | 0:e516fcccccda | 126 | Vadc=Coolant1.read()*VDD; |
martydd3 | 0:e516fcccccda | 127 | Resistance=((float)R10K*Vadc)/((float)VDD + Vadc); |
martydd3 | 0:e516fcccccda | 128 | Coolant1_Temperature=ReadTemp(TR_NTCLP00E3103H_Map, Resistance, TABLE_SIZE_NTCLP00E3103H); |
martydd3 | 0:e516fcccccda | 129 | send.FLOAT=Coolant1_Temperature; |
martydd3 | 0:e516fcccccda | 130 | CANMessage Txmsg_Coolant1(452,send.C_FLOAT,sizeof(send.C_FLOAT)); |
martydd3 | 0:e516fcccccda | 131 | CAN_SysM.write(Txmsg_Coolant1); |
martydd3 | 0:e516fcccccda | 132 | //Control Fans |
martydd3 | 0:e516fcccccda | 133 | |
martydd3 | 0:e516fcccccda | 134 | for(i=0; i<4;i++) |
martydd3 | 0:e516fcccccda | 135 | recv.C_FLOAT[i]=Txmsg_Coolant1.data[i]; |
martydd3 | 0:e516fcccccda | 136 | pc.printf("Coolant1:%f\n\r",recv.FLOAT); |
martydd3 | 0:e516fcccccda | 137 | |
martydd3 | 0:e516fcccccda | 138 | Vadc=Coolant2.read()*VDD; |
martydd3 | 0:e516fcccccda | 139 | Resistance=((float)R10K*Vadc)/((float)VDD + Vadc); |
martydd3 | 0:e516fcccccda | 140 | Coolant2_Temperature=ReadTemp(TR_NTCLP00E3103H_Map, Resistance, TABLE_SIZE_NTCLP00E3103H); |
martydd3 | 0:e516fcccccda | 141 | send.FLOAT=Coolant2_Temperature; |
martydd3 | 0:e516fcccccda | 142 | CANMessage Txmsg_Coolant2(453,send.C_FLOAT,sizeof(send.C_FLOAT)); |
martydd3 | 0:e516fcccccda | 143 | CAN_SysM.write(Txmsg_Coolant2); |
martydd3 | 0:e516fcccccda | 144 | //Control Fans |
martydd3 | 0:e516fcccccda | 145 | |
martydd3 | 0:e516fcccccda | 146 | for(i=0; i<4;i++) |
martydd3 | 0:e516fcccccda | 147 | recv.C_FLOAT[i]=Txmsg_Coolant2.data[i]; |
martydd3 | 0:e516fcccccda | 148 | pc.printf("Coolant2:%f\n\r",recv.FLOAT); |
martydd3 | 0:e516fcccccda | 149 | } |
martydd3 | 0:e516fcccccda | 150 | |
martydd3 | 0:e516fcccccda | 151 | void IMD() |
martydd3 | 0:e516fcccccda | 152 | { |
martydd3 | 0:e516fcccccda | 153 | IMD_Measurement_Output IMD_Signal; |
martydd3 | 0:e516fcccccda | 154 | char status[4]; |
martydd3 | 0:e516fcccccda | 155 | ftc send; |
martydd3 | 0:e516fcccccda | 156 | |
martydd3 | 0:e516fcccccda | 157 | IMD_Signal=Get_Measurement(); |
martydd3 | 0:e516fcccccda | 158 | send.FLOAT=IMD_Signal.Frequency; |
martydd3 | 0:e516fcccccda | 159 | CANMessage Txmsg_Frequency(421,send.C_FLOAT,sizeof(send.C_FLOAT)); |
martydd3 | 0:e516fcccccda | 160 | CAN_SysM.write(Txmsg_Frequency); |
martydd3 | 0:e516fcccccda | 161 | |
martydd3 | 0:e516fcccccda | 162 | send.FLOAT=IMD_Signal.Duty_Cycle; |
martydd3 | 0:e516fcccccda | 163 | CANMessage Txmsg_DutyCycle(422,send.C_FLOAT,sizeof(send.C_FLOAT)); |
martydd3 | 0:e516fcccccda | 164 | CAN_SysM.write(Txmsg_DutyCycle); |
martydd3 | 0:e516fcccccda | 165 | |
martydd3 | 0:e516fcccccda | 166 | status[0]=Result.Encoded_Status; |
martydd3 | 0:e516fcccccda | 167 | CANMessage Txmsg_Status(423,status,sizeof(status)); |
martydd3 | 0:e516fcccccda | 168 | CAN_SysM.write(Txmsg_Status); |
martydd3 | 0:e516fcccccda | 169 | } |
martydd3 | 0:e516fcccccda | 170 | |
martydd3 | 0:e516fcccccda | 171 | void Battery() |
martydd3 | 0:e516fcccccda | 172 | { |
martydd3 | 0:e516fcccccda | 173 | RTCStore reg; |
martydd3 | 0:e516fcccccda | 174 | ftc send; |
martydd3 | 0:e516fcccccda | 175 | |
martydd3 | 0:e516fcccccda | 176 | send.FLOAT=reg.read(0); |
martydd3 | 0:e516fcccccda | 177 | CANMessage Txmsg_BATmA_Hr(440,send.C_FLOAT,sizeof(send.C_FLOAT)); |
martydd3 | 0:e516fcccccda | 178 | CAN_SysM.write(Txmsg_BATmA_Hr); |
martydd3 | 0:e516fcccccda | 179 | |
martydd3 | 0:e516fcccccda | 180 | send.FLOAT=reg.read(1); |
martydd3 | 0:e516fcccccda | 181 | CANMessage Txmsg_DCA_msec(442,send.C_FLOAT,sizeof(send.C_FLOAT)); |
martydd3 | 0:e516fcccccda | 182 | CAN_SysM.write(Txmsg_DCA_msec); |
martydd3 | 0:e516fcccccda | 183 | } |
martydd3 | 0:e516fcccccda | 184 | |
martydd3 | 0:e516fcccccda | 185 | /* |
martydd3 | 0:e516fcccccda | 186 | Activates a whole crapload of functions and pins on the chip |
martydd3 | 0:e516fcccccda | 187 | */ |
martydd3 | 0:e516fcccccda | 188 | void Init() |
martydd3 | 0:e516fcccccda | 189 | { |
martydd3 | 0:e516fcccccda | 190 | /* |
martydd3 | 0:e516fcccccda | 191 | Timers to call various functions at different intervals |
martydd3 | 0:e516fcccccda | 192 | These things behave weirdly when wait(ms) is involved. Probably have to rewrite |
martydd3 | 0:e516fcccccda | 193 | */ |
martydd3 | 0:e516fcccccda | 194 | |
martydd3 | 0:e516fcccccda | 195 | //ReadIMD.attach(&IMD,0.1); |
martydd3 | 0:e516fcccccda | 196 | //PollSDSwitch.attach(&Poll,0.1); |
martydd3 | 0:e516fcccccda | 197 | |
martydd3 | 0:e516fcccccda | 198 | //ReadTemperature.attach(&Temp,0.1); |
martydd3 | 0:e516fcccccda | 199 | //ReadBatteryState.attach(&Battery,0.1); |
martydd3 | 0:e516fcccccda | 200 | |
martydd3 | 0:e516fcccccda | 201 | /* |
martydd3 | 0:e516fcccccda | 202 | Initialize Timer2 for Battery State |
martydd3 | 0:e516fcccccda | 203 | |
martydd3 | 0:e516fcccccda | 204 | LPC_SC 0x400F C000 (System Control) |
martydd3 | 0:e516fcccccda | 205 | ->PCONP 0x400F C0C4 (Power Control for Peripherals Register) |
martydd3 | 0:e516fcccccda | 206 | |= (1<<22) 22 Bit (Timer 2 power/clock control bit) |
martydd3 | 0:e516fcccccda | 207 | |
martydd3 | 0:e516fcccccda | 208 | ->PCLKSEL1 Peripheral Clock Selection register 1 (controls rate of clock signal supplied to peripheral) |
martydd3 | 0:e516fcccccda | 209 | |= ((1<<12) | (1<<13)); 12:13 Bits (Peripheral Clock Selection for TIMER2) |
martydd3 | 0:e516fcccccda | 210 | |
martydd3 | 0:e516fcccccda | 211 | LPC_TIM2 0x4009 0000 (Timer 2) |
martydd3 | 0:e516fcccccda | 212 | ->TCR 0x4009 0004 (Timer Control Register) |
martydd3 | 0:e516fcccccda | 213 | |= (1<<0); 0 Bit (Counter Enable) |
martydd3 | 0:e516fcccccda | 214 | |
martydd3 | 0:e516fcccccda | 215 | ->MR0 0x4009 0018 (Match Register) |
martydd3 | 0:e516fcccccda | 216 | |
martydd3 | 0:e516fcccccda | 217 | ->MCR 0x4009 0014 (Match Control Register) |
martydd3 | 0:e516fcccccda | 218 | |
martydd3 | 0:e516fcccccda | 219 | */ |
martydd3 | 0:e516fcccccda | 220 | LPC_SC->PCONP |= (1<<22); //PoewerOn Timer/Counter2 |
martydd3 | 0:e516fcccccda | 221 | LPC_SC->PCLKSEL1 |= ((1<<12) | (1<<13)); //Prescale Timer2 CCLK/8 |
martydd3 | 0:e516fcccccda | 222 | LPC_TIM2->TCR |= (1<<0); //Enable Timer2 |
martydd3 | 0:e516fcccccda | 223 | LPC_TIM2->MR0 = 11999; // 1msec |
martydd3 | 0:e516fcccccda | 224 | LPC_TIM2->MCR |= (1<<0); |
martydd3 | 0:e516fcccccda | 225 | |
martydd3 | 0:e516fcccccda | 226 | NVIC_SetPriority(TIMER0_IRQn,200); //IMD Capture Interrupt |
martydd3 | 0:e516fcccccda | 227 | NVIC_SetPriority(TIMER1_IRQn,200); //IMD 1msec sampling Interrupt |
martydd3 | 0:e516fcccccda | 228 | NVIC_SetPriority(TIMER2_IRQn,1); //Battery 1msec sampling Interrupt |
martydd3 | 0:e516fcccccda | 229 | NVIC_SetPriority(TIMER3_IRQn,255); //mbed Timer/Ticker/Wait Interrupt |
martydd3 | 0:e516fcccccda | 230 | NVIC_SetPriority(CAN_IRQn,2); |
martydd3 | 0:e516fcccccda | 231 | |
martydd3 | 0:e516fcccccda | 232 | NVIC_EnableIRQ(TIMER2_IRQn); //Enable TIMER2 IRQ |
martydd3 | 0:e516fcccccda | 233 | |
martydd3 | 0:e516fcccccda | 234 | CAN_SysM.mode(CAN::GlobalTest); |
martydd3 | 0:e516fcccccda | 235 | //NVIC_EnableIRQ(CAN_IRQn); |
martydd3 | 0:e516fcccccda | 236 | //NVIC_EnableIRQ(CANActivity_IRQn); |
martydd3 | 0:e516fcccccda | 237 | } |
martydd3 | 0:e516fcccccda | 238 | |
martydd3 | 0:e516fcccccda | 239 | /* |
martydd3 | 0:e516fcccccda | 240 | Main Loop: Currently reads CANMessages from Can interface (Pins: rd = p30, td = p29) |
martydd3 | 0:e516fcccccda | 241 | Send CANMessage data through XBee radio transmitters |
martydd3 | 0:e516fcccccda | 242 | |
martydd3 | 0:e516fcccccda | 243 | */ |
martydd3 | 0:e516fcccccda | 244 | int main() { |
martydd3 | 0:e516fcccccda | 245 | CANMessage Rxmsg; |
martydd3 | 0:e516fcccccda | 246 | |
martydd3 | 0:e516fcccccda | 247 | Init(); |
martydd3 | 0:e516fcccccda | 248 | |
martydd3 | 0:e516fcccccda | 249 | while(1) |
martydd3 | 0:e516fcccccda | 250 | { |
martydd3 | 0:e516fcccccda | 251 | if(CAN_SysM.read(Rxmsg)) |
martydd3 | 0:e516fcccccda | 252 | RecieveBuffer.txWrite(Rxmsg); |
martydd3 | 0:e516fcccccda | 253 | while(RecieveBuffer.rxRead(Rxmsg)) |
martydd3 | 0:e516fcccccda | 254 | { |
martydd3 | 0:e516fcccccda | 255 | XbeeTx.send(Rxmsg); |
martydd3 | 0:e516fcccccda | 256 | } |
martydd3 | 0:e516fcccccda | 257 | |
martydd3 | 0:e516fcccccda | 258 | //Poll(); |
martydd3 | 0:e516fcccccda | 259 | //Temp(); |
martydd3 | 0:e516fcccccda | 260 | //Battery(); |
martydd3 | 0:e516fcccccda | 261 | } |
martydd3 | 0:e516fcccccda | 262 | //Temp(); |
martydd3 | 0:e516fcccccda | 263 | //IMD(); |
martydd3 | 0:e516fcccccda | 264 | //Battery(); |
martydd3 | 0:e516fcccccda | 265 | } |