Meter Reader without Local File System

Committer:
harrisjunaid
Date:
Mon May 07 23:50:04 2012 +0000
Revision:
1:a56c5b1fd04f
Parent:
0:5a3c139b6cc2

        

Who changed what in which revision?

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