electronic water meter system

Dependencies:   mbed Comms

Committer:
magidimisi
Date:
Wed Feb 10 10:18:23 2021 +0000
Revision:
0:4965eb440b44
Electronic water meter

Who changed what in which revision?

UserRevisionLine numberNew contents of line
magidimisi 0:4965eb440b44 1 /*##########################################################################################
magidimisi 0:4965eb440b44 2
magidimisi 0:4965eb440b44 3 Program Name : ex1_HC06_leds
magidimisi 0:4965eb440b44 4 Author : Grant Phillips
magidimisi 0:4965eb440b44 5 Date Modified : 12/05/2016
magidimisi 0:4965eb440b44 6 Compiler : ARMmbed
magidimisi 0:4965eb440b44 7 Tested On : STM32F4-Discovery
magidimisi 0:4965eb440b44 8 Discription : I used some of the program to develop mine Elecrtonic Householder Water Meter
magidimisi 0:4965eb440b44 9 ##############################################################################################*/
magidimisi 0:4965eb440b44 10 ///////////////////////DECLARING LIBRIES////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 11
magidimisi 0:4965eb440b44 12 #include "mbed.h"
magidimisi 0:4965eb440b44 13 //////////////////////////////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 14
magidimisi 0:4965eb440b44 15 /////////////////////////////////DECLARING BLUETOOTH MODULE PINS//////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 16
magidimisi 0:4965eb440b44 17 Serial bt(PC_10, PC_11); //create a Serial object to connect to the HC05 Bluetooth module
magidimisi 0:4965eb440b44 18 // tx , rx
magidimisi 0:4965eb440b44 19 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 20
magidimisi 0:4965eb440b44 21 ///////////////////////////DECLARING SOLAR PANEL TRANSISTOR'S OPARATIONAL PINS///////////////////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 22
magidimisi 0:4965eb440b44 23 DigitalOut Q1(PA_10); // Solar Panel Forward bias (Q1)transistor for the posistive leg
magidimisi 0:4965eb440b44 24 DigitalOut Q2(PB_3); // Solar Panel Voltage testing loop forward bias Q2 for the positive leg of the loop
magidimisi 0:4965eb440b44 25 DigitalOut Q3(PB_5); // Solar Panel Voltage testing loop forward bias Q3 for the negetive leg of the loop back to the Solar
magidimisi 0:4965eb440b44 26 DigitalOut Q4(PB_4); // Solar Panel Forward bias (Q4)transistor for the negetive leg
magidimisi 0:4965eb440b44 27 AnalogIn SolarVolt(PC_0); // Solar Panel supply Voltage
magidimisi 0:4965eb440b44 28 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 29
magidimisi 0:4965eb440b44 30 //////////////////////////////DECLARING HYDRO GENERATION TRANSISTOR'S OPARATIONAL PINS///////////////////////////////////////////
magidimisi 0:4965eb440b44 31
magidimisi 0:4965eb440b44 32 DigitalOut Q5(PB_13); //Hydro Generator Forward bias Q5 transistor for the posistive leg
magidimisi 0:4965eb440b44 33 DigitalOut Q6(PB_14); //Hydro Generator Voltage testing loop bias Q6 for the positive leg of the loop
magidimisi 0:4965eb440b44 34 DigitalOut Q7(PB_15); //Hydro Generator Voltage testing loop bias Q7 for the negetive leg of the loop back to the hydro
magidimisi 0:4965eb440b44 35 DigitalOut Q8(PB_2); //Hydro Generator Forward bias Q8 transistor nfor the egetive leg
magidimisi 0:4965eb440b44 36 AnalogIn HydroVolt(PC_1); //Hydro Generator supply Voltage
magidimisi 0:4965eb440b44 37 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 38
magidimisi 0:4965eb440b44 39 //////////////////////////////DECLARING FAN TRANSISTOR'S PIN///////////////////////////////////////////
magidimisi 0:4965eb440b44 40
magidimisi 0:4965eb440b44 41 DigitalOut Q9(PC_6); // Forward bias to keep the fan on
magidimisi 0:4965eb440b44 42 ////////////////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 43
magidimisi 0:4965eb440b44 44 ///////////////////////////DECLARING WATER VALVE TRANSISTOR'S PIN//////////////
magidimisi 0:4965eb440b44 45
magidimisi 0:4965eb440b44 46 DigitalOut Q10(PC_8); // Forward bias to keep the valve open
magidimisi 0:4965eb440b44 47 /////////////////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 48
magidimisi 0:4965eb440b44 49 //////////////////////////////DECLARING BATTERY TRANSISTOR'S OPARATIONAL PINS/////////////////////////////////////////////////
magidimisi 0:4965eb440b44 50
magidimisi 0:4965eb440b44 51 DigitalOut Q11(PB_8); // Battery Voltage testing loop bias Q11 for the positive leg of the loop
magidimisi 0:4965eb440b44 52 DigitalOut Q12(PC_9); // Battery Voltage testing loop biasing Q12 for the negative leg of the loop down to nuetral of the load
magidimisi 0:4965eb440b44 53 AnalogIn BatVolt(PA_4); // Battery Panel supply Voltage
magidimisi 0:4965eb440b44 54 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 55
magidimisi 0:4965eb440b44 56 /////////////////////////////DECLARING WATER METER TRANSISTOR'S OPARATIONAL PIN///////////////////////////////////
magidimisi 0:4965eb440b44 57
magidimisi 0:4965eb440b44 58 AnalogIn Met(PA_1); // Water meter
magidimisi 0:4965eb440b44 59 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 60
magidimisi 0:4965eb440b44 61 ////////DECLARING WATER SENSOR TRANSISTOR'S OPARATIONAL PIN///////////////////////////////
magidimisi 0:4965eb440b44 62 AnalogIn Sen(PA_0); //Water Sensor
magidimisi 0:4965eb440b44 63 //////////////////////////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 64
magidimisi 0:4965eb440b44 65 /////////////////////////////DECLARING WATER METER VARABLE//////////////////////////////////
magidimisi 0:4965eb440b44 66
magidimisi 0:4965eb440b44 67 double METER; // Water Meter varable that posses a the current Kiloliter value
magidimisi 0:4965eb440b44 68
magidimisi 0:4965eb440b44 69 //////////////////////////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 70
magidimisi 0:4965eb440b44 71
magidimisi 0:4965eb440b44 72 ////////////IT'S A SUB PROGRAM THAT CLOSES THE WATER VALVE/////////////
magidimisi 0:4965eb440b44 73 void ClosedValve()
magidimisi 0:4965eb440b44 74 {
magidimisi 0:4965eb440b44 75 Q10 = 0;
magidimisi 0:4965eb440b44 76 }
magidimisi 0:4965eb440b44 77 ////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 78
magidimisi 0:4965eb440b44 79 ///////////////////////IT'S A SUB PROGRAM THAT OPENS THE WATER VALVE////////////////////////
magidimisi 0:4965eb440b44 80 void OpenValve ()
magidimisi 0:4965eb440b44 81 {
magidimisi 0:4965eb440b44 82 Q10 = 1;
magidimisi 0:4965eb440b44 83 }
magidimisi 0:4965eb440b44 84 ////////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 85
magidimisi 0:4965eb440b44 86 /////////////////IT'S A SUB PROGRAM THAT COMPARES THE WATER METER AND THE WATER SENSOR VALUES THAT ARE EQUAL///////////////
magidimisi 0:4965eb440b44 87 void Water_Valve ()
magidimisi 0:4965eb440b44 88 {
magidimisi 0:4965eb440b44 89 while (1)
magidimisi 0:4965eb440b44 90 {
magidimisi 0:4965eb440b44 91 if (Met.read_u16() != Sen.read_u16())
magidimisi 0:4965eb440b44 92 {
magidimisi 0:4965eb440b44 93 ClosedValve();
magidimisi 0:4965eb440b44 94 wait (0.2);
magidimisi 0:4965eb440b44 95 }
magidimisi 0:4965eb440b44 96 else
magidimisi 0:4965eb440b44 97 {
magidimisi 0:4965eb440b44 98 OpenValve ();
magidimisi 0:4965eb440b44 99 }
magidimisi 0:4965eb440b44 100 }
magidimisi 0:4965eb440b44 101 }
magidimisi 0:4965eb440b44 102 ///////////////////////////////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 103
magidimisi 0:4965eb440b44 104 ///////////////////////////////////NORMAL OPARATIONS SUB PROGRAM WHICH BIAS THE TRANSISTORS//////////////////
magidimisi 0:4965eb440b44 105
magidimisi 0:4965eb440b44 106 void Normal() // When every thing is running normal
magidimisi 0:4965eb440b44 107 {
magidimisi 0:4965eb440b44 108 Q1 = 1;
magidimisi 0:4965eb440b44 109 Q2 = 0;
magidimisi 0:4965eb440b44 110 Q3 = 0;
magidimisi 0:4965eb440b44 111 Q4 = 1;
magidimisi 0:4965eb440b44 112 Q5 = 1;
magidimisi 0:4965eb440b44 113 Q6 = 0;
magidimisi 0:4965eb440b44 114 Q7 = 0;
magidimisi 0:4965eb440b44 115 Q8 = 1;
magidimisi 0:4965eb440b44 116 Q9 = 1;
magidimisi 0:4965eb440b44 117 Water_Valve ();
magidimisi 0:4965eb440b44 118 Q11 = 0;
magidimisi 0:4965eb440b44 119 Q12 = 0;
magidimisi 0:4965eb440b44 120 }
magidimisi 0:4965eb440b44 121 ////////////////////////////////////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 122
magidimisi 0:4965eb440b44 123 ////////////////////////////////IT'S A SUB PROGRAM OF THE WATER SENSOR OPARATION////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 124 void Water_Sensor()
magidimisi 0:4965eb440b44 125 {
magidimisi 0:4965eb440b44 126
magidimisi 0:4965eb440b44 127 uint16_t senval; //Declare variable to store the water analog value after conversion - 16-bit
magidimisi 0:4965eb440b44 128 uint32_t senval_sum; //Declare variable to store the water analog value sum in loop - 32-bit
magidimisi 0:4965eb440b44 129 double senkvolt; //Declare 64-bit floating point data type to store water analog killovoltage value
magidimisi 0:4965eb440b44 130
magidimisi 0:4965eb440b44 131 while(1)
magidimisi 0:4965eb440b44 132 {
magidimisi 0:4965eb440b44 133 //read the 16-bit value from the analog pin, The STM32F4-Trainer only supports 12-bit A/D (0 - 4095),
magidimisi 0:4965eb440b44 134 senval = Sen.read_u16(); //but the read_u16 function converts it to a 16-bit value (0 - 65535)
magidimisi 0:4965eb440b44 135 senval_sum = senval_sum + senval; //Add every analog reading to the sum variable
magidimisi 0:4965eb440b44 136
magidimisi 0:4965eb440b44 137 //calculate the voltage from the 16-bit value
magidimisi 0:4965eb440b44 138 senkvolt = ((double)senval_sum* 0.00158) / 65535.0 * 3.3; //cast analogval to a double data type for formula to store result as double
magidimisi 0:4965eb440b44 139 // 1 Volt = 1.58 litres then one kilolitres is 1580 acording to kyleconvert.com
magidimisi 0:4965eb440b44 140 wait (0.2);
magidimisi 0:4965eb440b44 141 }
magidimisi 0:4965eb440b44 142 }
magidimisi 0:4965eb440b44 143 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 144
magidimisi 0:4965eb440b44 145 ////////////////////////////////IT'S A SUB PROGRAM OF THE WATER METER OPARATION///////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 146 void Water_Readings()
magidimisi 0:4965eb440b44 147 {
magidimisi 0:4965eb440b44 148
magidimisi 0:4965eb440b44 149 uint16_t watval; //Declare variable to store the water analog value after conversion - 16-bit
magidimisi 0:4965eb440b44 150 uint32_t watval_sum; //Declare variable to store the water analog value sum in loop - 32-bit
magidimisi 0:4965eb440b44 151 double watkvolt; //Declare 64-bit floating point data type to store water analog killovoltage value
magidimisi 0:4965eb440b44 152
magidimisi 0:4965eb440b44 153 while(1)
magidimisi 0:4965eb440b44 154 {
magidimisi 0:4965eb440b44 155 //read the 16-bit value from the analog pin, The STM32F4-Trainer only supports 12-bit A/D (0 - 4095),
magidimisi 0:4965eb440b44 156 watval = Met.read_u16(); //but the read_u16 function converts it to a 16-bit value (0 - 65535)
magidimisi 0:4965eb440b44 157 watval_sum = watval_sum + watval; //Add every analog reading to the sum variable
magidimisi 0:4965eb440b44 158
magidimisi 0:4965eb440b44 159 //calculate the voltage from the 16-bit value
magidimisi 0:4965eb440b44 160 watkvolt = ((double)watval_sum * 0.00158) / 65535.0 * 3.3; //cast analogval to a double data type for formula to store result as double
magidimisi 0:4965eb440b44 161 // 1 Volt = 1.58 litres then one kilolitres is 1580 acording to kyleconvert.com
magidimisi 0:4965eb440b44 162 METER = watkvolt;
magidimisi 0:4965eb440b44 163 bt.printf(" %2.3f Volts \n", watkvolt);
magidimisi 0:4965eb440b44 164 wait (0.2);
magidimisi 0:4965eb440b44 165 Normal ();
magidimisi 0:4965eb440b44 166 }
magidimisi 0:4965eb440b44 167 }
magidimisi 0:4965eb440b44 168 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 169
magidimisi 0:4965eb440b44 170 /////////////////////////////////////IT'S A SUB PROGRAM THAT TEST THE SOLAR PANNEL'S VOLTAGE VALUE/////////////////////////////////////////////
magidimisi 0:4965eb440b44 171
magidimisi 0:4965eb440b44 172 void Test_Solar() //The loop to test the Solar Panel's voltage
magidimisi 0:4965eb440b44 173 {
magidimisi 0:4965eb440b44 174 Q1 = 0;
magidimisi 0:4965eb440b44 175 Q2 = 1;
magidimisi 0:4965eb440b44 176 Q3 = 1;
magidimisi 0:4965eb440b44 177 Q4 = 0;
magidimisi 0:4965eb440b44 178 Q5 = 1;
magidimisi 0:4965eb440b44 179 Q6 = 0;
magidimisi 0:4965eb440b44 180 Q7 = 0;
magidimisi 0:4965eb440b44 181 Q8 = 1;
magidimisi 0:4965eb440b44 182 Q9 = 1;
magidimisi 0:4965eb440b44 183
magidimisi 0:4965eb440b44 184 Q11 = 0;
magidimisi 0:4965eb440b44 185 Q12 = 0;
magidimisi 0:4965eb440b44 186
magidimisi 0:4965eb440b44 187 uint16_t solval; //Declare variable to store analog value after conversion - 16-bit
magidimisi 0:4965eb440b44 188 double solvolt; //Declare 64-bit floating point data type to store analog voltage value
magidimisi 0:4965eb440b44 189
magidimisi 0:4965eb440b44 190 while (1)
magidimisi 0:4965eb440b44 191
magidimisi 0:4965eb440b44 192 {
magidimisi 0:4965eb440b44 193 //read the 16-bit value from the analog pin, The STM32F4-Trainer only supports 12-bit A/D (0 - 4095),
magidimisi 0:4965eb440b44 194 solval = SolarVolt.read_u16(); //but the read_u16 function converts it to a 16-bit value (0 - 65535)
magidimisi 0:4965eb440b44 195
magidimisi 0:4965eb440b44 196 //calculate the voltage from the 16-bit value
magidimisi 0:4965eb440b44 197 solvolt = ((double)solval*5.9613) / 65535.0 * 3.3; //cast analogval to a double data type for formula to store result as double
magidimisi 0:4965eb440b44 198 //5.9613 convert the voltage value to equeal the supply
magidimisi 0:4965eb440b44 199 bt.printf("%2.3f Volts \n", solvolt);
magidimisi 0:4965eb440b44 200 wait (5);
magidimisi 0:4965eb440b44 201 Normal ();
magidimisi 0:4965eb440b44 202 }
magidimisi 0:4965eb440b44 203 }
magidimisi 0:4965eb440b44 204 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 205
magidimisi 0:4965eb440b44 206 ////////////////////////////////IT'S A SUB PROGRAM THAT TEST THE HYDRO GENERATOR'S VOLTAGE VALUE///////////////////////////////////////////////
magidimisi 0:4965eb440b44 207
magidimisi 0:4965eb440b44 208 void Test_Hydro() // the loop to test the Hydro Generator's voltage
magidimisi 0:4965eb440b44 209 {
magidimisi 0:4965eb440b44 210 Q1 = 1;
magidimisi 0:4965eb440b44 211 Q2 = 0;
magidimisi 0:4965eb440b44 212 Q3 = 0;
magidimisi 0:4965eb440b44 213 Q4 = 1;
magidimisi 0:4965eb440b44 214 Q5 = 0;
magidimisi 0:4965eb440b44 215 Q6 = 1;
magidimisi 0:4965eb440b44 216 Q7 = 1;
magidimisi 0:4965eb440b44 217 Q8 = 0;
magidimisi 0:4965eb440b44 218 Q9 = 1;
magidimisi 0:4965eb440b44 219
magidimisi 0:4965eb440b44 220 Q11 = 0;
magidimisi 0:4965eb440b44 221 Q12 = 0;
magidimisi 0:4965eb440b44 222
magidimisi 0:4965eb440b44 223 uint16_t hydval; //Declare variable to store analog value after conversion - 16-bit
magidimisi 0:4965eb440b44 224 double hydvolt; //Declare 64-bit floating point data type to store analog voltage value
magidimisi 0:4965eb440b44 225
magidimisi 0:4965eb440b44 226 while (1)
magidimisi 0:4965eb440b44 227
magidimisi 0:4965eb440b44 228 {
magidimisi 0:4965eb440b44 229 //read the 16-bit value from the analog pin, The STM32F4-Trainer only supports 12-bit A/D (0 - 4095),
magidimisi 0:4965eb440b44 230 hydval = HydroVolt.read_u16(); //but the read_u16 function converts it to a 16-bit value (0 - 65535)
magidimisi 0:4965eb440b44 231
magidimisi 0:4965eb440b44 232 //calculate the voltage from the 16-bit value
magidimisi 0:4965eb440b44 233 hydvolt = ((double)hydval * 5.9613) / 65535.0 * 3.3; //cast analogval to a double data type for formula to store result as double
magidimisi 0:4965eb440b44 234 //5.9613 convert the voltage value to equeal the supply
magidimisi 0:4965eb440b44 235 bt.printf("%2.3f Volts \n", hydvolt);
magidimisi 0:4965eb440b44 236 wait (5);
magidimisi 0:4965eb440b44 237 Normal();
magidimisi 0:4965eb440b44 238 }
magidimisi 0:4965eb440b44 239 }
magidimisi 0:4965eb440b44 240 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 241
magidimisi 0:4965eb440b44 242 /////////////////////////////////IT'S A SUB PROGRAM THAT TEST THE 12 VOLTS BATTERY'S VOLTAGE VALUE/////////////////////////////////////////////
magidimisi 0:4965eb440b44 243 void Test_Battery() // The loop to test the battery's voltage
magidimisi 0:4965eb440b44 244 {
magidimisi 0:4965eb440b44 245 Q1 = 0;
magidimisi 0:4965eb440b44 246 Q2 = 0;
magidimisi 0:4965eb440b44 247 Q3 = 0;
magidimisi 0:4965eb440b44 248 Q4 = 0;
magidimisi 0:4965eb440b44 249 Q5 = 0;
magidimisi 0:4965eb440b44 250 Q6 = 0;
magidimisi 0:4965eb440b44 251 Q7 = 0;
magidimisi 0:4965eb440b44 252 Q8 = 0;
magidimisi 0:4965eb440b44 253
magidimisi 0:4965eb440b44 254 Q9 = 0;
magidimisi 0:4965eb440b44 255 Q11 = 1;
magidimisi 0:4965eb440b44 256 Q12 = 1;
magidimisi 0:4965eb440b44 257
magidimisi 0:4965eb440b44 258 uint16_t battval; //Declare variable to store analog value after conversion - 16-bit
magidimisi 0:4965eb440b44 259 double battvolt; //Declare 64-bit floating point data type to store analog voltage value
magidimisi 0:4965eb440b44 260 while (1)
magidimisi 0:4965eb440b44 261 {
magidimisi 0:4965eb440b44 262 //read the 16-bit value from the analog pin, The STM32F4-Trainer only supports 12-bit A/D (0 - 4095),
magidimisi 0:4965eb440b44 263 battval = BatVolt.read_u16(); //but the read_u16 function converts it to a 16-bit value (0 - 65535)
magidimisi 0:4965eb440b44 264
magidimisi 0:4965eb440b44 265 //calculate the voltage from the 16-bit value
magidimisi 0:4965eb440b44 266 battvolt = ((double)battval * 5.9613) / 65535.0 * 3.3; //cast analogval to a double data type for formula to store result as double
magidimisi 0:4965eb440b44 267 // 5.9613 convert the voltage value to equeal the supply
magidimisi 0:4965eb440b44 268 bt.printf(" %2.3f Volts \n", battvolt);
magidimisi 0:4965eb440b44 269 wait (5);
magidimisi 0:4965eb440b44 270 Normal ();
magidimisi 0:4965eb440b44 271 }
magidimisi 0:4965eb440b44 272 }
magidimisi 0:4965eb440b44 273 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 274
magidimisi 0:4965eb440b44 275 ////////////////////////////DECLARATION OF INCOME MESSAGE AS A CHARACTORS THAT COMES FROM THE PHONE APP//////////////////////////////////////
magidimisi 0:4965eb440b44 276
magidimisi 0:4965eb440b44 277 char btmsg[50]; //incoming message string
magidimisi 0:4965eb440b44 278 int btmsg_counter = 0; //character position counter in the message string
magidimisi 0:4965eb440b44 279 int new_btmsg = 0; //flag to indicate if a new complete message was received
magidimisi 0:4965eb440b44 280 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 281
magidimisi 0:4965eb440b44 282
magidimisi 0:4965eb440b44 283
magidimisi 0:4965eb440b44 284 ////////////////////////////////IT'S A SUB PROGRAM THAT INTERRUPT THE ROUTINE WHEN A NEW CHARACTER ARRIVES/////////////////////////////////////////////
magidimisi 0:4965eb440b44 285 void btinterrupt()
magidimisi 0:4965eb440b44 286 {
magidimisi 0:4965eb440b44 287 char c; // declare the c as a charactor
magidimisi 0:4965eb440b44 288
magidimisi 0:4965eb440b44 289 c = bt.getc(); //read the incoming character
magidimisi 0:4965eb440b44 290 if(c == '\n') //if it is the terminating character
magidimisi 0:4965eb440b44 291 {
magidimisi 0:4965eb440b44 292 if(btmsg[btmsg_counter - 1] == '\r')
magidimisi 0:4965eb440b44 293 btmsg[btmsg_counter - 1] = '\0';
magidimisi 0:4965eb440b44 294 else
magidimisi 0:4965eb440b44 295 btmsg[btmsg_counter] = '\0';
magidimisi 0:4965eb440b44 296 new_btmsg = 1; //enable the new message flag to indicate a COMPLETE message was received
magidimisi 0:4965eb440b44 297 btmsg_counter = 0; //clear the message string
magidimisi 0:4965eb440b44 298 }
magidimisi 0:4965eb440b44 299 else
magidimisi 0:4965eb440b44 300 {
magidimisi 0:4965eb440b44 301 btmsg[btmsg_counter] = c; //add the character to the message string
magidimisi 0:4965eb440b44 302 btmsg_counter++; //move to the next character in the string
magidimisi 0:4965eb440b44 303 }
magidimisi 0:4965eb440b44 304 }
magidimisi 0:4965eb440b44 305 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
magidimisi 0:4965eb440b44 306
magidimisi 0:4965eb440b44 307 /////////////////////////////////////////THE MAIN PROGRAM WHERE IT WILL CALL ALL THE SUB PROGRAM//////////////////////////////////////////////
magidimisi 0:4965eb440b44 308 int main() {
magidimisi 0:4965eb440b44 309 bt.attach(&btinterrupt); //if a new character arrives, call the interrupt service routine
magidimisi 0:4965eb440b44 310
magidimisi 0:4965eb440b44 311 while(1) {
magidimisi 0:4965eb440b44 312 Normal ();
magidimisi 0:4965eb440b44 313 Water_Readings ();
magidimisi 0:4965eb440b44 314 Water_Valve ();
magidimisi 0:4965eb440b44 315 if(new_btmsg) { //check if there is a new message
magidimisi 0:4965eb440b44 316 if(strcmp(btmsg, "SolarON") == 0) //message for SolarOn is ON
magidimisi 0:4965eb440b44 317 Test_Solar();
magidimisi 0:4965eb440b44 318 else if(strcmp(btmsg, "HydrON") == 0) //message for HydroOn is ON
magidimisi 0:4965eb440b44 319 Test_Hydro() ;
magidimisi 0:4965eb440b44 320 else if(strcmp(btmsg, "BatteryON") == 0) //message for BatteryON is ON
magidimisi 0:4965eb440b44 321 Test_Battery();
magidimisi 0:4965eb440b44 322 else if(strcmp(btmsg, "WaterON") == 0) //message for WaterOn is ON
magidimisi 0:4965eb440b44 323 bt.printf("%2.3f Kl \n",METER);
magidimisi 0:4965eb440b44 324 else if(strcmp(btmsg, "ValveOPEN") == 0) //message for for ValveOpen is ON
magidimisi 0:4965eb440b44 325 OpenValve();
magidimisi 0:4965eb440b44 326 else if(strcmp(btmsg, "ValveClosed") == 0) //message for for ValveClosed is ON
magidimisi 0:4965eb440b44 327 ClosedValve();
magidimisi 0:4965eb440b44 328 else
magidimisi 0:4965eb440b44 329 bt.printf("Incorrect command\n"); //Reply incorrect command
magidimisi 0:4965eb440b44 330
magidimisi 0:4965eb440b44 331 new_btmsg=0; //clear message flag
magidimisi 0:4965eb440b44 332 }
magidimisi 0:4965eb440b44 333 }
magidimisi 0:4965eb440b44 334 }
magidimisi 0:4965eb440b44 335 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////