Wireless Gas Meter Reading System Meter Reader Module Code

Committer:
harrisjunaid
Date:
Mon May 07 18:04:36 2012 +0000
Revision:
1:3830cdfa2c1b
Parent:
0:fb08b3e9f2f4

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
harrisjunaid 0:fb08b3e9f2f4 1
harrisjunaid 0:fb08b3e9f2f4 2 #include "mbed.h"
harrisjunaid 0:fb08b3e9f2f4 3 #include "Serial.h"
harrisjunaid 0:fb08b3e9f2f4 4
harrisjunaid 0:fb08b3e9f2f4 5 //PC Serial for DEBUG Messages
harrisjunaid 0:fb08b3e9f2f4 6 Serial pc(USBTX, USBRX);
harrisjunaid 0:fb08b3e9f2f4 7
harrisjunaid 0:fb08b3e9f2f4 8 //Sensor Input
harrisjunaid 0:fb08b3e9f2f4 9 InterruptIn SensorIn(p21);//Sensor Sensed Needle and sends voltaga (minimum > 2V)
harrisjunaid 0:fb08b3e9f2f4 10 Timer SensorIn_Filter;
harrisjunaid 0:fb08b3e9f2f4 11 //mbed Pin Wake
harrisjunaid 0:fb08b3e9f2f4 12 //InterruptIn wake(p22);
harrisjunaid 0:fb08b3e9f2f4 13
harrisjunaid 0:fb08b3e9f2f4 14
harrisjunaid 0:fb08b3e9f2f4 15 //Battery Voltage
harrisjunaid 0:fb08b3e9f2f4 16 AnalogIn supplyin(p15);//Connection From XBEE Power Supply
harrisjunaid 0:fb08b3e9f2f4 17
harrisjunaid 0:fb08b3e9f2f4 18 //Gas Consumption Variable
harrisjunaid 0:fb08b3e9f2f4 19 unsigned GasCounter = 0;
harrisjunaid 0:fb08b3e9f2f4 20 //unsigned GasCounter = 1;//Increment at ev reset/////////.......DEBUG
harrisjunaid 0:fb08b3e9f2f4 21
harrisjunaid 0:fb08b3e9f2f4 22 //Meter Reader Data Storage
harrisjunaid 0:fb08b3e9f2f4 23 LocalFileSystem fs("fs");//mbed internal flash storage
harrisjunaid 0:fb08b3e9f2f4 24 //FILE *previous;// Pointer for previous_readings.txt (Gas consumption data not yet transmitted )
harrisjunaid 0:fb08b3e9f2f4 25 //unsigned previous_consumption = 0;//Variable for storing previous consumption (unsigned => only positive value)
harrisjunaid 0:fb08b3e9f2f4 26
harrisjunaid 0:fb08b3e9f2f4 27 //Indicators
harrisjunaid 0:fb08b3e9f2f4 28 DigitalOut SafeShutdown(LED1);//User can now power off
harrisjunaid 0:fb08b3e9f2f4 29 DigitalOut BoilerOn(LED2);//Indicate to turn on boiler
harrisjunaid 0:fb08b3e9f2f4 30 DigitalOut XbeeOff(LED3);//XBEE can not get power
harrisjunaid 0:fb08b3e9f2f4 31 DigitalOut EndDeviceOff(LED3);//Flash LED2 when End Device is not accessable
harrisjunaid 0:fb08b3e9f2f4 32 DigitalOut PreviousData(LED4);//Previous shutdown was not safe or coordinator was not present
harrisjunaid 0:fb08b3e9f2f4 33 DigitalOut CounterIncrement(LED4);//Indicates Counter Increment
harrisjunaid 0:fb08b3e9f2f4 34 BusOut BatteryLow(LED1, LED2, LED3, LED4);// Battery is Low (Flash from LED1 to LED4)
harrisjunaid 0:fb08b3e9f2f4 35
harrisjunaid 0:fb08b3e9f2f4 36 //XBEE Connection
harrisjunaid 0:fb08b3e9f2f4 37 Serial xbee(p9, p10);//XBEE Dout (xbee p2) <--> mbed rx p10, XBEE Din (xbee p3) <--> mbed tx p9
harrisjunaid 0:fb08b3e9f2f4 38 DigitalOut xbee_reset(p8);//XBEE Reset (xbee p5) <--> mbed digital out p8
harrisjunaid 0:fb08b3e9f2f4 39 DigitalIn xbee_power(p11);//XBEE Power Indicator (xbee p13) Digital In
harrisjunaid 0:fb08b3e9f2f4 40 //DigitalIn xbee_associate(p12);//XBEE Association (xbee p15) Digital In
harrisjunaid 0:fb08b3e9f2f4 41 DigitalIn xbee_CTS(p13);//XBEE pin 12 CTS High = Signal to stop data transfer over UART
harrisjunaid 0:fb08b3e9f2f4 42 DigitalOut xbee_sleep(p14);//XBEE SLEEP_RQ (p9)
harrisjunaid 0:fb08b3e9f2f4 43 unsigned xbeeon_off = 0;//Default OFF
harrisjunaid 0:fb08b3e9f2f4 44
harrisjunaid 0:fb08b3e9f2f4 45 /***************************************************************************************************
harrisjunaid 0:fb08b3e9f2f4 46 Functions
harrisjunaid 0:fb08b3e9f2f4 47 ***************************************************************************************************/
harrisjunaid 0:fb08b3e9f2f4 48
harrisjunaid 0:fb08b3e9f2f4 49 //Event Based Functions
harrisjunaid 0:fb08b3e9f2f4 50 void MeterReader_On();//Called at module power on
harrisjunaid 0:fb08b3e9f2f4 51 void Reading_Handler();//Manage "GasCounter" Transfer and File Update
harrisjunaid 0:fb08b3e9f2f4 52 void SensorInput();//Called at sensor input
harrisjunaid 0:fb08b3e9f2f4 53
harrisjunaid 0:fb08b3e9f2f4 54 //File Handling Functions
harrisjunaid 0:fb08b3e9f2f4 55 unsigned CheckCounterFile();//Check reading counter file
harrisjunaid 0:fb08b3e9f2f4 56 void UpdateCounterFile();//Keeps Record of GasCounter
harrisjunaid 0:fb08b3e9f2f4 57 void PreviousData_Indication();//Called when improper module shutdown or coordinator not found
harrisjunaid 0:fb08b3e9f2f4 58
harrisjunaid 0:fb08b3e9f2f4 59 //XBee Handling Functions
harrisjunaid 0:fb08b3e9f2f4 60 void TransmitGasCounter( unsigned forced);//Transmit Readings
harrisjunaid 0:fb08b3e9f2f4 61 void Xbee_Check();//Xbee Power and Xbee Range
harrisjunaid 0:fb08b3e9f2f4 62 unsigned Xbee_RangeCheck();//XBEE Range Check (Check for END DEVICE)
harrisjunaid 0:fb08b3e9f2f4 63 unsigned Xbee_On_Off();//Return XBEE Power Status
harrisjunaid 0:fb08b3e9f2f4 64 void XbeeSleep(unsigned sleep);//XBEE Pin Sleep
harrisjunaid 0:fb08b3e9f2f4 65 void Xbee_Reset();//Reset xbee
harrisjunaid 0:fb08b3e9f2f4 66 unsigned CTS();//returns 1 when mbed is Clear To Send
harrisjunaid 0:fb08b3e9f2f4 67 void EndDevice_Indication();//Flash LED2
harrisjunaid 0:fb08b3e9f2f4 68
harrisjunaid 0:fb08b3e9f2f4 69 //Battery Check Functions
harrisjunaid 0:fb08b3e9f2f4 70 unsigned BatteryCheck();//Check Battery Voltage
harrisjunaid 0:fb08b3e9f2f4 71 void BatteryLow_Indication();//Flash all LEDs indicating Low Battery
harrisjunaid 0:fb08b3e9f2f4 72
harrisjunaid 0:fb08b3e9f2f4 73 //Boiler On Indication
harrisjunaid 0:fb08b3e9f2f4 74 void BoilerSafeOn();
harrisjunaid 0:fb08b3e9f2f4 75 /****************************************************************************************************
harrisjunaid 0:fb08b3e9f2f4 76 Battery Check
harrisjunaid 0:fb08b3e9f2f4 77 ****************************************************************************************************/
harrisjunaid 0:fb08b3e9f2f4 78
harrisjunaid 0:fb08b3e9f2f4 79 unsigned BatteryCheck() {
harrisjunaid 0:fb08b3e9f2f4 80
harrisjunaid 0:fb08b3e9f2f4 81 float battery = 0.0;//Stores sum of three supplyin values
harrisjunaid 0:fb08b3e9f2f4 82 float supply = 0.0;//Stores real battery voltage
harrisjunaid 0:fb08b3e9f2f4 83
harrisjunaid 0:fb08b3e9f2f4 84 for (int i=0; i<3; i++) {//Takes three values 0-2
harrisjunaid 0:fb08b3e9f2f4 85 battery = battery + supplyin.read();
harrisjunaid 0:fb08b3e9f2f4 86 //pc.printf("Loop %d\t", i);//////////////.......DEBUG
harrisjunaid 0:fb08b3e9f2f4 87 wait(0.2);
harrisjunaid 0:fb08b3e9f2f4 88 }
harrisjunaid 0:fb08b3e9f2f4 89 supply = (battery /3) * 3.5 ;//Reading Avg * Logic High (battery '1' => 100% '3.5')
harrisjunaid 0:fb08b3e9f2f4 90 //pc.printf("%f\n", supply);/////////.......DEBUG
harrisjunaid 0:fb08b3e9f2f4 91 battery = 0.0;
harrisjunaid 0:fb08b3e9f2f4 92 if ( supply < 3.1 )//Voltage dropped is greater than 0.4V (max of 0.5V drop is acceptable for operation)
harrisjunaid 0:fb08b3e9f2f4 93 return 1;
harrisjunaid 0:fb08b3e9f2f4 94 else
harrisjunaid 0:fb08b3e9f2f4 95 return 0;
harrisjunaid 0:fb08b3e9f2f4 96 }
harrisjunaid 0:fb08b3e9f2f4 97
harrisjunaid 0:fb08b3e9f2f4 98 void BatteryLow_Indication() {////Flash from LED1 to LED4
harrisjunaid 0:fb08b3e9f2f4 99 for (int i=0; i<4; i++) {
harrisjunaid 0:fb08b3e9f2f4 100 BatteryLow = 1 << i;
harrisjunaid 0:fb08b3e9f2f4 101 wait(0.25);
harrisjunaid 0:fb08b3e9f2f4 102 }
harrisjunaid 0:fb08b3e9f2f4 103 }
harrisjunaid 0:fb08b3e9f2f4 104
harrisjunaid 0:fb08b3e9f2f4 105 /****************************************************************
harrisjunaid 0:fb08b3e9f2f4 106 XBEE Control Functios
harrisjunaid 0:fb08b3e9f2f4 107 ****************************************************************/
harrisjunaid 0:fb08b3e9f2f4 108
harrisjunaid 0:fb08b3e9f2f4 109 void TransmitGasCounter(unsigned forced) {
harrisjunaid 0:fb08b3e9f2f4 110 pc.printf("\nTransmitGasCounter called GasCounter = %u",GasCounter);//.............DEBUG
harrisjunaid 0:fb08b3e9f2f4 111 if ( (GasCounter >= 5) || (forced == 1) ) {//Previous Gas Counter (Due To Improper Shut Down) (Forced used for previous GasCounter)
harrisjunaid 0:fb08b3e9f2f4 112 while ( !(CTS()) );//Wait Till mbed is not Clear To Send
harrisjunaid 0:fb08b3e9f2f4 113 xbee.putc('*');//Special Character Identifying Reading Transmit
harrisjunaid 0:fb08b3e9f2f4 114 xbee.putc('\r');
harrisjunaid 0:fb08b3e9f2f4 115 //xbee.printf("%u\r", GasCounter);//%u", GasCounter);
harrisjunaid 0:fb08b3e9f2f4 116 xbee.printf("%u", GasCounter);//***TRANSMIT GAS COUNTER***
harrisjunaid 0:fb08b3e9f2f4 117 GasCounter = 0;
harrisjunaid 0:fb08b3e9f2f4 118 //UpdateCounterFile();
harrisjunaid 0:fb08b3e9f2f4 119 }
harrisjunaid 0:fb08b3e9f2f4 120 }
harrisjunaid 0:fb08b3e9f2f4 121
harrisjunaid 0:fb08b3e9f2f4 122 void Xbee_Check() {//Check Xbee Power and Range
harrisjunaid 0:fb08b3e9f2f4 123 while (Xbee_On_Off() );//Execute Till XBEE is Powered OFF
harrisjunaid 0:fb08b3e9f2f4 124 while (Xbee_RangeCheck() );//Execute Till End DEVICE is not Powered ON
harrisjunaid 0:fb08b3e9f2f4 125 }
harrisjunaid 0:fb08b3e9f2f4 126
harrisjunaid 0:fb08b3e9f2f4 127 unsigned Xbee_On_Off() {//Return XBEE Power Status
harrisjunaid 0:fb08b3e9f2f4 128 if (!xbee_power) {//XBEE Powered On
harrisjunaid 0:fb08b3e9f2f4 129 XbeeOff = 1;//XBEE OFF Indicator
harrisjunaid 0:fb08b3e9f2f4 130 xbeeon_off = 1;
harrisjunaid 0:fb08b3e9f2f4 131 return 1;//Retrun XBEE is OFF
harrisjunaid 0:fb08b3e9f2f4 132 } else {//Xbee is On
harrisjunaid 0:fb08b3e9f2f4 133 XbeeOff = 0;//Will Send a Ground Signal (LED will Blink)
harrisjunaid 0:fb08b3e9f2f4 134 xbeeon_off = 0;
harrisjunaid 0:fb08b3e9f2f4 135 return 0;//Return XBEE is ON
harrisjunaid 0:fb08b3e9f2f4 136 }
harrisjunaid 0:fb08b3e9f2f4 137 }
harrisjunaid 0:fb08b3e9f2f4 138
harrisjunaid 0:fb08b3e9f2f4 139 unsigned Xbee_RangeCheck() {
harrisjunaid 0:fb08b3e9f2f4 140
harrisjunaid 0:fb08b3e9f2f4 141 char response[5];
harrisjunaid 0:fb08b3e9f2f4 142 wait(10);//Allow Time For Communication
harrisjunaid 0:fb08b3e9f2f4 143 for (int i=1 ; i<=3 ; i++) {//Enter XBEE in AT Command Mode
harrisjunaid 0:fb08b3e9f2f4 144 xbee.putc('+');
harrisjunaid 0:fb08b3e9f2f4 145 wait(0.05);
harrisjunaid 0:fb08b3e9f2f4 146 }
harrisjunaid 0:fb08b3e9f2f4 147 xbee.scanf("%s",response);//Get Xbee Response
harrisjunaid 0:fb08b3e9f2f4 148 //pc.printf("\n%s\n",response);//////////////...........DEBUG
harrisjunaid 0:fb08b3e9f2f4 149
harrisjunaid 0:fb08b3e9f2f4 150 //XBEE IS IN COMMAND MODE AND OK RESPONSE IS READ
harrisjunaid 0:fb08b3e9f2f4 151 xbee.printf("ATNDLOGGER");//AT(AT Command Mode) DN(Destination Node Command) LOGGER(Node Identifier "NI" for END DEVICE)
harrisjunaid 0:fb08b3e9f2f4 152 xbee.putc('\r');//Carriage Return
harrisjunaid 0:fb08b3e9f2f4 153 xbee.scanf("%s",response);//Get Response
harrisjunaid 0:fb08b3e9f2f4 154 //pc.printf("\n%s\n",response);/////////////.............DEBUG
harrisjunaid 0:fb08b3e9f2f4 155 xbee.printf("ATCN");
harrisjunaid 0:fb08b3e9f2f4 156 xbee.putc('\r');
harrisjunaid 0:fb08b3e9f2f4 157 if (response[0] == 'E') {//Could Not Find End Device ("ERROR"\r returned)
harrisjunaid 0:fb08b3e9f2f4 158 pc.printf("\nCound not find END DEVICE\n");/////////.............DEBUG
harrisjunaid 0:fb08b3e9f2f4 159 EndDevice_Indication();
harrisjunaid 0:fb08b3e9f2f4 160 return 1;//Return No End Device
harrisjunaid 0:fb08b3e9f2f4 161
harrisjunaid 0:fb08b3e9f2f4 162 } else {//End Device is Active ("OK"\r returned)
harrisjunaid 0:fb08b3e9f2f4 163 //pc.printf("\nEnd Device Responded\n");/////////.............DEBUG
harrisjunaid 0:fb08b3e9f2f4 164 return 0;//Return End Device is ON
harrisjunaid 0:fb08b3e9f2f4 165 }
harrisjunaid 0:fb08b3e9f2f4 166 }
harrisjunaid 0:fb08b3e9f2f4 167
harrisjunaid 0:fb08b3e9f2f4 168 unsigned CTS() {//returns 1 when mbed is Clear To Send
harrisjunaid 0:fb08b3e9f2f4 169 if (xbee_CTS == 0) return 1;//mbed is Clear To Send
harrisjunaid 0:fb08b3e9f2f4 170 else return 0;
harrisjunaid 0:fb08b3e9f2f4 171 }
harrisjunaid 0:fb08b3e9f2f4 172
harrisjunaid 0:fb08b3e9f2f4 173 void Xbee_Reset() {
harrisjunaid 0:fb08b3e9f2f4 174 xbee_reset = 0;//RESET
harrisjunaid 0:fb08b3e9f2f4 175 wait_ms(1);
harrisjunaid 0:fb08b3e9f2f4 176 xbee_reset = 1;//Back To Operation
harrisjunaid 0:fb08b3e9f2f4 177 wait_ms(1);
harrisjunaid 0:fb08b3e9f2f4 178 }
harrisjunaid 0:fb08b3e9f2f4 179
harrisjunaid 0:fb08b3e9f2f4 180 void XbeeSleep(unsigned sleep) {
harrisjunaid 0:fb08b3e9f2f4 181 //pc.printf("\nSleep Called\n");////////////............DEBUG
harrisjunaid 0:fb08b3e9f2f4 182 if (sleep == 1) xbee_sleep = 1;//SLEEP_RQ pin 9
harrisjunaid 0:fb08b3e9f2f4 183 else xbee_sleep = 0;
harrisjunaid 0:fb08b3e9f2f4 184 wait(2);//Time for XBEE to Respond
harrisjunaid 0:fb08b3e9f2f4 185 }
harrisjunaid 0:fb08b3e9f2f4 186
harrisjunaid 0:fb08b3e9f2f4 187 void EndDevice_Indication() {//Flash LED2 => NO END DEVICE
harrisjunaid 0:fb08b3e9f2f4 188 for (unsigned i=0; i<=5 ; i++) {
harrisjunaid 0:fb08b3e9f2f4 189 EndDeviceOff = 1;
harrisjunaid 0:fb08b3e9f2f4 190 wait(0.2);
harrisjunaid 0:fb08b3e9f2f4 191 EndDeviceOff = 0;
harrisjunaid 0:fb08b3e9f2f4 192 wait(0.2);
harrisjunaid 0:fb08b3e9f2f4 193 EndDeviceOff = 1;
harrisjunaid 0:fb08b3e9f2f4 194 wait(0.2);
harrisjunaid 0:fb08b3e9f2f4 195 EndDeviceOff = 0;
harrisjunaid 0:fb08b3e9f2f4 196 }
harrisjunaid 0:fb08b3e9f2f4 197 }
harrisjunaid 0:fb08b3e9f2f4 198
harrisjunaid 0:fb08b3e9f2f4 199 void BoilerSafeOn() {//LED2
harrisjunaid 0:fb08b3e9f2f4 200 BoilerOn = 1;
harrisjunaid 0:fb08b3e9f2f4 201 wait(4);
harrisjunaid 0:fb08b3e9f2f4 202 BoilerOn = 0;
harrisjunaid 0:fb08b3e9f2f4 203 }
harrisjunaid 0:fb08b3e9f2f4 204 /****************************************************************
harrisjunaid 0:fb08b3e9f2f4 205 FILE MANIPULATION FUNCTIONS
harrisjunaid 0:fb08b3e9f2f4 206
harrisjunaid 0:fb08b3e9f2f4 207 Checks if reading record file is present. File is created if not
harrisjunaid 0:fb08b3e9f2f4 208 found or else it will be read for previous untransmitted counter.
harrisjunaid 0:fb08b3e9f2f4 209 Variable previous_consumption has global scope.
harrisjunaid 0:fb08b3e9f2f4 210 ****************************************************************/
harrisjunaid 0:fb08b3e9f2f4 211
harrisjunaid 0:fb08b3e9f2f4 212 unsigned CheckCounterFile() {// Checks For Previous Readings
harrisjunaid 0:fb08b3e9f2f4 213
harrisjunaid 0:fb08b3e9f2f4 214 FILE *counter;// Pointer for COUNTER.txt (Gas consumption data)
harrisjunaid 0:fb08b3e9f2f4 215
harrisjunaid 0:fb08b3e9f2f4 216 if ( (counter = fopen("/fs/COUNTER.txt", "r")) == NULL) {// Check if the file exist
harrisjunaid 0:fb08b3e9f2f4 217 pc.printf("File not found so created\n");//////////////////////................DEBUG
harrisjunaid 0:fb08b3e9f2f4 218 counter = fopen("/fs/COUNTER.txt", "w");//File created mode = w
harrisjunaid 0:fb08b3e9f2f4 219
harrisjunaid 0:fb08b3e9f2f4 220 } else {//File exist
harrisjunaid 0:fb08b3e9f2f4 221
harrisjunaid 0:fb08b3e9f2f4 222 fscanf( counter,"%u", &GasCounter) ;//Update GasCounter
harrisjunaid 0:fb08b3e9f2f4 223 pc.printf( "previous value %u\n", GasCounter);////////................DEBUG
harrisjunaid 0:fb08b3e9f2f4 224
harrisjunaid 0:fb08b3e9f2f4 225
harrisjunaid 0:fb08b3e9f2f4 226 }
harrisjunaid 0:fb08b3e9f2f4 227 fclose(counter);//close file handler
harrisjunaid 0:fb08b3e9f2f4 228
harrisjunaid 0:fb08b3e9f2f4 229 //Return status for indication activation
harrisjunaid 0:fb08b3e9f2f4 230 if (GasCounter > 0) {
harrisjunaid 0:fb08b3e9f2f4 231
harrisjunaid 0:fb08b3e9f2f4 232 return 1;//Return There Were Previous Readings
harrisjunaid 0:fb08b3e9f2f4 233 } else return 0;//Return No Previous Reading
harrisjunaid 0:fb08b3e9f2f4 234
harrisjunaid 0:fb08b3e9f2f4 235 }
harrisjunaid 0:fb08b3e9f2f4 236
harrisjunaid 0:fb08b3e9f2f4 237 void UpdateCounterFile() {
harrisjunaid 0:fb08b3e9f2f4 238 pc.printf("\nUpdateCounterFile called GasCounter = %u",GasCounter);//.............DEBUG
harrisjunaid 0:fb08b3e9f2f4 239 unsigned PreviousCounter = 0;
harrisjunaid 0:fb08b3e9f2f4 240 FILE *counter;// Pointer for COUNTER.txt (Gas consumption data)
harrisjunaid 0:fb08b3e9f2f4 241 if (GasCounter == 0)
harrisjunaid 0:fb08b3e9f2f4 242 counter = fopen("/fs/COUNTER.txt", "w");//Contents Discarded
harrisjunaid 0:fb08b3e9f2f4 243 else {
harrisjunaid 0:fb08b3e9f2f4 244 counter = fopen("/fs/COUNTER.txt", "r");
harrisjunaid 0:fb08b3e9f2f4 245 fscanf( counter,"%u", &PreviousCounter);
harrisjunaid 0:fb08b3e9f2f4 246 fclose(counter);
harrisjunaid 0:fb08b3e9f2f4 247 counter = fopen("/fs/COUNTER.txt", "w");//Contents Discarded
harrisjunaid 0:fb08b3e9f2f4 248 GasCounter = GasCounter + PreviousCounter;
harrisjunaid 0:fb08b3e9f2f4 249 fprintf( counter, "%u", GasCounter );
harrisjunaid 0:fb08b3e9f2f4 250 pc.printf("\rCounter file update: %u\r");///////......DEBUG
harrisjunaid 0:fb08b3e9f2f4 251 GasCounter = 0;
harrisjunaid 0:fb08b3e9f2f4 252 }
harrisjunaid 0:fb08b3e9f2f4 253 fclose(counter);
harrisjunaid 0:fb08b3e9f2f4 254 }
harrisjunaid 0:fb08b3e9f2f4 255
harrisjunaid 0:fb08b3e9f2f4 256
harrisjunaid 0:fb08b3e9f2f4 257
harrisjunaid 0:fb08b3e9f2f4 258 void PreviousData_Indication() {//LED4 is Flashed (Indicating previous shut down was not safe)
harrisjunaid 0:fb08b3e9f2f4 259 for (unsigned i=0; i<=5 ; i++) {
harrisjunaid 0:fb08b3e9f2f4 260 PreviousData = 1;
harrisjunaid 0:fb08b3e9f2f4 261 wait(0.2);
harrisjunaid 0:fb08b3e9f2f4 262 PreviousData = 0;
harrisjunaid 0:fb08b3e9f2f4 263 wait(0.2);
harrisjunaid 0:fb08b3e9f2f4 264 PreviousData = 1;
harrisjunaid 0:fb08b3e9f2f4 265 wait(0.2);
harrisjunaid 0:fb08b3e9f2f4 266 PreviousData = 0;
harrisjunaid 0:fb08b3e9f2f4 267
harrisjunaid 0:fb08b3e9f2f4 268 }
harrisjunaid 0:fb08b3e9f2f4 269 }
harrisjunaid 0:fb08b3e9f2f4 270
harrisjunaid 0:fb08b3e9f2f4 271 /////////////////////////////////////////////////////////////////
harrisjunaid 0:fb08b3e9f2f4 272 void MeterReader_On() {
harrisjunaid 0:fb08b3e9f2f4 273 pc.printf("\nMeterReader_On called GasCounter = %u",GasCounter);//.............DEBUG
harrisjunaid 0:fb08b3e9f2f4 274 //Battery Voltage Check
harrisjunaid 0:fb08b3e9f2f4 275 while ( BatteryCheck() )//Till Battery is not sufficiently charged
harrisjunaid 0:fb08b3e9f2f4 276 BatteryLow_Indication();//Battery Low Indication
harrisjunaid 0:fb08b3e9f2f4 277
harrisjunaid 0:fb08b3e9f2f4 278 //Last Shutdown Check
harrisjunaid 0:fb08b3e9f2f4 279 if ( CheckCounterFile() )//GasCounter update from previous untransmitted record and return status
harrisjunaid 0:fb08b3e9f2f4 280 PreviousData_Indication();//LED 4 Flash
harrisjunaid 0:fb08b3e9f2f4 281
harrisjunaid 0:fb08b3e9f2f4 282
harrisjunaid 0:fb08b3e9f2f4 283 //Reset XBEE
harrisjunaid 0:fb08b3e9f2f4 284 Xbee_Reset();
harrisjunaid 0:fb08b3e9f2f4 285
harrisjunaid 0:fb08b3e9f2f4 286 //Check XBEE Power and Communication
harrisjunaid 0:fb08b3e9f2f4 287 Xbee_Check();//Checks for XBEE and provides LED indication
harrisjunaid 0:fb08b3e9f2f4 288 //Will not move forward in case of an error
harrisjunaid 0:fb08b3e9f2f4 289
harrisjunaid 0:fb08b3e9f2f4 290 //Check For Previous Counter and Transmit if any
harrisjunaid 0:fb08b3e9f2f4 291 if (GasCounter > 0)TransmitGasCounter(1);//FORCE TO TRANSMIT PREVIOUS READINGS IF ANY
harrisjunaid 0:fb08b3e9f2f4 292 //TransmitGasCounter will reset GasCounter after reading transmition
harrisjunaid 0:fb08b3e9f2f4 293
harrisjunaid 0:fb08b3e9f2f4 294 //XBEE to sleep
harrisjunaid 0:fb08b3e9f2f4 295 XbeeSleep(1);
harrisjunaid 0:fb08b3e9f2f4 296
harrisjunaid 0:fb08b3e9f2f4 297 //Boiler Can Be Turned On
harrisjunaid 0:fb08b3e9f2f4 298 BoilerSafeOn();
harrisjunaid 0:fb08b3e9f2f4 299
harrisjunaid 0:fb08b3e9f2f4 300 // Xbee_Check();////XBee should be powered off//////..........DEBUG
harrisjunaid 0:fb08b3e9f2f4 301 // SafeShutdown = 1;//////////////.............DEBUG
harrisjunaid 0:fb08b3e9f2f4 302 // deepsleep();
harrisjunaid 0:fb08b3e9f2f4 303 //SafeShutdown = 0;//////////////////..........DEBUG
harrisjunaid 0:fb08b3e9f2f4 304
harrisjunaid 0:fb08b3e9f2f4 305 }
harrisjunaid 0:fb08b3e9f2f4 306
harrisjunaid 0:fb08b3e9f2f4 307 void Reading_Handler() {
harrisjunaid 0:fb08b3e9f2f4 308 pc.printf("\nReading_Handler called GasCounter = %u",GasCounter);//.............DEBUG
harrisjunaid 0:fb08b3e9f2f4 309 if (GasCounter >= 4) {//Function Internal Check
harrisjunaid 0:fb08b3e9f2f4 310 XbeeSleep(0);
harrisjunaid 0:fb08b3e9f2f4 311 wait(5);
harrisjunaid 0:fb08b3e9f2f4 312 TransmitGasCounter(1);//Readings are above limit SO FORCE TRANSMIT
harrisjunaid 0:fb08b3e9f2f4 313
harrisjunaid 0:fb08b3e9f2f4 314 UpdateCounterFile();//Update GasCounter in file (Record is maintained in file to prevent power off data loss)
harrisjunaid 0:fb08b3e9f2f4 315 }
harrisjunaid 0:fb08b3e9f2f4 316
harrisjunaid 0:fb08b3e9f2f4 317
harrisjunaid 0:fb08b3e9f2f4 318 XbeeSleep(1);
harrisjunaid 0:fb08b3e9f2f4 319 //SafeShutdown = !SafeShutdown;////LED1//////////.............DEBUG
harrisjunaid 0:fb08b3e9f2f4 320 //deepsleep();
harrisjunaid 0:fb08b3e9f2f4 321 }
harrisjunaid 0:fb08b3e9f2f4 322
harrisjunaid 0:fb08b3e9f2f4 323 void SensorInput() {
harrisjunaid 0:fb08b3e9f2f4 324 if ((SensorIn_Filter.read()) == 0) {
harrisjunaid 0:fb08b3e9f2f4 325 SensorIn_Filter.start();
harrisjunaid 0:fb08b3e9f2f4 326 CounterIncrement = 1;///////LED2.............DEBUG
harrisjunaid 0:fb08b3e9f2f4 327 }
harrisjunaid 0:fb08b3e9f2f4 328 while (1) {
harrisjunaid 0:fb08b3e9f2f4 329 if ( (SensorIn_Filter.read() ) >= 2) {//Readings within last 2 sec from call are ignored as SensorIn noise
harrisjunaid 0:fb08b3e9f2f4 330
harrisjunaid 0:fb08b3e9f2f4 331 GasCounter = GasCounter + 1;//Update Gas Counter as a result of sensor input
harrisjunaid 0:fb08b3e9f2f4 332 pc.printf("\nSensorInput incremented GasCountre: %u", GasCounter);//////////.........DEBUG
harrisjunaid 0:fb08b3e9f2f4 333
harrisjunaid 0:fb08b3e9f2f4 334 SensorIn_Filter.stop();
harrisjunaid 0:fb08b3e9f2f4 335 SensorIn_Filter.reset();
harrisjunaid 0:fb08b3e9f2f4 336 CounterIncrement = 0;
harrisjunaid 0:fb08b3e9f2f4 337 break;
harrisjunaid 0:fb08b3e9f2f4 338 }
harrisjunaid 0:fb08b3e9f2f4 339 }
harrisjunaid 0:fb08b3e9f2f4 340 }
harrisjunaid 0:fb08b3e9f2f4 341
harrisjunaid 0:fb08b3e9f2f4 342 int main() {
harrisjunaid 0:fb08b3e9f2f4 343
harrisjunaid 0:fb08b3e9f2f4 344 SensorIn.rise(&SensorInput);
harrisjunaid 0:fb08b3e9f2f4 345 MeterReader_On();
harrisjunaid 0:fb08b3e9f2f4 346 while (1) {
harrisjunaid 0:fb08b3e9f2f4 347
harrisjunaid 0:fb08b3e9f2f4 348 if (GasCounter>=5) {
harrisjunaid 0:fb08b3e9f2f4 349
harrisjunaid 0:fb08b3e9f2f4 350 Reading_Handler();
harrisjunaid 1:3830cdfa2c1b 351 } else deepsleep();
harrisjunaid 0:fb08b3e9f2f4 352 }
harrisjunaid 0:fb08b3e9f2f4 353
harrisjunaid 0:fb08b3e9f2f4 354 }