1

Dependencies:   mbed

Committer:
meric
Date:
Mon Jul 09 09:12:38 2018 +0000
Revision:
0:2a01c5a56ed1
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
meric 0:2a01c5a56ed1 1 #ifndef FUNCTION_H
meric 0:2a01c5a56ed1 2 #define FUNCTION_H
meric 0:2a01c5a56ed1 3
meric 0:2a01c5a56ed1 4 /*
meric 0:2a01c5a56ed1 5 ****************************************************************************
meric 0:2a01c5a56ed1 6 ****************************************************************************
meric 0:2a01c5a56ed1 7 ** DEVINT BİLİŞİM YAZILIM DONANIM TİC. LTD. ŞTİ. TARAFINDAN GELİŞTİRİLMİŞTİR
meric 0:2a01c5a56ed1 8 ** İzmir / TÜRKİYE
meric 0:2a01c5a56ed1 9 **
meric 0:2a01c5a56ed1 10 ** Copyright (C) 2015
meric 0:2a01c5a56ed1 11 ****************************************************************************
meric 0:2a01c5a56ed1 12 ****************************************************************************
meric 0:2a01c5a56ed1 13 *************************************************************** K A M B O **
meric 0:2a01c5a56ed1 14 */
meric 0:2a01c5a56ed1 15
meric 0:2a01c5a56ed1 16 // FONKSIYON PROTOTİPLERİ
meric 0:2a01c5a56ed1 17 void configure_eeprom_default_values(void);
meric 0:2a01c5a56ed1 18 //******************************************************************************
meric 0:2a01c5a56ed1 19
meric 0:2a01c5a56ed1 20 void init_node(void);
meric 0:2a01c5a56ed1 21 //******************************************************************************
meric 0:2a01c5a56ed1 22
meric 0:2a01c5a56ed1 23 float read_pressure_dp(void);
meric 0:2a01c5a56ed1 24 //******************************************************************************
meric 0:2a01c5a56ed1 25
meric 0:2a01c5a56ed1 26 float read_pressure(void);
meric 0:2a01c5a56ed1 27 //******************************************************************************
meric 0:2a01c5a56ed1 28
meric 0:2a01c5a56ed1 29 void prepare_data(void);
meric 0:2a01c5a56ed1 30 //******************************************************************************
meric 0:2a01c5a56ed1 31
meric 0:2a01c5a56ed1 32 void prepare_data_fread(void);
meric 0:2a01c5a56ed1 33 //******************************************************************************
meric 0:2a01c5a56ed1 34
meric 0:2a01c5a56ed1 35 void send_to_coordinator(char* char_array);
meric 0:2a01c5a56ed1 36 //******************************************************************************
meric 0:2a01c5a56ed1 37
meric 0:2a01c5a56ed1 38 void process_command(uint8_t cmmnd);
meric 0:2a01c5a56ed1 39 //******************************************************************************
meric 0:2a01c5a56ed1 40
meric 0:2a01c5a56ed1 41 void data_transmit_isr(void);
meric 0:2a01c5a56ed1 42 //******************************************************************************
meric 0:2a01c5a56ed1 43
meric 0:2a01c5a56ed1 44 void rf_rx_isr(void);
meric 0:2a01c5a56ed1 45 //******************************************************************************
meric 0:2a01c5a56ed1 46
meric 0:2a01c5a56ed1 47 void master_rx_isr(void);
meric 0:2a01c5a56ed1 48 //******************************************************************************
meric 0:2a01c5a56ed1 49
meric 0:2a01c5a56ed1 50 bool open_solenoid(uint8_t filter_no);
meric 0:2a01c5a56ed1 51 //******************************************************************************
meric 0:2a01c5a56ed1 52
meric 0:2a01c5a56ed1 53 bool close_solenoid(uint8_t filter_no);
meric 0:2a01c5a56ed1 54 //******************************************************************************
meric 0:2a01c5a56ed1 55
meric 0:2a01c5a56ed1 56 float map(float x, float in_min, float in_max, float out_min, float out_max);
meric 0:2a01c5a56ed1 57 //******************************************************************************
meric 0:2a01c5a56ed1 58
meric 0:2a01c5a56ed1 59 void watermeter_isr(void);
meric 0:2a01c5a56ed1 60 //******************************************************************************
meric 0:2a01c5a56ed1 61
meric 0:2a01c5a56ed1 62 void flowrate_isr(void);
meric 0:2a01c5a56ed1 63 //******************************************************************************
meric 0:2a01c5a56ed1 64
meric 0:2a01c5a56ed1 65 void flush_phase_isr(void);
meric 0:2a01c5a56ed1 66 //******************************************************************************
meric 0:2a01c5a56ed1 67
meric 0:2a01c5a56ed1 68 void pressure_check_isr(void);
meric 0:2a01c5a56ed1 69 //******************************************************************************
meric 0:2a01c5a56ed1 70
meric 0:2a01c5a56ed1 71 bool check_and_close_valves(void);
meric 0:2a01c5a56ed1 72 //******************************************************************************
meric 0:2a01c5a56ed1 73
meric 0:2a01c5a56ed1 74 void periodic_flush_isr(void);
meric 0:2a01c5a56ed1 75 //******************************************************************************
meric 0:2a01c5a56ed1 76
meric 0:2a01c5a56ed1 77 void min_flush_interval_isr(void);
meric 0:2a01c5a56ed1 78 //******************************************************************************
meric 0:2a01c5a56ed1 79
meric 0:2a01c5a56ed1 80 void rt_data_transmit_isr(void);
meric 0:2a01c5a56ed1 81 //******************************************************************************
meric 0:2a01c5a56ed1 82
meric 0:2a01c5a56ed1 83 void send_alarm(uint8_t _alarmID, uint16_t _filterID, uint8_t _slaveID);
meric 0:2a01c5a56ed1 84 //******************************************************************************
meric 0:2a01c5a56ed1 85
meric 0:2a01c5a56ed1 86 bool send_command(uint8_t _slaveid, uint8_t _command, uint8_t _filterid);
meric 0:2a01c5a56ed1 87 //******************************************************************************
meric 0:2a01c5a56ed1 88
meric 0:2a01c5a56ed1 89 // FONKSIYONLAR
meric 0:2a01c5a56ed1 90 float map(float x, float in_min, float in_max, float out_min, float out_max)
meric 0:2a01c5a56ed1 91 {
meric 0:2a01c5a56ed1 92 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
meric 0:2a01c5a56ed1 93 }
meric 0:2a01c5a56ed1 94
meric 0:2a01c5a56ed1 95 //
meric 0:2a01c5a56ed1 96 bool check_and_close_valves()
meric 0:2a01c5a56ed1 97 {
meric 0:2a01c5a56ed1 98 bool check = false;
meric 0:2a01c5a56ed1 99
meric 0:2a01c5a56ed1 100 for (uint8_t _slaveID = 0; _slaveID <= fnode.totalSlaveNumber - 1; _slaveID++) {
meric 0:2a01c5a56ed1 101
meric 0:2a01c5a56ed1 102 for (uint8_t _filterNo = 0; _filterNo < 5; _filterNo ++) {
meric 0:2a01c5a56ed1 103
meric 0:2a01c5a56ed1 104 if (send_command(_slaveID, CLOSE_SOLENOID, _filterNo)) {
meric 0:2a01c5a56ed1 105
meric 0:2a01c5a56ed1 106 check = true;
meric 0:2a01c5a56ed1 107 wait_ms(500);
meric 0:2a01c5a56ed1 108
meric 0:2a01c5a56ed1 109 } else {
meric 0:2a01c5a56ed1 110
meric 0:2a01c5a56ed1 111 check = false;
meric 0:2a01c5a56ed1 112
meric 0:2a01c5a56ed1 113 }
meric 0:2a01c5a56ed1 114
meric 0:2a01c5a56ed1 115 if (check == false) {
meric 0:2a01c5a56ed1 116 break;
meric 0:2a01c5a56ed1 117 }
meric 0:2a01c5a56ed1 118 }
meric 0:2a01c5a56ed1 119
meric 0:2a01c5a56ed1 120 if (check == false) {
meric 0:2a01c5a56ed1 121 break;
meric 0:2a01c5a56ed1 122 }
meric 0:2a01c5a56ed1 123 }
meric 0:2a01c5a56ed1 124
meric 0:2a01c5a56ed1 125 return check;
meric 0:2a01c5a56ed1 126 }
meric 0:2a01c5a56ed1 127
meric 0:2a01c5a56ed1 128 bool open_solenoid(uint8_t _filter_no)
meric 0:2a01c5a56ed1 129 {
meric 0:2a01c5a56ed1 130 bool _success = false;
meric 0:2a01c5a56ed1 131
meric 0:2a01c5a56ed1 132 switch (_filter_no) {
meric 0:2a01c5a56ed1 133
meric 0:2a01c5a56ed1 134 case FILTER_1_SOLENOID: { // OUT1
meric 0:2a01c5a56ed1 135
meric 0:2a01c5a56ed1 136 // İleri
meric 0:2a01c5a56ed1 137 fnode.filterByte_2 &= ~(1 << 6); // Bit 6 = 0
meric 0:2a01c5a56ed1 138 fnode.filterByte_1 = fnode.filterByte_1;
meric 0:2a01c5a56ed1 139
meric 0:2a01c5a56ed1 140 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 141
meric 0:2a01c5a56ed1 142 _success = true;
meric 0:2a01c5a56ed1 143
meric 0:2a01c5a56ed1 144 // H-köprüsünü aç ve uyandır
meric 0:2a01c5a56ed1 145 fnode.filterByte_2 &= ~(1 << 5); // Bit 5 = 0
meric 0:2a01c5a56ed1 146 fnode.filterByte_2 &= ~(1 << 4); // Bit 4 = 0
meric 0:2a01c5a56ed1 147 fnode.filterByte_1 = fnode.filterByte_1;
meric 0:2a01c5a56ed1 148
meric 0:2a01c5a56ed1 149 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 150
meric 0:2a01c5a56ed1 151 wait_ms(250);
meric 0:2a01c5a56ed1 152
meric 0:2a01c5a56ed1 153 _success = true;
meric 0:2a01c5a56ed1 154
meric 0:2a01c5a56ed1 155 // Uyut ve H-köprüsünü kapat
meric 0:2a01c5a56ed1 156 fnode.filterByte_2 |= 1 << 4; // Bit 4 = 1
meric 0:2a01c5a56ed1 157 fnode.filterByte_2 |= 1 << 5; // Bit 5 = 1
meric 0:2a01c5a56ed1 158 fnode.filterByte_1 = fnode.filterByte_1;
meric 0:2a01c5a56ed1 159
meric 0:2a01c5a56ed1 160 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 161
meric 0:2a01c5a56ed1 162 _success = true;
meric 0:2a01c5a56ed1 163
meric 0:2a01c5a56ed1 164 } else {
meric 0:2a01c5a56ed1 165
meric 0:2a01c5a56ed1 166 _success = false;
meric 0:2a01c5a56ed1 167
meric 0:2a01c5a56ed1 168 }
meric 0:2a01c5a56ed1 169
meric 0:2a01c5a56ed1 170 } else {
meric 0:2a01c5a56ed1 171
meric 0:2a01c5a56ed1 172 _success = false;
meric 0:2a01c5a56ed1 173
meric 0:2a01c5a56ed1 174 }
meric 0:2a01c5a56ed1 175
meric 0:2a01c5a56ed1 176 } else {
meric 0:2a01c5a56ed1 177
meric 0:2a01c5a56ed1 178 _success = false;
meric 0:2a01c5a56ed1 179
meric 0:2a01c5a56ed1 180 }
meric 0:2a01c5a56ed1 181 }
meric 0:2a01c5a56ed1 182 break;
meric 0:2a01c5a56ed1 183
meric 0:2a01c5a56ed1 184 case FILTER_2_SOLENOID: { // OUT2
meric 0:2a01c5a56ed1 185
meric 0:2a01c5a56ed1 186 // İleri
meric 0:2a01c5a56ed1 187 fnode.filterByte_2 &= ~(1 << 3); // Bit 3 = 0
meric 0:2a01c5a56ed1 188 fnode.filterByte_1 = fnode.filterByte_1;
meric 0:2a01c5a56ed1 189
meric 0:2a01c5a56ed1 190 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 191
meric 0:2a01c5a56ed1 192 _success = true;
meric 0:2a01c5a56ed1 193
meric 0:2a01c5a56ed1 194 // H-köprüsünü aç ve uyandır
meric 0:2a01c5a56ed1 195 fnode.filterByte_2 &= ~(1 << 2); // Bit 2 = 0
meric 0:2a01c5a56ed1 196 fnode.filterByte_2 &= ~(1 << 1); // Bit 1 = 0
meric 0:2a01c5a56ed1 197 fnode.filterByte_1 = fnode.filterByte_1;
meric 0:2a01c5a56ed1 198
meric 0:2a01c5a56ed1 199 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 200
meric 0:2a01c5a56ed1 201 wait_ms(250);
meric 0:2a01c5a56ed1 202
meric 0:2a01c5a56ed1 203 _success = true;
meric 0:2a01c5a56ed1 204
meric 0:2a01c5a56ed1 205 // Uyut ve H-köprüsünü kapat
meric 0:2a01c5a56ed1 206 fnode.filterByte_2 |= 1 << 1; // Bit 1 is 1
meric 0:2a01c5a56ed1 207 fnode.filterByte_2 |= 1 << 2; // Bit 2 is 1
meric 0:2a01c5a56ed1 208 fnode.filterByte_1 = fnode.filterByte_1;
meric 0:2a01c5a56ed1 209
meric 0:2a01c5a56ed1 210 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 211
meric 0:2a01c5a56ed1 212 _success = true;
meric 0:2a01c5a56ed1 213
meric 0:2a01c5a56ed1 214 } else {
meric 0:2a01c5a56ed1 215
meric 0:2a01c5a56ed1 216 _success = false;
meric 0:2a01c5a56ed1 217
meric 0:2a01c5a56ed1 218 }
meric 0:2a01c5a56ed1 219
meric 0:2a01c5a56ed1 220
meric 0:2a01c5a56ed1 221 } else {
meric 0:2a01c5a56ed1 222
meric 0:2a01c5a56ed1 223 _success = false;
meric 0:2a01c5a56ed1 224
meric 0:2a01c5a56ed1 225 }
meric 0:2a01c5a56ed1 226
meric 0:2a01c5a56ed1 227 } else {
meric 0:2a01c5a56ed1 228
meric 0:2a01c5a56ed1 229 _success = false;
meric 0:2a01c5a56ed1 230
meric 0:2a01c5a56ed1 231 }
meric 0:2a01c5a56ed1 232 }
meric 0:2a01c5a56ed1 233 break;
meric 0:2a01c5a56ed1 234
meric 0:2a01c5a56ed1 235 case FILTER_3_SOLENOID: { // OUT3
meric 0:2a01c5a56ed1 236
meric 0:2a01c5a56ed1 237 // İleri
meric 0:2a01c5a56ed1 238 fnode.filterByte_2 &= ~(1 << 0); // Bit 0 = 0
meric 0:2a01c5a56ed1 239 fnode.filterByte_1 = fnode.filterByte_1;
meric 0:2a01c5a56ed1 240
meric 0:2a01c5a56ed1 241 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 242
meric 0:2a01c5a56ed1 243 _success = true;
meric 0:2a01c5a56ed1 244
meric 0:2a01c5a56ed1 245 // H-köprüsünü aç ve uyandır
meric 0:2a01c5a56ed1 246 fnode.filterByte_1 &= ~(1 << 7); // Bit 7 = 0
meric 0:2a01c5a56ed1 247 fnode.filterByte_1 &= ~(1 << 6); // Bit 6 = 0
meric 0:2a01c5a56ed1 248 fnode.filterByte_2 = fnode.filterByte_2;
meric 0:2a01c5a56ed1 249
meric 0:2a01c5a56ed1 250 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 251
meric 0:2a01c5a56ed1 252 wait_ms(250);
meric 0:2a01c5a56ed1 253
meric 0:2a01c5a56ed1 254 _success = true;
meric 0:2a01c5a56ed1 255
meric 0:2a01c5a56ed1 256 // Uyut ve H-köprüsünü kapat
meric 0:2a01c5a56ed1 257 fnode.filterByte_1 |= 1 << 6; // Bit 6 = 1
meric 0:2a01c5a56ed1 258 fnode.filterByte_1 |= 1 << 7; // Bit 7 = 1
meric 0:2a01c5a56ed1 259 fnode.filterByte_2 = fnode.filterByte_2;
meric 0:2a01c5a56ed1 260
meric 0:2a01c5a56ed1 261 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 262
meric 0:2a01c5a56ed1 263 _success = true;
meric 0:2a01c5a56ed1 264
meric 0:2a01c5a56ed1 265 } else {
meric 0:2a01c5a56ed1 266
meric 0:2a01c5a56ed1 267 _success = false;
meric 0:2a01c5a56ed1 268
meric 0:2a01c5a56ed1 269 }
meric 0:2a01c5a56ed1 270
meric 0:2a01c5a56ed1 271 } else {
meric 0:2a01c5a56ed1 272
meric 0:2a01c5a56ed1 273 _success = false;
meric 0:2a01c5a56ed1 274
meric 0:2a01c5a56ed1 275 }
meric 0:2a01c5a56ed1 276
meric 0:2a01c5a56ed1 277 } else {
meric 0:2a01c5a56ed1 278
meric 0:2a01c5a56ed1 279 _success = false;
meric 0:2a01c5a56ed1 280
meric 0:2a01c5a56ed1 281 }
meric 0:2a01c5a56ed1 282 }
meric 0:2a01c5a56ed1 283 break;
meric 0:2a01c5a56ed1 284
meric 0:2a01c5a56ed1 285 case FILTER_4_SOLENOID: { // OUT4
meric 0:2a01c5a56ed1 286
meric 0:2a01c5a56ed1 287 // İleri
meric 0:2a01c5a56ed1 288 fnode.filterByte_1 &= ~(1 << 5); // Bit 5 = 0
meric 0:2a01c5a56ed1 289 fnode.filterByte_2 = fnode.filterByte_2;
meric 0:2a01c5a56ed1 290
meric 0:2a01c5a56ed1 291 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 292
meric 0:2a01c5a56ed1 293 _success = true;
meric 0:2a01c5a56ed1 294
meric 0:2a01c5a56ed1 295 // H-köprüsünü aç ve uyandır
meric 0:2a01c5a56ed1 296 fnode.filterByte_1 &= ~(1 << 4); // Bit 4 = 0
meric 0:2a01c5a56ed1 297 fnode.filterByte_1 &= ~(1 << 3); // Bit 3 = 0
meric 0:2a01c5a56ed1 298 fnode.filterByte_2 = fnode.filterByte_2;
meric 0:2a01c5a56ed1 299
meric 0:2a01c5a56ed1 300 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 301
meric 0:2a01c5a56ed1 302 wait_ms(250);
meric 0:2a01c5a56ed1 303
meric 0:2a01c5a56ed1 304 _success = true;
meric 0:2a01c5a56ed1 305
meric 0:2a01c5a56ed1 306 // Uyut ve H-köprüsünü kapat
meric 0:2a01c5a56ed1 307 fnode.filterByte_1 |= 1 << 3; // Bit 3 = 1
meric 0:2a01c5a56ed1 308 fnode.filterByte_1 |= 1 << 4; // Bit 4 = 0
meric 0:2a01c5a56ed1 309 fnode.filterByte_2 = fnode.filterByte_2;
meric 0:2a01c5a56ed1 310
meric 0:2a01c5a56ed1 311 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 312
meric 0:2a01c5a56ed1 313 _success = true;
meric 0:2a01c5a56ed1 314
meric 0:2a01c5a56ed1 315 } else {
meric 0:2a01c5a56ed1 316
meric 0:2a01c5a56ed1 317 _success = false;
meric 0:2a01c5a56ed1 318
meric 0:2a01c5a56ed1 319 }
meric 0:2a01c5a56ed1 320
meric 0:2a01c5a56ed1 321 } else {
meric 0:2a01c5a56ed1 322
meric 0:2a01c5a56ed1 323 _success = false;
meric 0:2a01c5a56ed1 324
meric 0:2a01c5a56ed1 325 }
meric 0:2a01c5a56ed1 326
meric 0:2a01c5a56ed1 327 } else {
meric 0:2a01c5a56ed1 328
meric 0:2a01c5a56ed1 329 _success = false;
meric 0:2a01c5a56ed1 330
meric 0:2a01c5a56ed1 331 }
meric 0:2a01c5a56ed1 332 }
meric 0:2a01c5a56ed1 333 break;
meric 0:2a01c5a56ed1 334
meric 0:2a01c5a56ed1 335 case FILTER_MAIN_SOLENOID: { // OUT5
meric 0:2a01c5a56ed1 336
meric 0:2a01c5a56ed1 337 // İleri
meric 0:2a01c5a56ed1 338 fnode.filterByte_1 &= ~(1 << 2); // Bit 2 = 0
meric 0:2a01c5a56ed1 339 fnode.filterByte_2 = fnode.filterByte_2;
meric 0:2a01c5a56ed1 340
meric 0:2a01c5a56ed1 341 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 342
meric 0:2a01c5a56ed1 343 _success = true;
meric 0:2a01c5a56ed1 344
meric 0:2a01c5a56ed1 345 // H-köprüsünü aç ve uyandır
meric 0:2a01c5a56ed1 346 fnode.filterByte_1 &= ~(1 << 1); // Bit 1 = 0
meric 0:2a01c5a56ed1 347 fnode.filterByte_1 &= ~(1 << 0); // Bit 0 = 0
meric 0:2a01c5a56ed1 348 fnode.filterByte_2 = fnode.filterByte_2;
meric 0:2a01c5a56ed1 349
meric 0:2a01c5a56ed1 350 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 351
meric 0:2a01c5a56ed1 352 wait_ms(250);
meric 0:2a01c5a56ed1 353
meric 0:2a01c5a56ed1 354 _success = true;
meric 0:2a01c5a56ed1 355
meric 0:2a01c5a56ed1 356 // Uyut ve H-köprüsünü kapat
meric 0:2a01c5a56ed1 357 fnode.filterByte_1 |= 1 << 0; // Bit 0 = 1
meric 0:2a01c5a56ed1 358 fnode.filterByte_1 |= 1 << 1; // Bit 1 = 0
meric 0:2a01c5a56ed1 359 fnode.filterByte_2 = fnode.filterByte_2;
meric 0:2a01c5a56ed1 360
meric 0:2a01c5a56ed1 361 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 362
meric 0:2a01c5a56ed1 363 _success = true;
meric 0:2a01c5a56ed1 364
meric 0:2a01c5a56ed1 365 } else {
meric 0:2a01c5a56ed1 366
meric 0:2a01c5a56ed1 367 _success = false;
meric 0:2a01c5a56ed1 368
meric 0:2a01c5a56ed1 369 }
meric 0:2a01c5a56ed1 370
meric 0:2a01c5a56ed1 371 } else {
meric 0:2a01c5a56ed1 372
meric 0:2a01c5a56ed1 373 _success = false;
meric 0:2a01c5a56ed1 374
meric 0:2a01c5a56ed1 375 }
meric 0:2a01c5a56ed1 376
meric 0:2a01c5a56ed1 377 } else {
meric 0:2a01c5a56ed1 378
meric 0:2a01c5a56ed1 379 _success = false;
meric 0:2a01c5a56ed1 380
meric 0:2a01c5a56ed1 381 }
meric 0:2a01c5a56ed1 382 }
meric 0:2a01c5a56ed1 383 break;
meric 0:2a01c5a56ed1 384 }
meric 0:2a01c5a56ed1 385
meric 0:2a01c5a56ed1 386 return _success;
meric 0:2a01c5a56ed1 387 }
meric 0:2a01c5a56ed1 388
meric 0:2a01c5a56ed1 389 //
meric 0:2a01c5a56ed1 390 bool close_solenoid(uint8_t _filter_no)
meric 0:2a01c5a56ed1 391 {
meric 0:2a01c5a56ed1 392 bool _success = false;
meric 0:2a01c5a56ed1 393
meric 0:2a01c5a56ed1 394 switch (_filter_no) {
meric 0:2a01c5a56ed1 395
meric 0:2a01c5a56ed1 396 case FILTER_1_SOLENOID: { // OUT1
meric 0:2a01c5a56ed1 397
meric 0:2a01c5a56ed1 398 // Geri
meric 0:2a01c5a56ed1 399 fnode.filterByte_2 |= 1 << 6; // Bit 6 = 1
meric 0:2a01c5a56ed1 400 fnode.filterByte_1 = fnode.filterByte_1;
meric 0:2a01c5a56ed1 401
meric 0:2a01c5a56ed1 402 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 403
meric 0:2a01c5a56ed1 404 _success = true;
meric 0:2a01c5a56ed1 405
meric 0:2a01c5a56ed1 406 // H-köprüsünü aç ve uyandır
meric 0:2a01c5a56ed1 407 fnode.filterByte_2 &= ~(1 << 5); // Bit 5 = 0
meric 0:2a01c5a56ed1 408 fnode.filterByte_2 &= ~(1 << 4); // Bit 4 = 0
meric 0:2a01c5a56ed1 409 fnode.filterByte_1 = fnode.filterByte_1;
meric 0:2a01c5a56ed1 410
meric 0:2a01c5a56ed1 411 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 412
meric 0:2a01c5a56ed1 413 wait_ms(250);
meric 0:2a01c5a56ed1 414
meric 0:2a01c5a56ed1 415 _success = true;
meric 0:2a01c5a56ed1 416
meric 0:2a01c5a56ed1 417 // Uyut ve H-köprüsünü kapat
meric 0:2a01c5a56ed1 418 fnode.filterByte_2 |= 1 << 4; // Bit 4 = 1
meric 0:2a01c5a56ed1 419 fnode.filterByte_2 |= 1 << 5; // Bit 5 = 1
meric 0:2a01c5a56ed1 420 fnode.filterByte_1 = fnode.filterByte_1;
meric 0:2a01c5a56ed1 421
meric 0:2a01c5a56ed1 422 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 423
meric 0:2a01c5a56ed1 424 _success = true;
meric 0:2a01c5a56ed1 425
meric 0:2a01c5a56ed1 426 } else {
meric 0:2a01c5a56ed1 427
meric 0:2a01c5a56ed1 428 _success = false;
meric 0:2a01c5a56ed1 429
meric 0:2a01c5a56ed1 430 }
meric 0:2a01c5a56ed1 431
meric 0:2a01c5a56ed1 432 } else {
meric 0:2a01c5a56ed1 433
meric 0:2a01c5a56ed1 434 _success = false;
meric 0:2a01c5a56ed1 435
meric 0:2a01c5a56ed1 436 }
meric 0:2a01c5a56ed1 437
meric 0:2a01c5a56ed1 438
meric 0:2a01c5a56ed1 439 } else {
meric 0:2a01c5a56ed1 440
meric 0:2a01c5a56ed1 441 _success = false;
meric 0:2a01c5a56ed1 442
meric 0:2a01c5a56ed1 443 }
meric 0:2a01c5a56ed1 444 }
meric 0:2a01c5a56ed1 445 break;
meric 0:2a01c5a56ed1 446
meric 0:2a01c5a56ed1 447 case FILTER_2_SOLENOID: { // OUT2
meric 0:2a01c5a56ed1 448
meric 0:2a01c5a56ed1 449 // Geri
meric 0:2a01c5a56ed1 450 fnode.filterByte_2 |= 1 << 3; // Bit 3 = 1
meric 0:2a01c5a56ed1 451 fnode.filterByte_1 = fnode.filterByte_1;
meric 0:2a01c5a56ed1 452
meric 0:2a01c5a56ed1 453 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 454
meric 0:2a01c5a56ed1 455 _success = true;
meric 0:2a01c5a56ed1 456
meric 0:2a01c5a56ed1 457 // H-köprüsünü aç ve uyandır
meric 0:2a01c5a56ed1 458 fnode.filterByte_2 &= ~(1 << 2); // Bit 2 = 0
meric 0:2a01c5a56ed1 459 fnode.filterByte_2 &= ~(1 << 1); // Bit 1 = 0
meric 0:2a01c5a56ed1 460 fnode.filterByte_1 = fnode.filterByte_1;
meric 0:2a01c5a56ed1 461
meric 0:2a01c5a56ed1 462 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 463
meric 0:2a01c5a56ed1 464 wait_ms(250);
meric 0:2a01c5a56ed1 465
meric 0:2a01c5a56ed1 466 _success = true;
meric 0:2a01c5a56ed1 467
meric 0:2a01c5a56ed1 468 // Uyut ve H-köprüsünü kapat
meric 0:2a01c5a56ed1 469 fnode.filterByte_2 |= 1 << 1; // Bit 1 = 1
meric 0:2a01c5a56ed1 470 fnode.filterByte_2 |= 1 << 2; // Bit 2 = 1
meric 0:2a01c5a56ed1 471 fnode.filterByte_1 = fnode.filterByte_1;
meric 0:2a01c5a56ed1 472
meric 0:2a01c5a56ed1 473 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 474
meric 0:2a01c5a56ed1 475 _success = true;
meric 0:2a01c5a56ed1 476
meric 0:2a01c5a56ed1 477 } else {
meric 0:2a01c5a56ed1 478
meric 0:2a01c5a56ed1 479 _success = false;
meric 0:2a01c5a56ed1 480
meric 0:2a01c5a56ed1 481 }
meric 0:2a01c5a56ed1 482
meric 0:2a01c5a56ed1 483 } else {
meric 0:2a01c5a56ed1 484
meric 0:2a01c5a56ed1 485 _success = false;
meric 0:2a01c5a56ed1 486
meric 0:2a01c5a56ed1 487 }
meric 0:2a01c5a56ed1 488
meric 0:2a01c5a56ed1 489 } else {
meric 0:2a01c5a56ed1 490
meric 0:2a01c5a56ed1 491 _success = false;
meric 0:2a01c5a56ed1 492
meric 0:2a01c5a56ed1 493 }
meric 0:2a01c5a56ed1 494 }
meric 0:2a01c5a56ed1 495 break;
meric 0:2a01c5a56ed1 496
meric 0:2a01c5a56ed1 497 case FILTER_3_SOLENOID: { // OUT3
meric 0:2a01c5a56ed1 498
meric 0:2a01c5a56ed1 499 // Geri
meric 0:2a01c5a56ed1 500 fnode.filterByte_2 |= 1 << 0; // Bit 0 = 1
meric 0:2a01c5a56ed1 501 fnode.filterByte_1 = fnode.filterByte_1;
meric 0:2a01c5a56ed1 502
meric 0:2a01c5a56ed1 503 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 504
meric 0:2a01c5a56ed1 505 _success = true;
meric 0:2a01c5a56ed1 506
meric 0:2a01c5a56ed1 507 // H-köprüsünü aç ve uyandır
meric 0:2a01c5a56ed1 508 fnode.filterByte_1 &= ~(1 << 7); // Bit 7 = 0
meric 0:2a01c5a56ed1 509 fnode.filterByte_1 &= ~(1 << 6); // Bit 6 = 0
meric 0:2a01c5a56ed1 510 fnode.filterByte_2 = fnode.filterByte_2;
meric 0:2a01c5a56ed1 511
meric 0:2a01c5a56ed1 512 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 513
meric 0:2a01c5a56ed1 514 wait_ms(250);
meric 0:2a01c5a56ed1 515
meric 0:2a01c5a56ed1 516 _success = true;
meric 0:2a01c5a56ed1 517
meric 0:2a01c5a56ed1 518 // Uyut ve H-köprüsünü kapat
meric 0:2a01c5a56ed1 519 fnode.filterByte_1 |= 1 << 6; // Bit 6 = 1
meric 0:2a01c5a56ed1 520 fnode.filterByte_1 |= 1 << 7; // Bit 7 = 1
meric 0:2a01c5a56ed1 521 fnode.filterByte_2 = fnode.filterByte_2;
meric 0:2a01c5a56ed1 522
meric 0:2a01c5a56ed1 523 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 524
meric 0:2a01c5a56ed1 525 _success = true;
meric 0:2a01c5a56ed1 526
meric 0:2a01c5a56ed1 527 } else {
meric 0:2a01c5a56ed1 528
meric 0:2a01c5a56ed1 529 _success = false;
meric 0:2a01c5a56ed1 530
meric 0:2a01c5a56ed1 531 }
meric 0:2a01c5a56ed1 532
meric 0:2a01c5a56ed1 533 } else {
meric 0:2a01c5a56ed1 534
meric 0:2a01c5a56ed1 535 _success = false;
meric 0:2a01c5a56ed1 536
meric 0:2a01c5a56ed1 537 }
meric 0:2a01c5a56ed1 538
meric 0:2a01c5a56ed1 539 } else {
meric 0:2a01c5a56ed1 540
meric 0:2a01c5a56ed1 541 _success = false;
meric 0:2a01c5a56ed1 542
meric 0:2a01c5a56ed1 543 }
meric 0:2a01c5a56ed1 544 }
meric 0:2a01c5a56ed1 545 break;
meric 0:2a01c5a56ed1 546
meric 0:2a01c5a56ed1 547 case FILTER_4_SOLENOID: { // OUT4
meric 0:2a01c5a56ed1 548
meric 0:2a01c5a56ed1 549 // Geri
meric 0:2a01c5a56ed1 550 fnode.filterByte_1 |= 1 << 5; // Bit 5 = 1
meric 0:2a01c5a56ed1 551 fnode.filterByte_2 = fnode.filterByte_2;
meric 0:2a01c5a56ed1 552
meric 0:2a01c5a56ed1 553 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 554
meric 0:2a01c5a56ed1 555 _success = true;
meric 0:2a01c5a56ed1 556
meric 0:2a01c5a56ed1 557 // H-köprüsünü aç ve uyandır
meric 0:2a01c5a56ed1 558 fnode.filterByte_1 &= ~(1 << 4); // Bit 4 = 0
meric 0:2a01c5a56ed1 559 fnode.filterByte_1 &= ~(1 << 3); // Bit 3 = 0
meric 0:2a01c5a56ed1 560 fnode.filterByte_2 = fnode.filterByte_2;
meric 0:2a01c5a56ed1 561
meric 0:2a01c5a56ed1 562 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 563
meric 0:2a01c5a56ed1 564 wait_ms(250);
meric 0:2a01c5a56ed1 565
meric 0:2a01c5a56ed1 566 _success = true;
meric 0:2a01c5a56ed1 567
meric 0:2a01c5a56ed1 568 // Uyut ve H-köprüsünü kapat
meric 0:2a01c5a56ed1 569 fnode.filterByte_1 |= 1 << 3; // Bit 3 = 1
meric 0:2a01c5a56ed1 570 fnode.filterByte_1 |= 1 << 4; // Bit 4 = 0
meric 0:2a01c5a56ed1 571 fnode.filterByte_2 = fnode.filterByte_2;
meric 0:2a01c5a56ed1 572
meric 0:2a01c5a56ed1 573 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 574
meric 0:2a01c5a56ed1 575 _success = true;
meric 0:2a01c5a56ed1 576
meric 0:2a01c5a56ed1 577 } else {
meric 0:2a01c5a56ed1 578
meric 0:2a01c5a56ed1 579 _success = false;
meric 0:2a01c5a56ed1 580
meric 0:2a01c5a56ed1 581 }
meric 0:2a01c5a56ed1 582
meric 0:2a01c5a56ed1 583 } else {
meric 0:2a01c5a56ed1 584
meric 0:2a01c5a56ed1 585 _success = false;
meric 0:2a01c5a56ed1 586
meric 0:2a01c5a56ed1 587 }
meric 0:2a01c5a56ed1 588
meric 0:2a01c5a56ed1 589 } else {
meric 0:2a01c5a56ed1 590
meric 0:2a01c5a56ed1 591 _success = false;
meric 0:2a01c5a56ed1 592
meric 0:2a01c5a56ed1 593 }
meric 0:2a01c5a56ed1 594 }
meric 0:2a01c5a56ed1 595 break;
meric 0:2a01c5a56ed1 596
meric 0:2a01c5a56ed1 597 case FILTER_MAIN_SOLENOID: { // OUT5
meric 0:2a01c5a56ed1 598
meric 0:2a01c5a56ed1 599 // Geri
meric 0:2a01c5a56ed1 600 fnode.filterByte_1 |= 1 << 2; // Bit 2 = 1
meric 0:2a01c5a56ed1 601 fnode.filterByte_2 = fnode.filterByte_2;
meric 0:2a01c5a56ed1 602
meric 0:2a01c5a56ed1 603 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 604
meric 0:2a01c5a56ed1 605 _success = true;
meric 0:2a01c5a56ed1 606
meric 0:2a01c5a56ed1 607 // H-köprüsünü aç ve uyandır
meric 0:2a01c5a56ed1 608 fnode.filterByte_1 &= ~(1 << 1); // Bit 1 = 0
meric 0:2a01c5a56ed1 609 fnode.filterByte_1 &= ~(1 << 0); // Bit 0 = 0
meric 0:2a01c5a56ed1 610 fnode.filterByte_2 = fnode.filterByte_2;
meric 0:2a01c5a56ed1 611
meric 0:2a01c5a56ed1 612 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 613
meric 0:2a01c5a56ed1 614 wait_ms(250);
meric 0:2a01c5a56ed1 615
meric 0:2a01c5a56ed1 616 _success = true;
meric 0:2a01c5a56ed1 617
meric 0:2a01c5a56ed1 618 // Uyut ve H-köprüsünü kapat
meric 0:2a01c5a56ed1 619 fnode.filterByte_1 |= 1 << 0; // Bit 0 = 1
meric 0:2a01c5a56ed1 620 fnode.filterByte_1 |= 1 << 1; // Bit 1 = 0
meric 0:2a01c5a56ed1 621 fnode.filterByte_2 = fnode.filterByte_2;
meric 0:2a01c5a56ed1 622
meric 0:2a01c5a56ed1 623 if (io_send(fnode.filterByte_1, fnode.filterByte_2) == true) {
meric 0:2a01c5a56ed1 624
meric 0:2a01c5a56ed1 625 _success = true;
meric 0:2a01c5a56ed1 626
meric 0:2a01c5a56ed1 627 } else {
meric 0:2a01c5a56ed1 628
meric 0:2a01c5a56ed1 629 _success = false;
meric 0:2a01c5a56ed1 630
meric 0:2a01c5a56ed1 631 }
meric 0:2a01c5a56ed1 632
meric 0:2a01c5a56ed1 633 } else {
meric 0:2a01c5a56ed1 634
meric 0:2a01c5a56ed1 635 _success = false;
meric 0:2a01c5a56ed1 636
meric 0:2a01c5a56ed1 637 }
meric 0:2a01c5a56ed1 638
meric 0:2a01c5a56ed1 639 } else {
meric 0:2a01c5a56ed1 640
meric 0:2a01c5a56ed1 641 _success = false;
meric 0:2a01c5a56ed1 642
meric 0:2a01c5a56ed1 643 }
meric 0:2a01c5a56ed1 644 }
meric 0:2a01c5a56ed1 645 break;
meric 0:2a01c5a56ed1 646 }
meric 0:2a01c5a56ed1 647
meric 0:2a01c5a56ed1 648 return _success;
meric 0:2a01c5a56ed1 649 }
meric 0:2a01c5a56ed1 650
meric 0:2a01c5a56ed1 651 //
meric 0:2a01c5a56ed1 652 void configure_eeprom_default_values()
meric 0:2a01c5a56ed1 653 {
meric 0:2a01c5a56ed1 654 if (eeprom_read(EEPROM_TYPE, DEFAULT_CONFIG_ADDR) != 35) {
meric 0:2a01c5a56ed1 655
meric 0:2a01c5a56ed1 656 for (uint8_t i = 0; i < 99; i++) {
meric 0:2a01c5a56ed1 657
meric 0:2a01c5a56ed1 658 eeprom_write(EEPROM_TYPE, i, 0xFF);
meric 0:2a01c5a56ed1 659
meric 0:2a01c5a56ed1 660 }
meric 0:2a01c5a56ed1 661
meric 0:2a01c5a56ed1 662 eeprom_write(EEPROM_TYPE, DEFAULT_CONFIG_ADDR, 35);
meric 0:2a01c5a56ed1 663
meric 0:2a01c5a56ed1 664 eeprom_write(EEPROM_TYPE, SYSTEM_SETUP_ADDR, SYSTEM_SETUP_DEFAULT);
meric 0:2a01c5a56ed1 665 eeprom_write(EEPROM_TYPE, AUTOSEND_STATUS_ADDR, AUTOSEND_STATUS_DEFAULT);
meric 0:2a01c5a56ed1 666 eeprom_write(EEPROM_TYPE, IRRI_TRANSMIT_INTERVAL_ADDR, IRRI_TRANSMIT_INTERVAL_DEFAULT);
meric 0:2a01c5a56ed1 667 eeprom_write(EEPROM_TYPE, DRY_TRANSMIT_INTERVAL_ADDR, DRY_TRANSMIT_INTERVAL_DEFAULT);
meric 0:2a01c5a56ed1 668 eeprom_write(EEPROM_TYPE, WATERMETER_COEFF_ADDR_1, WATERMETER_COEFF_DEFAULT >> 8);
meric 0:2a01c5a56ed1 669 eeprom_write(EEPROM_TYPE, WATERMETER_COEFF_ADDR_2, WATERMETER_COEFF_DEFAULT & 0xFF);
meric 0:2a01c5a56ed1 670 eeprom_write(EEPROM_TYPE, PMAX_ADDR, PMAX_DEFAULT);
meric 0:2a01c5a56ed1 671 eeprom_write(EEPROM_TYPE, PRESSURE_SENSOR_ADDR, PRESSURE_SENSOR_DEFAULT);
meric 0:2a01c5a56ed1 672 eeprom_write(EEPROM_TYPE, DP_ADDR, DP_DEFAULT);
meric 0:2a01c5a56ed1 673 eeprom_write(EEPROM_TYPE, PRESSURE_CONTROL_FREQUENCY_ADDR, PRESSURE_CONTROL_FREQUENCY_DEFAULT);
meric 0:2a01c5a56ed1 674 eeprom_write(EEPROM_TYPE, FLUSH_DURATION_ADDR, FLUSH_DURATION_DEFAULT);
meric 0:2a01c5a56ed1 675 eeprom_write(EEPROM_TYPE, FLUSH_INTERVAL_ADDR, FLUSH_INTERVAL_DEFAULT);
meric 0:2a01c5a56ed1 676 eeprom_write(EEPROM_TYPE, FLOW_CONTROL_LATENCY_ADDR, FLOW_CONTROL_LATENCY_DEFAULT);
meric 0:2a01c5a56ed1 677 eeprom_write(EEPROM_TYPE, FLUSH_ENABLE_ADDR, FLUSH_ENABLE_DEFAULT);
meric 0:2a01c5a56ed1 678 eeprom_write(EEPROM_TYPE, PR_SENSOR_POSITION_ADDR, PR_SENSOR_POSITION_DEFAULT);
meric 0:2a01c5a56ed1 679 eeprom_write(EEPROM_TYPE, BACKFLUSH_STOP_ADDR, BACKFLUSH_STOP_DEFAULT);
meric 0:2a01c5a56ed1 680 eeprom_write(EEPROM_TYPE, INLET_PRS_LOW_TRS_ADDR, INLET_PRS_LOW_TRS_DEFAULT);
meric 0:2a01c5a56ed1 681 eeprom_write(EEPROM_TYPE, INLET_PRS_HIGH_TRS_ADDR, INLET_PRS_HIGH_TRS_DEFAULT);
meric 0:2a01c5a56ed1 682 eeprom_write(EEPROM_TYPE, ALARMS_ENABLE_ADDR, ALARMS_ENABLE_DEFAULT);
meric 0:2a01c5a56ed1 683 eeprom_write(EEPROM_TYPE, DP_HIGH_TRS_ADDR, DP_HIGH_TRS_DEFAULT);
meric 0:2a01c5a56ed1 684 eeprom_write(EEPROM_TYPE, INLET_PRS_SET_ADDR, INLET_PRS_SET_DEFAULT);
meric 0:2a01c5a56ed1 685 eeprom_write(EEPROM_TYPE, OUTLET_PRS_SET_FOR_DP_ADDR, OUTLET_PRS_SET_FOR_DP_DEFAULT);
meric 0:2a01c5a56ed1 686 eeprom_write(EEPROM_TYPE, PERIODIC_FLUSH_ADDR, PERIODIC_FLUSH_DEFAULT);
meric 0:2a01c5a56ed1 687 eeprom_write(EEPROM_TYPE, MIN_FLUSH_INTERVAL_ADDR_1, MIN_FLUSH_INTERVAL_DEFAULT >> 8);
meric 0:2a01c5a56ed1 688 eeprom_write(EEPROM_TYPE, MIN_FLUSH_INTERVAL_ADDR_2, MIN_FLUSH_INTERVAL_DEFAULT & 0xFF);
meric 0:2a01c5a56ed1 689 eeprom_write(EEPROM_TYPE, FILTER_NUMBER_ADDR, FILTER_NUMBER_DEFAULT);
meric 0:2a01c5a56ed1 690 }
meric 0:2a01c5a56ed1 691 }
meric 0:2a01c5a56ed1 692
meric 0:2a01c5a56ed1 693 //
meric 0:2a01c5a56ed1 694 void init_node()
meric 0:2a01c5a56ed1 695 {
meric 0:2a01c5a56ed1 696 // EEPROM'dan sistem ayarlarını oku
meric 0:2a01c5a56ed1 697 fnode.systemSetup = eeprom_read(EEPROM_TYPE, SYSTEM_SETUP_ADDR);
meric 0:2a01c5a56ed1 698
meric 0:2a01c5a56ed1 699 // Filtre sayısını hesapla
meric 0:2a01c5a56ed1 700 fnode.filterNumber = eeprom_read(EEPROM_TYPE, FILTER_NUMBER_ADDR);
meric 0:2a01c5a56ed1 701 fnode.lastFlushPhase = ((uint16_t)fnode.filterNumber * 4) + 1;
meric 0:2a01c5a56ed1 702
meric 0:2a01c5a56ed1 703 // Sayaç mevcuts ISR'yi aktifle
meric 0:2a01c5a56ed1 704 if ((fnode.systemSetup >> 3) & 1 == 1) {
meric 0:2a01c5a56ed1 705
meric 0:2a01c5a56ed1 706 watermeterInterrupt.rise(&watermeter_isr);
meric 0:2a01c5a56ed1 707
meric 0:2a01c5a56ed1 708 }
meric 0:2a01c5a56ed1 709
meric 0:2a01c5a56ed1 710 // EEPROM'dan sulama sırasında veri gönderim sıklığını oku
meric 0:2a01c5a56ed1 711 fnode.irriTransmitInterval = eeprom_read(EEPROM_TYPE, IRRI_TRANSMIT_INTERVAL_ADDR);
meric 0:2a01c5a56ed1 712
meric 0:2a01c5a56ed1 713 // EEPROM'dan sulama dışında veri gönderim sıklığını oku
meric 0:2a01c5a56ed1 714 fnode.dryTransmitInterval = eeprom_read(EEPROM_TYPE, DRY_TRANSMIT_INTERVAL_ADDR);
meric 0:2a01c5a56ed1 715
meric 0:2a01c5a56ed1 716 // EEPROM'dan otomatik veri gönderimini oku
meric 0:2a01c5a56ed1 717 if (eeprom_read(EEPROM_TYPE, AUTOSEND_STATUS_ADDR) == 1) {
meric 0:2a01c5a56ed1 718
meric 0:2a01c5a56ed1 719 fnode.autosend = true;
meric 0:2a01c5a56ed1 720
meric 0:2a01c5a56ed1 721 } else {
meric 0:2a01c5a56ed1 722
meric 0:2a01c5a56ed1 723 fnode.autosend = false;
meric 0:2a01c5a56ed1 724
meric 0:2a01c5a56ed1 725 }
meric 0:2a01c5a56ed1 726
meric 0:2a01c5a56ed1 727 if (eeprom_read(EEPROM_TYPE, IRRI_STATUS_ADDR) == 1) {
meric 0:2a01c5a56ed1 728
meric 0:2a01c5a56ed1 729 fnode.irrigation = true;
meric 0:2a01c5a56ed1 730
meric 0:2a01c5a56ed1 731 dataTransmitTicker.attach(&data_transmit_isr, fnode.irriTransmitInterval * 60);
meric 0:2a01c5a56ed1 732
meric 0:2a01c5a56ed1 733 timer.reset();
meric 0:2a01c5a56ed1 734 timer.start();
meric 0:2a01c5a56ed1 735
meric 0:2a01c5a56ed1 736 } else {
meric 0:2a01c5a56ed1 737
meric 0:2a01c5a56ed1 738 fnode.irrigation = false;
meric 0:2a01c5a56ed1 739
meric 0:2a01c5a56ed1 740 dataTransmitTicker.attach(&data_transmit_isr, fnode.dryTransmitInterval * 60);
meric 0:2a01c5a56ed1 741
meric 0:2a01c5a56ed1 742 timer.reset();
meric 0:2a01c5a56ed1 743 timer.start();
meric 0:2a01c5a56ed1 744
meric 0:2a01c5a56ed1 745 }
meric 0:2a01c5a56ed1 746
meric 0:2a01c5a56ed1 747 // EEPROM'dan sayaç katsayısını oku
meric 0:2a01c5a56ed1 748 fnode.watermeterCoefficient = (eeprom_read(EEPROM_TYPE, WATERMETER_COEFF_ADDR_1) << 8) + eeprom_read(EEPROM_TYPE, WATERMETER_COEFF_ADDR_2);
meric 0:2a01c5a56ed1 749
meric 0:2a01c5a56ed1 750 // EEPROM'dan basınç sensörünün okuyabileceği maksimum basıncı oku
meric 0:2a01c5a56ed1 751 fnode.pMax = eeprom_read(EEPROM_TYPE, PMAX_ADDR);
meric 0:2a01c5a56ed1 752
meric 0:2a01c5a56ed1 753 // EEPROM'dan basınç sensörü tipini oku (4-20 mA veya 0-3.3v)
meric 0:2a01c5a56ed1 754 fnode.pressureSensorType = eeprom_read(EEPROM_TYPE, PRESSURE_SENSOR_ADDR);
meric 0:2a01c5a56ed1 755
meric 0:2a01c5a56ed1 756 // EEPROM'dan DP set değerini oku
meric 0:2a01c5a56ed1 757 fnode.dpSet = eeprom_read(EEPROM_TYPE, DP_ADDR);
meric 0:2a01c5a56ed1 758
meric 0:2a01c5a56ed1 759 // EEPROM'dan basınç kontrol sıklığını oku
meric 0:2a01c5a56ed1 760 fnode.pressureControlFrequency = eeprom_read(EEPROM_TYPE, PRESSURE_CONTROL_FREQUENCY_ADDR);
meric 0:2a01c5a56ed1 761
meric 0:2a01c5a56ed1 762 // EEPROM'dan 1 filtre yıkama süresini oku
meric 0:2a01c5a56ed1 763 fnode.flushDuration = eeprom_read(EEPROM_TYPE, FLUSH_DURATION_ADDR);
meric 0:2a01c5a56ed1 764
meric 0:2a01c5a56ed1 765 // EEPROM'dan 2 filtre yıkaması arasındaki bekleme süresini oku
meric 0:2a01c5a56ed1 766 fnode.flushInterval = eeprom_read(EEPROM_TYPE, FLUSH_INTERVAL_ADDR);
meric 0:2a01c5a56ed1 767
meric 0:2a01c5a56ed1 768 // EEPROM'dan akış kontrolü gecikme süresini oku (Akış kontrolü filtre yıkaması başladıktan ya da bittikten kaç saniye sonra yapılacak?)
meric 0:2a01c5a56ed1 769 fnode.flowControlLatency = eeprom_read(EEPROM_TYPE, FLOW_CONTROL_LATENCY_ADDR);
meric 0:2a01c5a56ed1 770
meric 0:2a01c5a56ed1 771 // EEPROM'dan ters yıkama kontrolü aktif ya da pasif durumunu oku
meric 0:2a01c5a56ed1 772 if (eeprom_read(EEPROM_TYPE, FLUSH_ENABLE_ADDR) == 1) {
meric 0:2a01c5a56ed1 773
meric 0:2a01c5a56ed1 774 fnode.flushEnabled = 1;
meric 0:2a01c5a56ed1 775
meric 0:2a01c5a56ed1 776 } else {
meric 0:2a01c5a56ed1 777
meric 0:2a01c5a56ed1 778 fnode.flushEnabled = 0;
meric 0:2a01c5a56ed1 779
meric 0:2a01c5a56ed1 780 }
meric 0:2a01c5a56ed1 781
meric 0:2a01c5a56ed1 782 // EEPROM'dan basınç sensörünün yerleştirme noktasını oku (Filtre öncesi ya da sonrası)
meric 0:2a01c5a56ed1 783 fnode.pressureSensorPosition = eeprom_read(EEPROM_TYPE, PR_SENSOR_POSITION_ADDR);
meric 0:2a01c5a56ed1 784
meric 0:2a01c5a56ed1 785 // EEPROM'dan hata durumunda ters yıkamanın durdurulup durdurulmayacağını oku
meric 0:2a01c5a56ed1 786 if (eeprom_read(EEPROM_TYPE, BACKFLUSH_STOP_ADDR) == 0) {
meric 0:2a01c5a56ed1 787
meric 0:2a01c5a56ed1 788 fnode.onErrorStop = 0;
meric 0:2a01c5a56ed1 789
meric 0:2a01c5a56ed1 790 } else {
meric 0:2a01c5a56ed1 791
meric 0:2a01c5a56ed1 792 fnode.onErrorStop = 1;
meric 0:2a01c5a56ed1 793
meric 0:2a01c5a56ed1 794 }
meric 0:2a01c5a56ed1 795
meric 0:2a01c5a56ed1 796 fnode.pressureLowThreshold = eeprom_read(EEPROM_TYPE, INLET_PRS_LOW_TRS_ADDR);
meric 0:2a01c5a56ed1 797 fnode.pressureHighThreshold = eeprom_read(EEPROM_TYPE, INLET_PRS_HIGH_TRS_ADDR);
meric 0:2a01c5a56ed1 798
meric 0:2a01c5a56ed1 799 // Timer ve tickerları başlat
meric 0:2a01c5a56ed1 800 // Basınç sürekli kontrol edilecek
meric 0:2a01c5a56ed1 801 pressureCheckTicker.attach(&pressure_check_isr, fnode.pressureControlFrequency);
meric 0:2a01c5a56ed1 802
meric 0:2a01c5a56ed1 803 // EEPROM'dan alarmların açık/kapalı durumunu oku
meric 0:2a01c5a56ed1 804 if (eeprom_read(EEPROM_TYPE, ALARMS_ENABLE_ADDR) == 0) {
meric 0:2a01c5a56ed1 805
meric 0:2a01c5a56ed1 806 fnode.alarmsEnabled = 0;
meric 0:2a01c5a56ed1 807
meric 0:2a01c5a56ed1 808 } else {
meric 0:2a01c5a56ed1 809
meric 0:2a01c5a56ed1 810 fnode.alarmsEnabled = 1;
meric 0:2a01c5a56ed1 811
meric 0:2a01c5a56ed1 812 }
meric 0:2a01c5a56ed1 813
meric 0:2a01c5a56ed1 814 // EEPROM'dan DP alarmı eşik değerini oku
meric 0:2a01c5a56ed1 815 // Yıkama sırasında DP bu değerin üstüne çıkarsa alarm gönderilir
meric 0:2a01c5a56ed1 816 // Bazı durumlarda DP düşmeyebilir !!!
meric 0:2a01c5a56ed1 817 fnode.dpThreshold = eeprom_read(EEPROM_TYPE, DP_HIGH_TRS_ADDR);
meric 0:2a01c5a56ed1 818
meric 0:2a01c5a56ed1 819 // EEPROM'dan sulamanın başladığının anlaşılacağı giriş basıncı set değerini oku
meric 0:2a01c5a56ed1 820 fnode.inletPressureSet = eeprom_read(EEPROM_TYPE, INLET_PRS_SET_ADDR);
meric 0:2a01c5a56ed1 821
meric 0:2a01c5a56ed1 822 // EEPROM'dan DP kontrolünün başlayacağı filtrasyon çıkış basıncı set değerini oku
meric 0:2a01c5a56ed1 823 fnode.outletPressureSet = eeprom_read(EEPROM_TYPE, OUTLET_PRS_SET_FOR_DP_ADDR);
meric 0:2a01c5a56ed1 824
meric 0:2a01c5a56ed1 825 // periodicFlushInterval değeri 0 ise periyodik yıkama yapılmaz
meric 0:2a01c5a56ed1 826 fnode.periodicFlushInterval = eeprom_read(EEPROM_TYPE, PERIODIC_FLUSH_ADDR);
meric 0:2a01c5a56ed1 827
meric 0:2a01c5a56ed1 828 if (fnode.periodicFlushInterval == 0) {
meric 0:2a01c5a56ed1 829
meric 0:2a01c5a56ed1 830 fnode.periodicFlushEnabled = false;
meric 0:2a01c5a56ed1 831 periodicFlushTicker.detach();
meric 0:2a01c5a56ed1 832 fnode.periodicFlushCounter = 0;
meric 0:2a01c5a56ed1 833
meric 0:2a01c5a56ed1 834 } else {
meric 0:2a01c5a56ed1 835
meric 0:2a01c5a56ed1 836 fnode.periodicFlushEnabled = true;
meric 0:2a01c5a56ed1 837 fnode.periodicFlushCounter = 0;
meric 0:2a01c5a56ed1 838
meric 0:2a01c5a56ed1 839 // Periodic flush isr works every 1 second to increase periodicCounter by 1
meric 0:2a01c5a56ed1 840 // If periodicCounter value >= peridicFlushInterval * 3600
meric 0:2a01c5a56ed1 841 // Example:
meric 0:2a01c5a56ed1 842 // Periodic flush interval is 6 hours
meric 0:2a01c5a56ed1 843 // Periodic counter counts every 1 seconds by ISR
meric 0:2a01c5a56ed1 844 // In 1 hour there is 3600 seconds..... In 6 hours 6 * 3600 = 21600 seconds
meric 0:2a01c5a56ed1 845
meric 0:2a01c5a56ed1 846 if (fnode.irrigation == true) {
meric 0:2a01c5a56ed1 847
meric 0:2a01c5a56ed1 848 periodicFlushTicker.attach(&periodic_flush_isr, 1); // ISR set every 1 second
meric 0:2a01c5a56ed1 849
meric 0:2a01c5a56ed1 850 } else {
meric 0:2a01c5a56ed1 851
meric 0:2a01c5a56ed1 852 periodicFlushTicker.detach();
meric 0:2a01c5a56ed1 853
meric 0:2a01c5a56ed1 854 }
meric 0:2a01c5a56ed1 855 }
meric 0:2a01c5a56ed1 856
meric 0:2a01c5a56ed1 857 // minFlushInterval değeri 0'dan farklı ise DP yıkamaları min süre beklenerek yapılır
meric 0:2a01c5a56ed1 858 c23_a = eeprom_read(EEPROM_TYPE, MIN_FLUSH_INTERVAL_ADDR_1);
meric 0:2a01c5a56ed1 859 c23_b = eeprom_read(EEPROM_TYPE, MIN_FLUSH_INTERVAL_ADDR_2);
meric 0:2a01c5a56ed1 860 fnode.minFlushInterval = (c23_a << 8) + c23_b;
meric 0:2a01c5a56ed1 861
meric 0:2a01c5a56ed1 862 if (fnode.minFlushInterval == 0) {
meric 0:2a01c5a56ed1 863
meric 0:2a01c5a56ed1 864 fnode.minFlushEnabled = false;
meric 0:2a01c5a56ed1 865
meric 0:2a01c5a56ed1 866 } else {
meric 0:2a01c5a56ed1 867
meric 0:2a01c5a56ed1 868 fnode.minFlushEnabled = true;
meric 0:2a01c5a56ed1 869 }
meric 0:2a01c5a56ed1 870
meric 0:2a01c5a56ed1 871 if (fnode.filterNumber % 4 == 0) {
meric 0:2a01c5a56ed1 872
meric 0:2a01c5a56ed1 873 fnode.totalSlaveNumber = fnode.filterNumber / 4;
meric 0:2a01c5a56ed1 874
meric 0:2a01c5a56ed1 875 } else {
meric 0:2a01c5a56ed1 876
meric 0:2a01c5a56ed1 877 fnode.totalSlaveNumber = (fnode.filterNumber / 4) + 1;
meric 0:2a01c5a56ed1 878 }
meric 0:2a01c5a56ed1 879 }
meric 0:2a01c5a56ed1 880
meric 0:2a01c5a56ed1 881 //
meric 0:2a01c5a56ed1 882 float read_pressure_dp()
meric 0:2a01c5a56ed1 883 {
meric 0:2a01c5a56ed1 884 // Analog kanal okumasının RMS (Root Mean Square) hesaplaması
meric 0:2a01c5a56ed1 885 memset(rmsStore, 0, sizeof(rmsStore));
meric 0:2a01c5a56ed1 886 totalSampling = 0.0;
meric 0:2a01c5a56ed1 887 tempValue = 0.0;
meric 0:2a01c5a56ed1 888 tdp = 0.0;
meric 0:2a01c5a56ed1 889
meric 0:2a01c5a56ed1 890 for (uint8_t b = 0; b < RMS_SAMPLING_NUMBER; b++) {
meric 0:2a01c5a56ed1 891
meric 0:2a01c5a56ed1 892 tempValue = dpSensor.read();
meric 0:2a01c5a56ed1 893 rmsStore[b] = tempValue * tempValue;
meric 0:2a01c5a56ed1 894 totalSampling = totalSampling + rmsStore[b];
meric 0:2a01c5a56ed1 895
meric 0:2a01c5a56ed1 896 }
meric 0:2a01c5a56ed1 897
meric 0:2a01c5a56ed1 898 tdp = (sqrt ((float)((totalSampling / RMS_SAMPLING_NUMBER)))) * 4096.0f;
meric 0:2a01c5a56ed1 899 //
meric 0:2a01c5a56ed1 900
meric 0:2a01c5a56ed1 901 // Fark basınç hesaplaması, BAR, -4 ile +4 bar arası
meric 0:2a01c5a56ed1 902 // DP + 4 = ((Sensor okuması - 409.6) / 409.6) ==> Honeywell sensor katalog sadeleştirilmiş denklem
meric 0:2a01c5a56ed1 903 tdpResult = ((tdp-409.6f)/409.6f) - 4.0f;
meric 0:2a01c5a56ed1 904
meric 0:2a01c5a56ed1 905 if (tdpResult < 0) {
meric 0:2a01c5a56ed1 906
meric 0:2a01c5a56ed1 907 tdpResult = 0;
meric 0:2a01c5a56ed1 908
meric 0:2a01c5a56ed1 909 }
meric 0:2a01c5a56ed1 910
meric 0:2a01c5a56ed1 911 tdpResult = floor(tdpResult * 10) / 10;
meric 0:2a01c5a56ed1 912
meric 0:2a01c5a56ed1 913 return tdpResult;
meric 0:2a01c5a56ed1 914 }
meric 0:2a01c5a56ed1 915
meric 0:2a01c5a56ed1 916 //
meric 0:2a01c5a56ed1 917 float read_pressure()
meric 0:2a01c5a56ed1 918 {
meric 0:2a01c5a56ed1 919 // Analog kanal okumasının RMS (Root Mean Square) hesaplaması
meric 0:2a01c5a56ed1 920 memset(rmsStore, 0, sizeof(rmsStore));
meric 0:2a01c5a56ed1 921 totalSampling = 0;
meric 0:2a01c5a56ed1 922 tempValue = 0;
meric 0:2a01c5a56ed1 923 tp = 0;
meric 0:2a01c5a56ed1 924
meric 0:2a01c5a56ed1 925 for (uint8_t b = 0; b < RMS_SAMPLING_NUMBER; b++) {
meric 0:2a01c5a56ed1 926
meric 0:2a01c5a56ed1 927 tempValue = pressureSensor.read();
meric 0:2a01c5a56ed1 928 rmsStore[b] = tempValue * tempValue;
meric 0:2a01c5a56ed1 929 totalSampling = totalSampling + rmsStore[b];
meric 0:2a01c5a56ed1 930
meric 0:2a01c5a56ed1 931 }
meric 0:2a01c5a56ed1 932
meric 0:2a01c5a56ed1 933 tp = (sqrt ((float)((totalSampling / RMS_SAMPLING_NUMBER)))) * 4096.0f;
meric 0:2a01c5a56ed1 934 //
meric 0:2a01c5a56ed1 935
meric 0:2a01c5a56ed1 936 if (fnode.pressureSensorType == 0) {
meric 0:2a01c5a56ed1 937
meric 0:2a01c5a56ed1 938 // Ham analog verisinden basınç hesaplaması, BAR
meric 0:2a01c5a56ed1 939 // Honeywell Truw Stability sensörlerine özel, PSI, 3.3v, map'lenmemiş
meric 0:2a01c5a56ed1 940 tp = ((tp - 409.6f) / (3276.8f / (float)fnode.pMax)) * 0.0689476f; // 0.0689 is for psi to bar conversion;
meric 0:2a01c5a56ed1 941
meric 0:2a01c5a56ed1 942 } else {
meric 0:2a01c5a56ed1 943
meric 0:2a01c5a56ed1 944 // Ham analog verisinden basınç hesaplaması, BAR
meric 0:2a01c5a56ed1 945 // 4-20 mA sensöre özel, BAR
meric 0:2a01c5a56ed1 946 // 4 mA = 480 mV = 595.8 RAW
meric 0:2a01c5a56ed1 947 // 20 mA = 2400 mV = 2978.9 RAW
meric 0:2a01c5a56ed1 948 tp = map (tp, 595.8f, 2978.9f, 0.0f, (float)fnode.pMax);
meric 0:2a01c5a56ed1 949
meric 0:2a01c5a56ed1 950 }
meric 0:2a01c5a56ed1 951
meric 0:2a01c5a56ed1 952 if (tp < 0) {
meric 0:2a01c5a56ed1 953
meric 0:2a01c5a56ed1 954 tp = 0;
meric 0:2a01c5a56ed1 955
meric 0:2a01c5a56ed1 956 }
meric 0:2a01c5a56ed1 957
meric 0:2a01c5a56ed1 958 tp = floor(tp * 10) / 10;
meric 0:2a01c5a56ed1 959
meric 0:2a01c5a56ed1 960 return tp;
meric 0:2a01c5a56ed1 961 }
meric 0:2a01c5a56ed1 962
meric 0:2a01c5a56ed1 963 void prepare_data_fread()
meric 0:2a01c5a56ed1 964 {
meric 0:2a01c5a56ed1 965 memset(fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 966 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 967
meric 0:2a01c5a56ed1 968 // Filtrasyon JSON headırını yaz
meric 0:2a01c5a56ed1 969 sprintf(fnode.temporaryBuffer, "%s", json[0]);
meric 0:2a01c5a56ed1 970 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 971 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 972
meric 0:2a01c5a56ed1 973 // Eğer basınç sensörü varsa
meric 0:2a01c5a56ed1 974 if (fnode.systemSetup & (1 << 1)) {
meric 0:2a01c5a56ed1 975
meric 0:2a01c5a56ed1 976 // Basınç sensörü varken DP sensörü de mevcutsa hem giriş hem çıkış basıncını yaz
meric 0:2a01c5a56ed1 977 if (fnode.systemSetup & (1 << 1)) {
meric 0:2a01c5a56ed1 978
meric 0:2a01c5a56ed1 979 sprintf(fnode.temporaryBuffer, "%s%.1f%c%s%.1f%c", jsonHeader[0], fnode.inletPressure, ',', jsonHeader[1], fnode.outletPressure, ',');
meric 0:2a01c5a56ed1 980 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 981 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 982
meric 0:2a01c5a56ed1 983 // Basınç sensörü varken DP sensörü yoksa basınç sensörünün pozisyonuna göre giriş veya çıkış basıncını yaz
meric 0:2a01c5a56ed1 984 } else {
meric 0:2a01c5a56ed1 985
meric 0:2a01c5a56ed1 986 // Basınç sensörü girişte ise giriş basıncını yaz, çıkış basıncı NULL olsun
meric 0:2a01c5a56ed1 987 if (fnode.systemSetup & (1 << 1) && fnode.pressureSensorPosition == 0) {
meric 0:2a01c5a56ed1 988
meric 0:2a01c5a56ed1 989 sprintf(fnode.temporaryBuffer, "%s%.1f%c%s%s%c", jsonHeader[0], fnode.inletPressure, ',', jsonHeader[1], "null", ',');
meric 0:2a01c5a56ed1 990 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 991 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 992
meric 0:2a01c5a56ed1 993 // Basınç sensörü çıkışta ise çıkış basıncını yaz, giriş basıncı NULL olsun
meric 0:2a01c5a56ed1 994 } else if (fnode.systemSetup & (1 << 1) && fnode.pressureSensorPosition == 1) {
meric 0:2a01c5a56ed1 995
meric 0:2a01c5a56ed1 996 sprintf(fnode.temporaryBuffer, "%s%s%c%s%.1f%c", jsonHeader[0], "null", ',', jsonHeader[1], fnode.outletPressure, ',');
meric 0:2a01c5a56ed1 997 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 998 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 999
meric 0:2a01c5a56ed1 1000 }
meric 0:2a01c5a56ed1 1001 }
meric 0:2a01c5a56ed1 1002
meric 0:2a01c5a56ed1 1003 // Basınç sensörü yoksa giriş ve çıkış basınç değerleri NULL olsun
meric 0:2a01c5a56ed1 1004 } else {
meric 0:2a01c5a56ed1 1005
meric 0:2a01c5a56ed1 1006 sprintf(fnode.temporaryBuffer, "%s%s%c%s%s%c", jsonHeader[0], "null", ',', jsonHeader[1], "null", ',');
meric 0:2a01c5a56ed1 1007 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1008 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1009 }
meric 0:2a01c5a56ed1 1010
meric 0:2a01c5a56ed1 1011 // Eğer DP sensörü varsa DP verisini ekle
meric 0:2a01c5a56ed1 1012 if (fnode.systemSetup & (1 << 1)) {
meric 0:2a01c5a56ed1 1013
meric 0:2a01c5a56ed1 1014 sprintf(fnode.temporaryBuffer, "%s%.1f%c", jsonHeader[2], fnode.dpPressure, ',');
meric 0:2a01c5a56ed1 1015 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1016 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1017
meric 0:2a01c5a56ed1 1018 // DP sensörü yoksa DP verisi NULL olsun
meric 0:2a01c5a56ed1 1019 } else {
meric 0:2a01c5a56ed1 1020
meric 0:2a01c5a56ed1 1021 sprintf(fnode.temporaryBuffer, "%s%s%c", jsonHeader[2], "null", ',');
meric 0:2a01c5a56ed1 1022 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1023 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1024
meric 0:2a01c5a56ed1 1025 }
meric 0:2a01c5a56ed1 1026
meric 0:2a01c5a56ed1 1027 // Eğer sayaç mevcutsa su hacmi ve debi verilerini ekle
meric 0:2a01c5a56ed1 1028 // İki veri gönderimi arasındaki su hacmi ve debi verisini burada hesapla
meric 0:2a01c5a56ed1 1029 if (fnode.systemSetup & (1 << 3)) {
meric 0:2a01c5a56ed1 1030
meric 0:2a01c5a56ed1 1031 sprintf(fnode.temporaryBuffer, "%s%llu%c%s%llu%c%s%.1f%c%s%llu%c%s%llu%c%s%.1f", jsonHeader[3], fnode.rWI, ',', jsonHeader[4], fnode.rWIC, ',', jsonHeader[5], fnode.rQI, ',', jsonHeader[6], fnode.rWD, ',', jsonHeader[7], fnode.rWDC, ',', jsonHeader[8], fnode.rQD);
meric 0:2a01c5a56ed1 1032 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1033 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1034
meric 0:2a01c5a56ed1 1035
meric 0:2a01c5a56ed1 1036 } else {
meric 0:2a01c5a56ed1 1037
meric 0:2a01c5a56ed1 1038 sprintf(fnode.temporaryBuffer, "%s%s%c%s%s%c%s%s%c%s%s%c%s%s%c%s%s", jsonHeader[3], "null", ',', jsonHeader[4], "null", ',', jsonHeader[5], "null", ',', jsonHeader[6], "null", ',', jsonHeader[7], "null", ',', jsonHeader[8], "null");
meric 0:2a01c5a56ed1 1039 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1040 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1041
meric 0:2a01c5a56ed1 1042 }
meric 0:2a01c5a56ed1 1043
meric 0:2a01c5a56ed1 1044 // Sulama durumu
meric 0:2a01c5a56ed1 1045 if (fnode.irrigation == true) {
meric 0:2a01c5a56ed1 1046
meric 0:2a01c5a56ed1 1047 sprintf(fnode.temporaryBuffer, "%s", ",STAT:\"IRR\"");
meric 0:2a01c5a56ed1 1048 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1049 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1050
meric 0:2a01c5a56ed1 1051 } else {
meric 0:2a01c5a56ed1 1052
meric 0:2a01c5a56ed1 1053 sprintf(fnode.temporaryBuffer, "%s", ",STAT:\"DRY\"");
meric 0:2a01c5a56ed1 1054 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1055 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1056
meric 0:2a01c5a56ed1 1057 }
meric 0:2a01c5a56ed1 1058
meric 0:2a01c5a56ed1 1059 // Yıkama durumu
meric 0:2a01c5a56ed1 1060 if (fnode.flushing == true) {
meric 0:2a01c5a56ed1 1061
meric 0:2a01c5a56ed1 1062 sprintf(fnode.temporaryBuffer, "%s", ",FSTAT:1");
meric 0:2a01c5a56ed1 1063 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1064 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1065
meric 0:2a01c5a56ed1 1066 } else {
meric 0:2a01c5a56ed1 1067
meric 0:2a01c5a56ed1 1068 sprintf(fnode.temporaryBuffer, "%s", ",FSTAT:0");
meric 0:2a01c5a56ed1 1069 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1070 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1071
meric 0:2a01c5a56ed1 1072 }
meric 0:2a01c5a56ed1 1073
meric 0:2a01c5a56ed1 1074 sprintf(fnode.temporaryBuffer, "%s", "},RT:1}");
meric 0:2a01c5a56ed1 1075
meric 0:2a01c5a56ed1 1076 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1077 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1078 }
meric 0:2a01c5a56ed1 1079
meric 0:2a01c5a56ed1 1080
meric 0:2a01c5a56ed1 1081 //
meric 0:2a01c5a56ed1 1082 void prepare_data()
meric 0:2a01c5a56ed1 1083 {
meric 0:2a01c5a56ed1 1084 memset(fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 1085 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1086
meric 0:2a01c5a56ed1 1087 // Filtrasyon JSON headırını yaz
meric 0:2a01c5a56ed1 1088 sprintf(fnode.temporaryBuffer, "%s", json[0]);
meric 0:2a01c5a56ed1 1089 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1090 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1091
meric 0:2a01c5a56ed1 1092 // Eğer basınç sensörü varsa
meric 0:2a01c5a56ed1 1093 if (fnode.systemSetup & (1 << 1)) {
meric 0:2a01c5a56ed1 1094
meric 0:2a01c5a56ed1 1095 // Basınç sensörü varken DP sensörü de mevcutsa hem giriş hem çıkış basıncını yaz
meric 0:2a01c5a56ed1 1096 if (fnode.systemSetup & (1 << 0)) {
meric 0:2a01c5a56ed1 1097
meric 0:2a01c5a56ed1 1098 sprintf(fnode.temporaryBuffer, "%s%.1f%c%s%.1f%c", jsonHeader[0], fnode.inletPressure, ',', jsonHeader[1], fnode.outletPressure, ',');
meric 0:2a01c5a56ed1 1099 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1100 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1101
meric 0:2a01c5a56ed1 1102 // Basınç sensörü varken DP sensörü yoksa basınç sensörünün pozisyonuna göre giriş veya çıkış basıncını yaz
meric 0:2a01c5a56ed1 1103 } else {
meric 0:2a01c5a56ed1 1104
meric 0:2a01c5a56ed1 1105 // Basınç sensörü girişte ise giriş basıncını yaz, çıkış basıncı NULL olsun
meric 0:2a01c5a56ed1 1106 if (fnode.systemSetup & (1 << 1) && fnode.pressureSensorPosition == 0) {
meric 0:2a01c5a56ed1 1107
meric 0:2a01c5a56ed1 1108 sprintf(fnode.temporaryBuffer, "%s%.1f%c%s%s%c", jsonHeader[0], fnode.inletPressure, ',', jsonHeader[1], "null", ',');
meric 0:2a01c5a56ed1 1109 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1110 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1111
meric 0:2a01c5a56ed1 1112 // Basınç sensörü çıkışta ise çıkış basıncını yaz, giriş basıncı NULL olsun
meric 0:2a01c5a56ed1 1113 } else if (fnode.systemSetup & (1 << 1) && fnode.pressureSensorPosition == 1) {
meric 0:2a01c5a56ed1 1114
meric 0:2a01c5a56ed1 1115 sprintf(fnode.temporaryBuffer, "%s%s%c%s%.1f%c", jsonHeader[0], "null", ',', jsonHeader[1], fnode.outletPressure, ',');
meric 0:2a01c5a56ed1 1116 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1117 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1118
meric 0:2a01c5a56ed1 1119 }
meric 0:2a01c5a56ed1 1120 }
meric 0:2a01c5a56ed1 1121
meric 0:2a01c5a56ed1 1122 // Basınç sensörü yoksa giriş ve çıkış basınç değerleri NULL olsun
meric 0:2a01c5a56ed1 1123 } else {
meric 0:2a01c5a56ed1 1124
meric 0:2a01c5a56ed1 1125 sprintf(fnode.temporaryBuffer, "%s%s%c%s%s%c", jsonHeader[0], "null", ',', jsonHeader[1], "null", ',');
meric 0:2a01c5a56ed1 1126 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1127 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1128 }
meric 0:2a01c5a56ed1 1129
meric 0:2a01c5a56ed1 1130 // Eğer DP sensörü varsa DP verisini ekle
meric 0:2a01c5a56ed1 1131 if (fnode.systemSetup & (1 << 0)) {
meric 0:2a01c5a56ed1 1132
meric 0:2a01c5a56ed1 1133 sprintf(fnode.temporaryBuffer, "%s%.1f%c", jsonHeader[2], fnode.dpPressure, ',');
meric 0:2a01c5a56ed1 1134 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1135 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1136
meric 0:2a01c5a56ed1 1137 // DP sensörü yoksa DP verisi NULL olsun
meric 0:2a01c5a56ed1 1138 } else {
meric 0:2a01c5a56ed1 1139
meric 0:2a01c5a56ed1 1140 sprintf(fnode.temporaryBuffer, "%s%s%c", jsonHeader[2], "null", ',');
meric 0:2a01c5a56ed1 1141 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1142 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1143
meric 0:2a01c5a56ed1 1144 }
meric 0:2a01c5a56ed1 1145
meric 0:2a01c5a56ed1 1146 // Eğer sayaç mevcutsa su hacmi ve debi verilerini ekle
meric 0:2a01c5a56ed1 1147 // İki veri gönderimi arasındaki su hacmi ve debi verisini burada hesapla
meric 0:2a01c5a56ed1 1148 if (fnode.systemSetup & (1 << 3)) {
meric 0:2a01c5a56ed1 1149
meric 0:2a01c5a56ed1 1150 sprintf(fnode.temporaryBuffer, "%s%llu%c%s%llu%c%s%.1f%c%s%llu%c%s%llu%c%s%.1f", jsonHeader[3], fnode.WI, ',', jsonHeader[4], fnode.WIC, ',', jsonHeader[5], fnode.QI, ',', jsonHeader[6], fnode.WD, ',', jsonHeader[7], fnode.WDC, ',', jsonHeader[8], fnode.QD);
meric 0:2a01c5a56ed1 1151 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1152 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1153
meric 0:2a01c5a56ed1 1154
meric 0:2a01c5a56ed1 1155 } else {
meric 0:2a01c5a56ed1 1156
meric 0:2a01c5a56ed1 1157 sprintf(fnode.temporaryBuffer, "%s%s%c%s%s%c%s%s%c%s%s%c%s%s%c%s%s", jsonHeader[3], "null", ',', jsonHeader[4], "null", ',', jsonHeader[5], "null", ',', jsonHeader[6], "null", ',', jsonHeader[7], "null", ',', jsonHeader[8], "null");
meric 0:2a01c5a56ed1 1158 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1159 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1160
meric 0:2a01c5a56ed1 1161 }
meric 0:2a01c5a56ed1 1162
meric 0:2a01c5a56ed1 1163 // Sulama durumu
meric 0:2a01c5a56ed1 1164 if (fnode.irrigation == true) {
meric 0:2a01c5a56ed1 1165
meric 0:2a01c5a56ed1 1166 sprintf(fnode.temporaryBuffer, "%s", ",STAT:\"IRR\"");
meric 0:2a01c5a56ed1 1167 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1168 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1169
meric 0:2a01c5a56ed1 1170 } else {
meric 0:2a01c5a56ed1 1171
meric 0:2a01c5a56ed1 1172 sprintf(fnode.temporaryBuffer, "%s", ",STAT:\"DRY\"");
meric 0:2a01c5a56ed1 1173 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1174 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1175
meric 0:2a01c5a56ed1 1176 }
meric 0:2a01c5a56ed1 1177
meric 0:2a01c5a56ed1 1178 // Yıkama durumu
meric 0:2a01c5a56ed1 1179 if (fnode.flushing == true) {
meric 0:2a01c5a56ed1 1180
meric 0:2a01c5a56ed1 1181 sprintf(fnode.temporaryBuffer, "%s", ",FSTAT:1");
meric 0:2a01c5a56ed1 1182 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1183 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1184
meric 0:2a01c5a56ed1 1185 } else {
meric 0:2a01c5a56ed1 1186
meric 0:2a01c5a56ed1 1187 sprintf(fnode.temporaryBuffer, "%s", ",FSTAT:0");
meric 0:2a01c5a56ed1 1188 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1189 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1190
meric 0:2a01c5a56ed1 1191 }
meric 0:2a01c5a56ed1 1192
meric 0:2a01c5a56ed1 1193 sprintf(fnode.temporaryBuffer, "%s", "}}");
meric 0:2a01c5a56ed1 1194
meric 0:2a01c5a56ed1 1195 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1196 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1197 }
meric 0:2a01c5a56ed1 1198
meric 0:2a01c5a56ed1 1199 //
meric 0:2a01c5a56ed1 1200 void send_to_coordinator(char* char_array)
meric 0:2a01c5a56ed1 1201 {
meric 0:2a01c5a56ed1 1202 rf.putc(COORD_ADDR_1);
meric 0:2a01c5a56ed1 1203 rf.putc(COORD_ADDR_2);
meric 0:2a01c5a56ed1 1204 rf.putc(EQUAL);
meric 0:2a01c5a56ed1 1205 rf.puts(char_array);
meric 0:2a01c5a56ed1 1206 rf.putc(CR);
meric 0:2a01c5a56ed1 1207 wait_ms(50);
meric 0:2a01c5a56ed1 1208 }
meric 0:2a01c5a56ed1 1209
meric 0:2a01c5a56ed1 1210 //
meric 0:2a01c5a56ed1 1211 void process_command(uint8_t cmnd)
meric 0:2a01c5a56ed1 1212 {
meric 0:2a01c5a56ed1 1213 switch(cmnd) {
meric 0:2a01c5a56ed1 1214
meric 0:2a01c5a56ed1 1215 case FENABLE: {
meric 0:2a01c5a56ed1 1216
meric 0:2a01c5a56ed1 1217 // Eğer ters yıkama zaten akitflenmişse hata mesajı gönder
meric 0:2a01c5a56ed1 1218 if (eeprom_read(EEPROM_TYPE, FLUSH_ENABLE_ADDR) == 1) {
meric 0:2a01c5a56ed1 1219
meric 0:2a01c5a56ed1 1220 sprintf(fnode.dataBuffer, "%s", "{CMD:\"FENABLEERR\"}");
meric 0:2a01c5a56ed1 1221 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 1222 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 1223
meric 0:2a01c5a56ed1 1224 // Ters yıkamayı devre dışı bırak
meric 0:2a01c5a56ed1 1225 } else {
meric 0:2a01c5a56ed1 1226
meric 0:2a01c5a56ed1 1227 // Yıkamanın devreye alındığını EEPROM'a yaz
meric 0:2a01c5a56ed1 1228 eeprom_write(EEPROM_TYPE, FLUSH_ENABLE_ADDR, 1);
meric 0:2a01c5a56ed1 1229
meric 0:2a01c5a56ed1 1230 fnode.flushEnabled = 1;
meric 0:2a01c5a56ed1 1231
meric 0:2a01c5a56ed1 1232 sprintf(fnode.dataBuffer, "%s", "{CMD:\"FENABLEOK\"}");
meric 0:2a01c5a56ed1 1233 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 1234 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 1235
meric 0:2a01c5a56ed1 1236 }
meric 0:2a01c5a56ed1 1237 }
meric 0:2a01c5a56ed1 1238 break;
meric 0:2a01c5a56ed1 1239
meric 0:2a01c5a56ed1 1240 case FDISABLE: {
meric 0:2a01c5a56ed1 1241
meric 0:2a01c5a56ed1 1242 // Eğer ters yıkama zaten akitflenmişse hata mesajı gönder
meric 0:2a01c5a56ed1 1243 if (eeprom_read(EEPROM_TYPE, FLUSH_ENABLE_ADDR) == 0) {
meric 0:2a01c5a56ed1 1244
meric 0:2a01c5a56ed1 1245 sprintf(fnode.dataBuffer, "%s", "{CMD:\"FDISABLEERR\"}");
meric 0:2a01c5a56ed1 1246 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 1247 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 1248
meric 0:2a01c5a56ed1 1249 // Ters yıkamayı devre dışı bırak
meric 0:2a01c5a56ed1 1250 } else {
meric 0:2a01c5a56ed1 1251
meric 0:2a01c5a56ed1 1252 // Yıkamanın devre dışı kaldığını EEPROM'a yaz
meric 0:2a01c5a56ed1 1253 eeprom_write(EEPROM_TYPE, FLUSH_ENABLE_ADDR, 0);
meric 0:2a01c5a56ed1 1254
meric 0:2a01c5a56ed1 1255 fnode.flushEnabled = 0;
meric 0:2a01c5a56ed1 1256
meric 0:2a01c5a56ed1 1257 /*
meric 0:2a01c5a56ed1 1258 // Yıkama zamanlayıcısını kapat
meric 0:2a01c5a56ed1 1259 flushTimer.detach();
meric 0:2a01c5a56ed1 1260
meric 0:2a01c5a56ed1 1261 // Yıkama fazını sıfırla
meric 0:2a01c5a56ed1 1262 fnode.flushPhase = 0;
meric 0:2a01c5a56ed1 1263
meric 0:2a01c5a56ed1 1264 // Solenoid vanaları kontrol et ve kapat
meric 0:2a01c5a56ed1 1265 check_and_close_valves();
meric 0:2a01c5a56ed1 1266 */
meric 0:2a01c5a56ed1 1267
meric 0:2a01c5a56ed1 1268 sprintf(fnode.dataBuffer, "%s", "{CMD:\"FDISABLEOK\"}");
meric 0:2a01c5a56ed1 1269 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 1270 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 1271
meric 0:2a01c5a56ed1 1272 }
meric 0:2a01c5a56ed1 1273 }
meric 0:2a01c5a56ed1 1274 break;
meric 0:2a01c5a56ed1 1275
meric 0:2a01c5a56ed1 1276 case FSETSYS: {
meric 0:2a01c5a56ed1 1277
meric 0:2a01c5a56ed1 1278 // Sistem ayarları
meric 0:2a01c5a56ed1 1279 eeprom_write(EEPROM_TYPE, SYSTEM_SETUP_ADDR, fnode.systemSetup);
meric 0:2a01c5a56ed1 1280
meric 0:2a01c5a56ed1 1281 // Otomatik veri aktarımı
meric 0:2a01c5a56ed1 1282 eeprom_write(EEPROM_TYPE, AUTOSEND_STATUS_ADDR, fnode.autosendStatus);
meric 0:2a01c5a56ed1 1283
meric 0:2a01c5a56ed1 1284 // Yeni set edilecek veri aktarım aralıkları eskisinden farklıysa zamanlayıcıları yeni ayarla başlat
meric 0:2a01c5a56ed1 1285 // Eski ile yeni aktarım aralıkları aynı ise değişiklik yapma (Alt satırlarda)
meric 0:2a01c5a56ed1 1286 irriTrsIntOld = eeprom_read(EEPROM_TYPE, IRRI_TRANSMIT_INTERVAL_ADDR);
meric 0:2a01c5a56ed1 1287 eeprom_write(EEPROM_TYPE, IRRI_TRANSMIT_INTERVAL_ADDR, fnode.irriTransmitInterval);
meric 0:2a01c5a56ed1 1288
meric 0:2a01c5a56ed1 1289 dryTrsIntOld = eeprom_read(EEPROM_TYPE, DRY_TRANSMIT_INTERVAL_ADDR);
meric 0:2a01c5a56ed1 1290 eeprom_write(EEPROM_TYPE, DRY_TRANSMIT_INTERVAL_ADDR, fnode.dryTransmitInterval);
meric 0:2a01c5a56ed1 1291
meric 0:2a01c5a56ed1 1292 // Sayaç katsayısı
meric 0:2a01c5a56ed1 1293 eeprom_write(EEPROM_TYPE, WATERMETER_COEFF_ADDR_1, fnode.watermeterCoefficient >> 8);
meric 0:2a01c5a56ed1 1294 eeprom_write(EEPROM_TYPE, WATERMETER_COEFF_ADDR_2, fnode.watermeterCoefficient & 0xFF);
meric 0:2a01c5a56ed1 1295
meric 0:2a01c5a56ed1 1296 // Basınç sensörü maksimum basıncı
meric 0:2a01c5a56ed1 1297 eeprom_write(EEPROM_TYPE, PMAX_ADDR, fnode.pMax);
meric 0:2a01c5a56ed1 1298
meric 0:2a01c5a56ed1 1299 // Basınç sensörü tipi
meric 0:2a01c5a56ed1 1300 eeprom_write(EEPROM_TYPE, PRESSURE_SENSOR_ADDR, fnode.pressureSensorType);
meric 0:2a01c5a56ed1 1301
meric 0:2a01c5a56ed1 1302 // DP set
meric 0:2a01c5a56ed1 1303 eeprom_write(EEPROM_TYPE, DP_ADDR, fnode.dpSet);
meric 0:2a01c5a56ed1 1304
meric 0:2a01c5a56ed1 1305 // Basınç kontrol sıklığı
meric 0:2a01c5a56ed1 1306 eeprom_write(EEPROM_TYPE, PRESSURE_CONTROL_FREQUENCY_ADDR, fnode.pressureControlFrequency);
meric 0:2a01c5a56ed1 1307
meric 0:2a01c5a56ed1 1308 // 1 filtre yıkama süresi
meric 0:2a01c5a56ed1 1309 eeprom_write(EEPROM_TYPE, FLUSH_DURATION_ADDR, fnode.flushDuration);
meric 0:2a01c5a56ed1 1310
meric 0:2a01c5a56ed1 1311 // Yıkama aralığı
meric 0:2a01c5a56ed1 1312 eeprom_write(EEPROM_TYPE, FLUSH_INTERVAL_ADDR, fnode.flushInterval);
meric 0:2a01c5a56ed1 1313
meric 0:2a01c5a56ed1 1314 // Akış kontrol gecikmesi
meric 0:2a01c5a56ed1 1315 eeprom_write(EEPROM_TYPE, FLOW_CONTROL_LATENCY_ADDR, fnode.flowControlLatency);
meric 0:2a01c5a56ed1 1316
meric 0:2a01c5a56ed1 1317 // Ters yıkama devrede/devrede değil
meric 0:2a01c5a56ed1 1318 eeprom_write(EEPROM_TYPE, FLUSH_ENABLE_ADDR, fnode.flushEnabled);
meric 0:2a01c5a56ed1 1319
meric 0:2a01c5a56ed1 1320 // Basınç sensörü pozisyonu
meric 0:2a01c5a56ed1 1321 eeprom_write(EEPROM_TYPE, PR_SENSOR_POSITION_ADDR, fnode.pressureSensorPosition);
meric 0:2a01c5a56ed1 1322
meric 0:2a01c5a56ed1 1323 // Hata durumunda ters yıkamayı durdur/durdurma
meric 0:2a01c5a56ed1 1324 eeprom_write(EEPROM_TYPE, BACKFLUSH_STOP_ADDR, fnode.onErrorStop);
meric 0:2a01c5a56ed1 1325
meric 0:2a01c5a56ed1 1326 // Giriş basıncı alarm alt sınır eşik
meric 0:2a01c5a56ed1 1327 eeprom_write(EEPROM_TYPE, INLET_PRS_LOW_TRS_ADDR, fnode.pressureLowThreshold);
meric 0:2a01c5a56ed1 1328
meric 0:2a01c5a56ed1 1329 // Giriş basıncı alarm üst sınır eşik
meric 0:2a01c5a56ed1 1330 eeprom_write(EEPROM_TYPE, INLET_PRS_HIGH_TRS_ADDR, fnode.pressureHighThreshold);
meric 0:2a01c5a56ed1 1331
meric 0:2a01c5a56ed1 1332 // Alarmlar devrede
meric 0:2a01c5a56ed1 1333 eeprom_write(EEPROM_TYPE, ALARMS_ENABLE_ADDR, fnode.alarmsEnabled);
meric 0:2a01c5a56ed1 1334
meric 0:2a01c5a56ed1 1335 // DP alarm eşik değeri
meric 0:2a01c5a56ed1 1336 eeprom_write(EEPROM_TYPE, DP_HIGH_TRS_ADDR, fnode.dpThreshold);
meric 0:2a01c5a56ed1 1337
meric 0:2a01c5a56ed1 1338 eeprom_write(EEPROM_TYPE, INLET_PRS_SET_ADDR, fnode.inletPressureSet);
meric 0:2a01c5a56ed1 1339
meric 0:2a01c5a56ed1 1340 eeprom_write(EEPROM_TYPE, OUTLET_PRS_SET_FOR_DP_ADDR, fnode.outletPressureSet);
meric 0:2a01c5a56ed1 1341
meric 0:2a01c5a56ed1 1342 eeprom_write(EEPROM_TYPE, PERIODIC_FLUSH_ADDR, fnode.periodicFlushInterval);
meric 0:2a01c5a56ed1 1343
meric 0:2a01c5a56ed1 1344 eeprom_write(EEPROM_TYPE, MIN_FLUSH_INTERVAL_ADDR_1, fnode.minFlushInterval >> 8);
meric 0:2a01c5a56ed1 1345 eeprom_write(EEPROM_TYPE, MIN_FLUSH_INTERVAL_ADDR_2, fnode.minFlushInterval & 0xFF);
meric 0:2a01c5a56ed1 1346
meric 0:2a01c5a56ed1 1347 eeprom_write(EEPROM_TYPE, FILTER_NUMBER_ADDR, fnode.filterNumber);
meric 0:2a01c5a56ed1 1348
meric 0:2a01c5a56ed1 1349
meric 0:2a01c5a56ed1 1350 // Check written SSETSYS values on EEPROM
meric 0:2a01c5a56ed1 1351 c1 = eeprom_read(EEPROM_TYPE, SYSTEM_SETUP_ADDR);
meric 0:2a01c5a56ed1 1352 c2 = eeprom_read(EEPROM_TYPE, AUTOSEND_STATUS_ADDR);
meric 0:2a01c5a56ed1 1353 c3 = eeprom_read(EEPROM_TYPE, IRRI_TRANSMIT_INTERVAL_ADDR);
meric 0:2a01c5a56ed1 1354 c4 = eeprom_read(EEPROM_TYPE, DRY_TRANSMIT_INTERVAL_ADDR);
meric 0:2a01c5a56ed1 1355 c5_a = eeprom_read(EEPROM_TYPE, WATERMETER_COEFF_ADDR_1);
meric 0:2a01c5a56ed1 1356 c5_b = eeprom_read(EEPROM_TYPE, WATERMETER_COEFF_ADDR_2);
meric 0:2a01c5a56ed1 1357 c5 = (c5_a << 8) + c5_b;
meric 0:2a01c5a56ed1 1358 c6 = eeprom_read(EEPROM_TYPE, PMAX_ADDR);
meric 0:2a01c5a56ed1 1359 c7 = eeprom_read(EEPROM_TYPE, PRESSURE_SENSOR_ADDR);
meric 0:2a01c5a56ed1 1360 c8 = eeprom_read(EEPROM_TYPE, DP_ADDR);
meric 0:2a01c5a56ed1 1361 c9 = eeprom_read(EEPROM_TYPE, PRESSURE_CONTROL_FREQUENCY_ADDR);
meric 0:2a01c5a56ed1 1362 c10 = eeprom_read(EEPROM_TYPE, FLUSH_DURATION_ADDR);
meric 0:2a01c5a56ed1 1363 c11 = eeprom_read(EEPROM_TYPE, FLUSH_INTERVAL_ADDR);
meric 0:2a01c5a56ed1 1364 c12 = eeprom_read(EEPROM_TYPE, FLOW_CONTROL_LATENCY_ADDR);
meric 0:2a01c5a56ed1 1365 c13 = eeprom_read(EEPROM_TYPE, FLUSH_ENABLE_ADDR);
meric 0:2a01c5a56ed1 1366 c14 = eeprom_read(EEPROM_TYPE, PR_SENSOR_POSITION_ADDR);
meric 0:2a01c5a56ed1 1367 c15 = eeprom_read(EEPROM_TYPE, BACKFLUSH_STOP_ADDR);
meric 0:2a01c5a56ed1 1368 c16 = eeprom_read(EEPROM_TYPE, INLET_PRS_LOW_TRS_ADDR);
meric 0:2a01c5a56ed1 1369 c17 = eeprom_read(EEPROM_TYPE, INLET_PRS_HIGH_TRS_ADDR);
meric 0:2a01c5a56ed1 1370 c18 = eeprom_read(EEPROM_TYPE, ALARMS_ENABLE_ADDR);
meric 0:2a01c5a56ed1 1371 c19 = eeprom_read(EEPROM_TYPE, DP_HIGH_TRS_ADDR);
meric 0:2a01c5a56ed1 1372 c20 = eeprom_read(EEPROM_TYPE, INLET_PRS_SET_ADDR);
meric 0:2a01c5a56ed1 1373 c21 = eeprom_read(EEPROM_TYPE, OUTLET_PRS_SET_FOR_DP_ADDR);
meric 0:2a01c5a56ed1 1374 c22 = eeprom_read(EEPROM_TYPE, PERIODIC_FLUSH_ADDR);
meric 0:2a01c5a56ed1 1375 c23_a = eeprom_read(EEPROM_TYPE, MIN_FLUSH_INTERVAL_ADDR_1);
meric 0:2a01c5a56ed1 1376 c23_b = eeprom_read(EEPROM_TYPE, MIN_FLUSH_INTERVAL_ADDR_2);
meric 0:2a01c5a56ed1 1377 c23 = (c23_a << 8) + c23_b;
meric 0:2a01c5a56ed1 1378 c24 = eeprom_read(EEPROM_TYPE, FILTER_NUMBER_ADDR);
meric 0:2a01c5a56ed1 1379
meric 0:2a01c5a56ed1 1380 // Kaydedilen değerler ile gönderilen değerleri karşılaştır
meric 0:2a01c5a56ed1 1381 // Aynı ise sunucuya mesaj gönder
meric 0:2a01c5a56ed1 1382 if (c1 == fnode.systemSetup && c2 == fnode.autosendStatus && c3 == fnode.irriTransmitInterval && c4 == fnode.dryTransmitInterval && c5 == fnode.watermeterCoefficient && c6 == fnode.pMax && c7 == fnode.pressureSensorType && c8 == fnode.dpSet && c9 == fnode.pressureControlFrequency && c10 == fnode.flushDuration && c11 == fnode.flushInterval && c12 == fnode.flowControlLatency && c13 == fnode.flushEnabled && c14 == fnode.pressureSensorPosition && c15 == fnode.onErrorStop && c16 == fnode.pressureLowThreshold && c17 == fnode.pressureHighThreshold && c18 == fnode.alarmsEnabled && c19 == fnode.dpThreshold && c20 == fnode.inletPressureSet && c21 == fnode.outletPressureSet && c22 == fnode.periodicFlushInterval && c23 == fnode.minFlushInterval && c24 == fnode.filterNumber) {
meric 0:2a01c5a56ed1 1383
meric 0:2a01c5a56ed1 1384 sprintf(fnode.dataBuffer, "%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%c", "{CMD:\"FSETSYSOK\",C1:", c1, ",C2:", c2, ",C3:", c3, ",C4:", c4, ",C5:", c5, ",C6:", c6, ",C7:", c7, ",C8:", c8, ",C9:", c9, ",C10:", c10, ",C11:", c11, ",C12:", c12, ",C13:", c13, ",C14:", c14, ",C15:", c15, ",C16:", c16, ",C17:", c17, ",C18:", c18, ",C19:", c19, ",C20:", c20, ",C21:", c21, ",C22:", c22, ",C23:", c23, ",C24:", c24, '}');
meric 0:2a01c5a56ed1 1385 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 1386 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 1387
meric 0:2a01c5a56ed1 1388 // YENİ SET Değerlerine göre ayarlar
meric 0:2a01c5a56ed1 1389 // Filtre sayısı
meric 0:2a01c5a56ed1 1390 fnode.filterNumber = c24;
meric 0:2a01c5a56ed1 1391 fnode.lastFlushPhase = ((uint16_t)fnode.filterNumber * 4) + 1;
meric 0:2a01c5a56ed1 1392
meric 0:2a01c5a56ed1 1393 // Sayaç mevcutsa ISR'yi aktifle
meric 0:2a01c5a56ed1 1394 if (fnode.systemSetup & (1 << 3)) {
meric 0:2a01c5a56ed1 1395
meric 0:2a01c5a56ed1 1396 watermeterInterrupt.rise(NULL);
meric 0:2a01c5a56ed1 1397 watermeterInterrupt.rise(&watermeter_isr);
meric 0:2a01c5a56ed1 1398
meric 0:2a01c5a56ed1 1399 } else {
meric 0:2a01c5a56ed1 1400
meric 0:2a01c5a56ed1 1401 watermeterInterrupt.rise(NULL);
meric 0:2a01c5a56ed1 1402 }
meric 0:2a01c5a56ed1 1403
meric 0:2a01c5a56ed1 1404 if (fnode.autosendStatus == 0) {
meric 0:2a01c5a56ed1 1405
meric 0:2a01c5a56ed1 1406 fnode.autosend = false;
meric 0:2a01c5a56ed1 1407
meric 0:2a01c5a56ed1 1408 } else {
meric 0:2a01c5a56ed1 1409
meric 0:2a01c5a56ed1 1410 fnode.autosend = true;
meric 0:2a01c5a56ed1 1411 }
meric 0:2a01c5a56ed1 1412
meric 0:2a01c5a56ed1 1413 // If irrigation phase and autosend is active and new data transmission interval is different than old one attach data transmission ISR again
meric 0:2a01c5a56ed1 1414 if (fnode.irrigation == true && fnode.autosend == true && irriTrsIntOld != fnode.irriTransmitInterval) {
meric 0:2a01c5a56ed1 1415
meric 0:2a01c5a56ed1 1416 dataTransmitTicker.detach();
meric 0:2a01c5a56ed1 1417 dataTransmitTicker.attach(&data_transmit_isr, fnode.irriTransmitInterval * 60);
meric 0:2a01c5a56ed1 1418
meric 0:2a01c5a56ed1 1419 // If not irrigation phase and autosend is active and new data transmission interval is different than old one attach data transmission ISR again
meric 0:2a01c5a56ed1 1420 } else if (fnode.irrigation == false && fnode.autosend == true && dryTrsIntOld != fnode.dryTransmitInterval) {
meric 0:2a01c5a56ed1 1421
meric 0:2a01c5a56ed1 1422 dataTransmitTicker.detach();
meric 0:2a01c5a56ed1 1423 dataTransmitTicker.attach(&data_transmit_isr, fnode.dryTransmitInterval * 60);
meric 0:2a01c5a56ed1 1424
meric 0:2a01c5a56ed1 1425 // If autosend is not active detach data transmission ISR
meric 0:2a01c5a56ed1 1426 } else if (fnode.autosend == false) {
meric 0:2a01c5a56ed1 1427
meric 0:2a01c5a56ed1 1428 dataTransmitTicker.detach();
meric 0:2a01c5a56ed1 1429
meric 0:2a01c5a56ed1 1430 }
meric 0:2a01c5a56ed1 1431
meric 0:2a01c5a56ed1 1432 // periodicFlushInterval değeri 0 ise periyodik yıkama yapılmaz
meric 0:2a01c5a56ed1 1433 if (fnode.periodicFlushInterval == 0) {
meric 0:2a01c5a56ed1 1434
meric 0:2a01c5a56ed1 1435 fnode.periodicFlushEnabled = false;
meric 0:2a01c5a56ed1 1436 periodicFlushTicker.detach();
meric 0:2a01c5a56ed1 1437 fnode.periodicFlushCounter = 0;
meric 0:2a01c5a56ed1 1438
meric 0:2a01c5a56ed1 1439 } else {
meric 0:2a01c5a56ed1 1440
meric 0:2a01c5a56ed1 1441 fnode.periodicFlushEnabled = true;
meric 0:2a01c5a56ed1 1442 fnode.periodicFlushCounter = 0;
meric 0:2a01c5a56ed1 1443
meric 0:2a01c5a56ed1 1444 // Periodic flush isr works every 1 second to increase periodicCounter by 1
meric 0:2a01c5a56ed1 1445 // If periodicCounter value >= peridicFlushInterval * 3600
meric 0:2a01c5a56ed1 1446 // Example:
meric 0:2a01c5a56ed1 1447 // Periodic flush interval is 6 hours
meric 0:2a01c5a56ed1 1448 // Periodic counter counts every 1 seconds by ISR
meric 0:2a01c5a56ed1 1449 // In 1 hour there is 3600 seconds..... In 6 hours 6 * 3600 = 21600 seconds
meric 0:2a01c5a56ed1 1450
meric 0:2a01c5a56ed1 1451 if (fnode.irrigation == true) {
meric 0:2a01c5a56ed1 1452
meric 0:2a01c5a56ed1 1453 periodicFlushTicker.attach(&periodic_flush_isr, 1); // ISR set every 1 second
meric 0:2a01c5a56ed1 1454
meric 0:2a01c5a56ed1 1455 } else {
meric 0:2a01c5a56ed1 1456
meric 0:2a01c5a56ed1 1457 periodicFlushTicker.detach();
meric 0:2a01c5a56ed1 1458
meric 0:2a01c5a56ed1 1459 }
meric 0:2a01c5a56ed1 1460 }
meric 0:2a01c5a56ed1 1461
meric 0:2a01c5a56ed1 1462 // minFlushInterval değeri 0'dan farklı ise DP yıkamaları min süre beklenerek yapılır
meric 0:2a01c5a56ed1 1463 if (fnode.minFlushInterval == 0) {
meric 0:2a01c5a56ed1 1464
meric 0:2a01c5a56ed1 1465 fnode.minFlushEnabled = false;
meric 0:2a01c5a56ed1 1466
meric 0:2a01c5a56ed1 1467 } else {
meric 0:2a01c5a56ed1 1468
meric 0:2a01c5a56ed1 1469 fnode.minFlushEnabled = true;
meric 0:2a01c5a56ed1 1470 }
meric 0:2a01c5a56ed1 1471
meric 0:2a01c5a56ed1 1472 } else {
meric 0:2a01c5a56ed1 1473
meric 0:2a01c5a56ed1 1474 sprintf(fnode.dataBuffer, "%s", "{CMD:\"FSETSYSERR\"}");
meric 0:2a01c5a56ed1 1475 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 1476 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 1477
meric 0:2a01c5a56ed1 1478 }
meric 0:2a01c5a56ed1 1479 }
meric 0:2a01c5a56ed1 1480 break;
meric 0:2a01c5a56ed1 1481
meric 0:2a01c5a56ed1 1482 case FGETCFG: {
meric 0:2a01c5a56ed1 1483
meric 0:2a01c5a56ed1 1484 // Get configuration from EEPROM
meric 0:2a01c5a56ed1 1485 c1 = eeprom_read(EEPROM_TYPE, SYSTEM_SETUP_ADDR);
meric 0:2a01c5a56ed1 1486 c2 = eeprom_read(EEPROM_TYPE, AUTOSEND_STATUS_ADDR);
meric 0:2a01c5a56ed1 1487 c3 = eeprom_read(EEPROM_TYPE, IRRI_TRANSMIT_INTERVAL_ADDR);
meric 0:2a01c5a56ed1 1488 c4 = eeprom_read(EEPROM_TYPE, DRY_TRANSMIT_INTERVAL_ADDR);
meric 0:2a01c5a56ed1 1489 c5_a = eeprom_read(EEPROM_TYPE, WATERMETER_COEFF_ADDR_1);
meric 0:2a01c5a56ed1 1490 c5_b = eeprom_read(EEPROM_TYPE, WATERMETER_COEFF_ADDR_2);
meric 0:2a01c5a56ed1 1491 c5 = (c5_a << 8) + c5_b;
meric 0:2a01c5a56ed1 1492 c6 = eeprom_read(EEPROM_TYPE, PMAX_ADDR);
meric 0:2a01c5a56ed1 1493 c7 = eeprom_read(EEPROM_TYPE, PRESSURE_SENSOR_ADDR);
meric 0:2a01c5a56ed1 1494 c8 = eeprom_read(EEPROM_TYPE, DP_ADDR);
meric 0:2a01c5a56ed1 1495 c9 = eeprom_read(EEPROM_TYPE, PRESSURE_CONTROL_FREQUENCY_ADDR);
meric 0:2a01c5a56ed1 1496 c10 = eeprom_read(EEPROM_TYPE, FLUSH_DURATION_ADDR);
meric 0:2a01c5a56ed1 1497 c11 = eeprom_read(EEPROM_TYPE, FLUSH_INTERVAL_ADDR);
meric 0:2a01c5a56ed1 1498 c12 = eeprom_read(EEPROM_TYPE, FLOW_CONTROL_LATENCY_ADDR);
meric 0:2a01c5a56ed1 1499 c13 = eeprom_read(EEPROM_TYPE, FLUSH_ENABLE_ADDR);
meric 0:2a01c5a56ed1 1500 c14 = eeprom_read(EEPROM_TYPE, PR_SENSOR_POSITION_ADDR);
meric 0:2a01c5a56ed1 1501 c15 = eeprom_read(EEPROM_TYPE, BACKFLUSH_STOP_ADDR);
meric 0:2a01c5a56ed1 1502 c16 = eeprom_read(EEPROM_TYPE, INLET_PRS_LOW_TRS_ADDR);
meric 0:2a01c5a56ed1 1503 c17 = eeprom_read(EEPROM_TYPE, INLET_PRS_HIGH_TRS_ADDR);
meric 0:2a01c5a56ed1 1504 c18 = eeprom_read(EEPROM_TYPE, ALARMS_ENABLE_ADDR);
meric 0:2a01c5a56ed1 1505 c19 = eeprom_read(EEPROM_TYPE, DP_HIGH_TRS_ADDR);
meric 0:2a01c5a56ed1 1506 c20 = eeprom_read(EEPROM_TYPE, INLET_PRS_SET_ADDR);
meric 0:2a01c5a56ed1 1507 c21 = eeprom_read(EEPROM_TYPE, OUTLET_PRS_SET_FOR_DP_ADDR);
meric 0:2a01c5a56ed1 1508 c22 = eeprom_read(EEPROM_TYPE, PERIODIC_FLUSH_ADDR);
meric 0:2a01c5a56ed1 1509 c23_a = eeprom_read(EEPROM_TYPE, MIN_FLUSH_INTERVAL_ADDR_1);
meric 0:2a01c5a56ed1 1510 c23_b = eeprom_read(EEPROM_TYPE, MIN_FLUSH_INTERVAL_ADDR_2);
meric 0:2a01c5a56ed1 1511 c23 = (c23_a << 8) + c23_b;
meric 0:2a01c5a56ed1 1512 c24 = eeprom_read(EEPROM_TYPE, FILTER_NUMBER_ADDR);
meric 0:2a01c5a56ed1 1513
meric 0:2a01c5a56ed1 1514 sprintf(fnode.dataBuffer, "%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%c", "{CMD:\"FGETCFGOK\",C1:", c1, ",C2:", c2, ",C3:", c3, ",C4:", c4, ",C5:", c5, ",C6:", c6, ",C7:", c7, ",C8:", c8, ",C9:", c9, ",C10:", c10, ",C11:", c11, ",C12:", c12, ",C13:", c13, ",C14:", c14, ",C15:", c15, ",C16:", c16, ",C17:", c17, ",C18:", c18, ",C19:", c19, ",C20:", c20, ",C21:", c21, ",C22:", c22, ",C23:", c23, ",C24:", c24, '}');
meric 0:2a01c5a56ed1 1515 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 1516 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 1517
meric 0:2a01c5a56ed1 1518 }
meric 0:2a01c5a56ed1 1519 break;
meric 0:2a01c5a56ed1 1520
meric 0:2a01c5a56ed1 1521 case FSTART: {
meric 0:2a01c5a56ed1 1522
meric 0:2a01c5a56ed1 1523 if (fnode.autosend == false) {
meric 0:2a01c5a56ed1 1524
meric 0:2a01c5a56ed1 1525 fnode.autosend = true;
meric 0:2a01c5a56ed1 1526
meric 0:2a01c5a56ed1 1527 if (fnode.irrigation) {
meric 0:2a01c5a56ed1 1528
meric 0:2a01c5a56ed1 1529 dataTransmitTicker.detach();
meric 0:2a01c5a56ed1 1530 dataTransmitTicker.attach(&data_transmit_isr, fnode.irriTransmitInterval * 60);
meric 0:2a01c5a56ed1 1531
meric 0:2a01c5a56ed1 1532 } else {
meric 0:2a01c5a56ed1 1533
meric 0:2a01c5a56ed1 1534 dataTransmitTicker.detach();
meric 0:2a01c5a56ed1 1535 dataTransmitTicker.attach(&data_transmit_isr, fnode.dryTransmitInterval * 60);
meric 0:2a01c5a56ed1 1536
meric 0:2a01c5a56ed1 1537 }
meric 0:2a01c5a56ed1 1538
meric 0:2a01c5a56ed1 1539 // Save autosend enable status to EEPROM
meric 0:2a01c5a56ed1 1540 eeprom_write(EEPROM_TYPE, AUTOSEND_STATUS_ADDR, 1);
meric 0:2a01c5a56ed1 1541
meric 0:2a01c5a56ed1 1542 sprintf(fnode.dataBuffer, "%s", "{CMD:\"FSTARTOK\"}");
meric 0:2a01c5a56ed1 1543 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 1544 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 1545
meric 0:2a01c5a56ed1 1546 } else {
meric 0:2a01c5a56ed1 1547
meric 0:2a01c5a56ed1 1548 sprintf(fnode.dataBuffer, "%s", "{CMD:\"FSTARTERR\"}");
meric 0:2a01c5a56ed1 1549 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 1550 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 1551
meric 0:2a01c5a56ed1 1552 }
meric 0:2a01c5a56ed1 1553
meric 0:2a01c5a56ed1 1554 }
meric 0:2a01c5a56ed1 1555 break;
meric 0:2a01c5a56ed1 1556
meric 0:2a01c5a56ed1 1557
meric 0:2a01c5a56ed1 1558 case FSTOP: {
meric 0:2a01c5a56ed1 1559
meric 0:2a01c5a56ed1 1560 if (fnode.autosend == true) {
meric 0:2a01c5a56ed1 1561
meric 0:2a01c5a56ed1 1562 fnode.autosend = false;
meric 0:2a01c5a56ed1 1563
meric 0:2a01c5a56ed1 1564 dataTransmitTicker.detach();
meric 0:2a01c5a56ed1 1565
meric 0:2a01c5a56ed1 1566 // Save autosend disable status to EEPROM
meric 0:2a01c5a56ed1 1567 eeprom_write(EEPROM_TYPE, AUTOSEND_STATUS_ADDR, 0);
meric 0:2a01c5a56ed1 1568
meric 0:2a01c5a56ed1 1569 sprintf(fnode.dataBuffer, "%s", "{CMD:\"FSTOPOK\"}");
meric 0:2a01c5a56ed1 1570 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 1571 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 1572
meric 0:2a01c5a56ed1 1573 } else {
meric 0:2a01c5a56ed1 1574
meric 0:2a01c5a56ed1 1575 sprintf(fnode.dataBuffer, "%s", "{CMD:\"FSTOPERR\"}");
meric 0:2a01c5a56ed1 1576 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 1577 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 1578
meric 0:2a01c5a56ed1 1579 }
meric 0:2a01c5a56ed1 1580 }
meric 0:2a01c5a56ed1 1581 break;
meric 0:2a01c5a56ed1 1582
meric 0:2a01c5a56ed1 1583 case FFIX: {
meric 0:2a01c5a56ed1 1584
meric 0:2a01c5a56ed1 1585 if (fnode.errorOccured == true) {
meric 0:2a01c5a56ed1 1586
meric 0:2a01c5a56ed1 1587 fnode.errorOccured = false;
meric 0:2a01c5a56ed1 1588
meric 0:2a01c5a56ed1 1589 sprintf(fnode.dataBuffer, "%s", "{CMD:\"FFIXOK\"}");
meric 0:2a01c5a56ed1 1590 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 1591 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 1592
meric 0:2a01c5a56ed1 1593 } else {
meric 0:2a01c5a56ed1 1594
meric 0:2a01c5a56ed1 1595 sprintf(fnode.dataBuffer, "%s", "{CMD:\"FFIXERR\"}");
meric 0:2a01c5a56ed1 1596 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 1597 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 1598
meric 0:2a01c5a56ed1 1599 }
meric 0:2a01c5a56ed1 1600 }
meric 0:2a01c5a56ed1 1601 break;
meric 0:2a01c5a56ed1 1602
meric 0:2a01c5a56ed1 1603 case FGETSTATUS: {
meric 0:2a01c5a56ed1 1604
meric 0:2a01c5a56ed1 1605 //STAT:"IRR"
meric 0:2a01c5a56ed1 1606 if (fnode.irrigation == true) {
meric 0:2a01c5a56ed1 1607
meric 0:2a01c5a56ed1 1608 sprintf(fnode.dataBuffer, "%s", "{STAT:\"IRR\"}");
meric 0:2a01c5a56ed1 1609 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 1610 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 1611
meric 0:2a01c5a56ed1 1612 //STAT:"DRY"
meric 0:2a01c5a56ed1 1613 } else {
meric 0:2a01c5a56ed1 1614
meric 0:2a01c5a56ed1 1615 sprintf(fnode.dataBuffer, "%s", "{STAT:\"DRY\"}");
meric 0:2a01c5a56ed1 1616 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 1617 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 1618
meric 0:2a01c5a56ed1 1619 }
meric 0:2a01c5a56ed1 1620
meric 0:2a01c5a56ed1 1621 }
meric 0:2a01c5a56ed1 1622 break;
meric 0:2a01c5a56ed1 1623
meric 0:2a01c5a56ed1 1624 case FGETFSTATUS: {
meric 0:2a01c5a56ed1 1625
meric 0:2a01c5a56ed1 1626 // Flushing Now
meric 0:2a01c5a56ed1 1627 if(fnode.flushing) {
meric 0:2a01c5a56ed1 1628 sprintf(fnode.dataBuffer, "%s", "{STAT:\"FLUSHING\"}");
meric 0:2a01c5a56ed1 1629 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 1630 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 1631
meric 0:2a01c5a56ed1 1632 } else {
meric 0:2a01c5a56ed1 1633
meric 0:2a01c5a56ed1 1634 sprintf(fnode.dataBuffer, "%s", "{STAT:\"NOTFLUSHING\"}");
meric 0:2a01c5a56ed1 1635 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 1636 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 1637
meric 0:2a01c5a56ed1 1638 }
meric 0:2a01c5a56ed1 1639 }
meric 0:2a01c5a56ed1 1640 break;
meric 0:2a01c5a56ed1 1641
meric 0:2a01c5a56ed1 1642 case FFGETSTAT: {
meric 0:2a01c5a56ed1 1643
meric 0:2a01c5a56ed1 1644 memset(fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 1645 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1646
meric 0:2a01c5a56ed1 1647 // Filtrasyon JSON headırını yaz
meric 0:2a01c5a56ed1 1648 //sprintf(fnode.temporaryBuffer, "%s", json[0]);
meric 0:2a01c5a56ed1 1649 sprintf(fnode.temporaryBuffer, "%s", "{STAT:{");
meric 0:2a01c5a56ed1 1650 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1651 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1652
meric 0:2a01c5a56ed1 1653 fnode.pressure = read_pressure();
meric 0:2a01c5a56ed1 1654 fnode.dpPressure = read_pressure_dp();
meric 0:2a01c5a56ed1 1655
meric 0:2a01c5a56ed1 1656 // Eğer basınç sensörü filtre girişinde ise basınç ve DP değerine göre giriş ve çıkış basıncını hesapla
meric 0:2a01c5a56ed1 1657 // Giriş basıncı = Okunan basınç
meric 0:2a01c5a56ed1 1658 // Çıkış basıncı = Okunan basınç - Fark basınç
meric 0:2a01c5a56ed1 1659 if (fnode.pressureSensorPosition == 0) {
meric 0:2a01c5a56ed1 1660
meric 0:2a01c5a56ed1 1661 fnode.inletPressure = fnode.pressure;
meric 0:2a01c5a56ed1 1662 fnode.outletPressure = fnode.pressure - fnode.dpPressure;
meric 0:2a01c5a56ed1 1663
meric 0:2a01c5a56ed1 1664 if (fnode.outletPressure < 0) {
meric 0:2a01c5a56ed1 1665
meric 0:2a01c5a56ed1 1666 fnode.outletPressure = 0;
meric 0:2a01c5a56ed1 1667
meric 0:2a01c5a56ed1 1668 }
meric 0:2a01c5a56ed1 1669
meric 0:2a01c5a56ed1 1670 // Eğer basınç sensörü filtre çıkışında ise basınç ve DP değerine göre giriş ve çıkış basıncını hesapla
meric 0:2a01c5a56ed1 1671 // Giriş basıncı = Okunan basınç + Fark basınç
meric 0:2a01c5a56ed1 1672 // Çıkış basıncı = Okunan basınç
meric 0:2a01c5a56ed1 1673 } else {
meric 0:2a01c5a56ed1 1674
meric 0:2a01c5a56ed1 1675 fnode.inletPressure = fnode.pressure + fnode.dpPressure;
meric 0:2a01c5a56ed1 1676 fnode.outletPressure = fnode.pressure;
meric 0:2a01c5a56ed1 1677
meric 0:2a01c5a56ed1 1678 }
meric 0:2a01c5a56ed1 1679
meric 0:2a01c5a56ed1 1680 // Eğer basınç sensörü varsa
meric 0:2a01c5a56ed1 1681 if (fnode.systemSetup & (1 << 1)) {
meric 0:2a01c5a56ed1 1682
meric 0:2a01c5a56ed1 1683 // Basınç sensörü varken DP sensörü de mevcutsa hem giriş hem çıkış basıncını yaz
meric 0:2a01c5a56ed1 1684 if (fnode.systemSetup & (1 << 1)) {
meric 0:2a01c5a56ed1 1685
meric 0:2a01c5a56ed1 1686 sprintf(fnode.temporaryBuffer, "%s%.1f%c%s%.1f%c", jsonHeader[0], fnode.inletPressure, ',', jsonHeader[1], fnode.outletPressure, ',');
meric 0:2a01c5a56ed1 1687 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1688 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1689
meric 0:2a01c5a56ed1 1690 // Basınç sensörü varken DP sensörü yoksa basınç sensörünün pozisyonuna göre giriş veya çıkış basıncını yaz
meric 0:2a01c5a56ed1 1691 } else {
meric 0:2a01c5a56ed1 1692
meric 0:2a01c5a56ed1 1693 // Basınç sensörü girişte ise giriş basıncını yaz, çıkış basıncı NULL olsun
meric 0:2a01c5a56ed1 1694 if (fnode.systemSetup & (1 << 1) && fnode.pressureSensorPosition == 0) {
meric 0:2a01c5a56ed1 1695
meric 0:2a01c5a56ed1 1696 sprintf(fnode.temporaryBuffer, "%s%.1f%c%s%s%c", jsonHeader[0], fnode.inletPressure, ',', jsonHeader[1], "null", ',');
meric 0:2a01c5a56ed1 1697 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1698 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1699
meric 0:2a01c5a56ed1 1700 // Basınç sensörü çıkışta ise çıkış basıncını yaz, giriş basıncı NULL olsun
meric 0:2a01c5a56ed1 1701 } else if (fnode.systemSetup & (1 << 1) && fnode.pressureSensorPosition == 1) {
meric 0:2a01c5a56ed1 1702
meric 0:2a01c5a56ed1 1703 sprintf(fnode.temporaryBuffer, "%s%s%c%s%.1f%c", jsonHeader[0], "null", ',', jsonHeader[1], fnode.outletPressure, ',');
meric 0:2a01c5a56ed1 1704 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1705 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1706
meric 0:2a01c5a56ed1 1707 }
meric 0:2a01c5a56ed1 1708 }
meric 0:2a01c5a56ed1 1709
meric 0:2a01c5a56ed1 1710 // Basınç sensörü yoksa giriş ve çıkış basınç değerleri NULL olsun
meric 0:2a01c5a56ed1 1711 } else {
meric 0:2a01c5a56ed1 1712
meric 0:2a01c5a56ed1 1713 sprintf(fnode.temporaryBuffer, "%s%s%c%s%s%c", jsonHeader[0], "null", ',', jsonHeader[1], "null", ',');
meric 0:2a01c5a56ed1 1714 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1715 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1716 }
meric 0:2a01c5a56ed1 1717
meric 0:2a01c5a56ed1 1718 // Eğer DP sensörü varsa DP verisini ekle
meric 0:2a01c5a56ed1 1719 if (fnode.systemSetup & (1 << 1)) {
meric 0:2a01c5a56ed1 1720
meric 0:2a01c5a56ed1 1721 sprintf(fnode.temporaryBuffer, "%s%.1f", jsonHeader[2], fnode.dpPressure);
meric 0:2a01c5a56ed1 1722 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1723 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1724
meric 0:2a01c5a56ed1 1725 // DP sensörü yoksa DP verisi NULL olsun
meric 0:2a01c5a56ed1 1726 } else {
meric 0:2a01c5a56ed1 1727
meric 0:2a01c5a56ed1 1728 sprintf(fnode.temporaryBuffer, "%s%s", jsonHeader[2], "null");
meric 0:2a01c5a56ed1 1729 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1730 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1731
meric 0:2a01c5a56ed1 1732 }
meric 0:2a01c5a56ed1 1733
meric 0:2a01c5a56ed1 1734
meric 0:2a01c5a56ed1 1735 // Sulama durumu
meric 0:2a01c5a56ed1 1736 if (fnode.irrigation == true) {
meric 0:2a01c5a56ed1 1737
meric 0:2a01c5a56ed1 1738 sprintf(fnode.temporaryBuffer, "%s", ",STAT:\"IRR\"");
meric 0:2a01c5a56ed1 1739 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1740 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1741
meric 0:2a01c5a56ed1 1742 } else {
meric 0:2a01c5a56ed1 1743
meric 0:2a01c5a56ed1 1744 sprintf(fnode.temporaryBuffer, "%s", ",STAT:\"DRY\"");
meric 0:2a01c5a56ed1 1745 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1746 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1747
meric 0:2a01c5a56ed1 1748 }
meric 0:2a01c5a56ed1 1749
meric 0:2a01c5a56ed1 1750 // Yıkama durumu
meric 0:2a01c5a56ed1 1751 if (fnode.flushing == true) {
meric 0:2a01c5a56ed1 1752
meric 0:2a01c5a56ed1 1753 sprintf(fnode.temporaryBuffer, "%s", ",FSTAT:1");
meric 0:2a01c5a56ed1 1754 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1755 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1756
meric 0:2a01c5a56ed1 1757 } else {
meric 0:2a01c5a56ed1 1758
meric 0:2a01c5a56ed1 1759 sprintf(fnode.temporaryBuffer, "%s", ",FSTAT:0");
meric 0:2a01c5a56ed1 1760 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1761 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1762
meric 0:2a01c5a56ed1 1763 }
meric 0:2a01c5a56ed1 1764
meric 0:2a01c5a56ed1 1765 sprintf(fnode.temporaryBuffer, "%s", "},RT:1}");
meric 0:2a01c5a56ed1 1766
meric 0:2a01c5a56ed1 1767 strcat(fnode.dataBuffer, fnode.temporaryBuffer);
meric 0:2a01c5a56ed1 1768 memset (fnode.temporaryBuffer, 0, sizeof(fnode.temporaryBuffer));
meric 0:2a01c5a56ed1 1769
meric 0:2a01c5a56ed1 1770 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 1771 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 1772
meric 0:2a01c5a56ed1 1773 }
meric 0:2a01c5a56ed1 1774 break;
meric 0:2a01c5a56ed1 1775
meric 0:2a01c5a56ed1 1776 // Elle yıkamayı başlat
meric 0:2a01c5a56ed1 1777 case FLUSHNOW: {
meric 0:2a01c5a56ed1 1778
meric 0:2a01c5a56ed1 1779 // Eğer zaten yıkama varsa
meric 0:2a01c5a56ed1 1780 if(fnode.flushing == true) {
meric 0:2a01c5a56ed1 1781
meric 0:2a01c5a56ed1 1782 send_alarm(ALREADY_FLUSHING, fnode.globalFlushingFilter, fnode.currentWorkingSlave);
meric 0:2a01c5a56ed1 1783
meric 0:2a01c5a56ed1 1784 // Yıkama yoksa başla
meric 0:2a01c5a56ed1 1785 } else if (fnode.flushEnabled == 1 && fnode.errorOccured == false) {
meric 0:2a01c5a56ed1 1786
meric 0:2a01c5a56ed1 1787 periodicFlushTicker.detach();
meric 0:2a01c5a56ed1 1788 fnode.periodicFlushCounter = 0;
meric 0:2a01c5a56ed1 1789
meric 0:2a01c5a56ed1 1790 fnode.flushing = true;
meric 0:2a01c5a56ed1 1791 fnode.flushStarted = true;
meric 0:2a01c5a56ed1 1792 fnode.checkDp = false;
meric 0:2a01c5a56ed1 1793
meric 0:2a01c5a56ed1 1794 minFlushTicker.detach();
meric 0:2a01c5a56ed1 1795 fnode.minFlushCounter = 0;
meric 0:2a01c5a56ed1 1796 fnode.isMinTimePassed = false;
meric 0:2a01c5a56ed1 1797
meric 0:2a01c5a56ed1 1798 fnode.globalFlushPhase = 1;
meric 0:2a01c5a56ed1 1799 fnode.currentFlushPhase = 1;
meric 0:2a01c5a56ed1 1800 fnode.globalFlushingFilter = 1;
meric 0:2a01c5a56ed1 1801 fnode.currentFlushingFilter = 1;
meric 0:2a01c5a56ed1 1802 fnode.currentWorkingSlave = 0;
meric 0:2a01c5a56ed1 1803
meric 0:2a01c5a56ed1 1804 send_alarm(BACKFLUSH_MANUAL_STARTED, fnode.globalFlushingFilter, fnode.currentWorkingSlave);
meric 0:2a01c5a56ed1 1805
meric 0:2a01c5a56ed1 1806 } else if (fnode.flushEnabled == 0 && fnode.errorOccured == false) {
meric 0:2a01c5a56ed1 1807
meric 0:2a01c5a56ed1 1808 send_alarm(FLUSH_DISABLED, fnode.globalFlushingFilter, fnode.currentWorkingSlave);
meric 0:2a01c5a56ed1 1809
meric 0:2a01c5a56ed1 1810 }
meric 0:2a01c5a56ed1 1811 }
meric 0:2a01c5a56ed1 1812 break;
meric 0:2a01c5a56ed1 1813 }
meric 0:2a01c5a56ed1 1814 }
meric 0:2a01c5a56ed1 1815
meric 0:2a01c5a56ed1 1816 bool send_command(uint8_t _slaveid, uint8_t _command, uint8_t _filterid)
meric 0:2a01c5a56ed1 1817 {
meric 0:2a01c5a56ed1 1818 bool _ackinit = false;
meric 0:2a01c5a56ed1 1819
meric 0:2a01c5a56ed1 1820 if (_slaveid == MASTER_ID) {
meric 0:2a01c5a56ed1 1821
meric 0:2a01c5a56ed1 1822 if (_command == OPEN_SOLENOID || _command == TEST_OPEN_SOLENOID) {
meric 0:2a01c5a56ed1 1823
meric 0:2a01c5a56ed1 1824 if (open_solenoid(_filterid) == true) {
meric 0:2a01c5a56ed1 1825
meric 0:2a01c5a56ed1 1826 _ackinit = true;
meric 0:2a01c5a56ed1 1827
meric 0:2a01c5a56ed1 1828 }
meric 0:2a01c5a56ed1 1829
meric 0:2a01c5a56ed1 1830 } else if (_command == CLOSE_SOLENOID || _command == TEST_CLOSE_SOLENOID) {
meric 0:2a01c5a56ed1 1831
meric 0:2a01c5a56ed1 1832 if (close_solenoid(_filterid)) {
meric 0:2a01c5a56ed1 1833
meric 0:2a01c5a56ed1 1834 _ackinit = true;
meric 0:2a01c5a56ed1 1835
meric 0:2a01c5a56ed1 1836 }
meric 0:2a01c5a56ed1 1837 }
meric 0:2a01c5a56ed1 1838
meric 0:2a01c5a56ed1 1839 } else {
meric 0:2a01c5a56ed1 1840
meric 0:2a01c5a56ed1 1841 fnode.masterTxBuffer[0] = MASTER_ID;
meric 0:2a01c5a56ed1 1842 fnode.masterTxBuffer[1] = _slaveid;
meric 0:2a01c5a56ed1 1843 fnode.masterTxBuffer[2] = _command;
meric 0:2a01c5a56ed1 1844 fnode.masterTxBuffer[3] = _filterid;
meric 0:2a01c5a56ed1 1845 fnode.masterTxBuffer[4] = 0x0D;
meric 0:2a01c5a56ed1 1846
meric 0:2a01c5a56ed1 1847 for (uint8_t i = 0; i < sizeof(fnode.masterTxBuffer); i++) {
meric 0:2a01c5a56ed1 1848
meric 0:2a01c5a56ed1 1849 for (uint8_t j = 0; j < 3; j++) {
meric 0:2a01c5a56ed1 1850
meric 0:2a01c5a56ed1 1851 if (master.putc(fnode.masterTxBuffer[i]) == fnode.masterTxBuffer[i]) {
meric 0:2a01c5a56ed1 1852
meric 0:2a01c5a56ed1 1853 _ackinit = true;
meric 0:2a01c5a56ed1 1854
meric 0:2a01c5a56ed1 1855 } else {
meric 0:2a01c5a56ed1 1856
meric 0:2a01c5a56ed1 1857 _ackinit = false;
meric 0:2a01c5a56ed1 1858
meric 0:2a01c5a56ed1 1859 }
meric 0:2a01c5a56ed1 1860
meric 0:2a01c5a56ed1 1861 if (_ackinit == true) {
meric 0:2a01c5a56ed1 1862
meric 0:2a01c5a56ed1 1863 break;
meric 0:2a01c5a56ed1 1864
meric 0:2a01c5a56ed1 1865 }
meric 0:2a01c5a56ed1 1866 }
meric 0:2a01c5a56ed1 1867
meric 0:2a01c5a56ed1 1868 if (_ackinit == false) {
meric 0:2a01c5a56ed1 1869
meric 0:2a01c5a56ed1 1870 break;
meric 0:2a01c5a56ed1 1871
meric 0:2a01c5a56ed1 1872 }
meric 0:2a01c5a56ed1 1873 }
meric 0:2a01c5a56ed1 1874
meric 0:2a01c5a56ed1 1875 // Slave'den cevap tamamlanıncaya/gelinceye kadar bekle (ISR ile tamamlanır)
meric 0:2a01c5a56ed1 1876 while (fnode.masterInterruptComplete != true) {}
meric 0:2a01c5a56ed1 1877
meric 0:2a01c5a56ed1 1878 if (fnode.masterInterruptComplete == true) {
meric 0:2a01c5a56ed1 1879
meric 0:2a01c5a56ed1 1880 if (fnode.masterRxBuffer[0] == _OK_) {
meric 0:2a01c5a56ed1 1881
meric 0:2a01c5a56ed1 1882 _ackinit = true;
meric 0:2a01c5a56ed1 1883
meric 0:2a01c5a56ed1 1884 } else {
meric 0:2a01c5a56ed1 1885
meric 0:2a01c5a56ed1 1886 _ackinit = false;
meric 0:2a01c5a56ed1 1887
meric 0:2a01c5a56ed1 1888 }
meric 0:2a01c5a56ed1 1889 }
meric 0:2a01c5a56ed1 1890
meric 0:2a01c5a56ed1 1891
meric 0:2a01c5a56ed1 1892 memset (fnode.masterRxBuffer, 0, sizeof(fnode.masterRxBuffer));
meric 0:2a01c5a56ed1 1893 master.attach(&master_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 1894
meric 0:2a01c5a56ed1 1895 fnode.masterInterruptComplete = false;
meric 0:2a01c5a56ed1 1896 }
meric 0:2a01c5a56ed1 1897
meric 0:2a01c5a56ed1 1898 return _ackinit;
meric 0:2a01c5a56ed1 1899 }
meric 0:2a01c5a56ed1 1900
meric 0:2a01c5a56ed1 1901 // Data aktarım ISR
meric 0:2a01c5a56ed1 1902 void data_transmit_isr()
meric 0:2a01c5a56ed1 1903 {
meric 0:2a01c5a56ed1 1904 fnode.transmitData = true;
meric 0:2a01c5a56ed1 1905 }
meric 0:2a01c5a56ed1 1906
meric 0:2a01c5a56ed1 1907 // RF Rx ISR
meric 0:2a01c5a56ed1 1908 void rf_rx_isr()
meric 0:2a01c5a56ed1 1909 {
meric 0:2a01c5a56ed1 1910 fnode.rfBufferChar = rf.getc();
meric 0:2a01c5a56ed1 1911
meric 0:2a01c5a56ed1 1912 if (fnode.rfBufferChar != '\r') {
meric 0:2a01c5a56ed1 1913
meric 0:2a01c5a56ed1 1914 fnode.rfBuffer[fnode.rfBufferCounter] = fnode.rfBufferChar;
meric 0:2a01c5a56ed1 1915 fnode.rfBufferCounter++;
meric 0:2a01c5a56ed1 1916
meric 0:2a01c5a56ed1 1917 } else if (fnode.rfBufferChar == '\r') {
meric 0:2a01c5a56ed1 1918
meric 0:2a01c5a56ed1 1919 rf.attach(NULL, Serial::RxIrq);
meric 0:2a01c5a56ed1 1920 fnode.rfBufferCounter = 0;
meric 0:2a01c5a56ed1 1921 fnode.rfInterruptComplete = true;
meric 0:2a01c5a56ed1 1922 }
meric 0:2a01c5a56ed1 1923 }
meric 0:2a01c5a56ed1 1924
meric 0:2a01c5a56ed1 1925 void master_rx_isr()
meric 0:2a01c5a56ed1 1926 {
meric 0:2a01c5a56ed1 1927 fnode.masterBufferChar = master.getc();
meric 0:2a01c5a56ed1 1928
meric 0:2a01c5a56ed1 1929 if (fnode.masterBufferChar != '\r') {
meric 0:2a01c5a56ed1 1930
meric 0:2a01c5a56ed1 1931 fnode.masterRxBuffer[fnode.masterBufferCounter] = fnode.masterBufferChar;
meric 0:2a01c5a56ed1 1932 fnode.masterBufferCounter++;
meric 0:2a01c5a56ed1 1933
meric 0:2a01c5a56ed1 1934 } else if (fnode.masterBufferChar == '\r') {
meric 0:2a01c5a56ed1 1935
meric 0:2a01c5a56ed1 1936 master.attach(NULL, Serial::RxIrq);
meric 0:2a01c5a56ed1 1937 fnode.masterBufferCounter = 0;
meric 0:2a01c5a56ed1 1938 fnode.masterInterruptComplete = true;
meric 0:2a01c5a56ed1 1939 }
meric 0:2a01c5a56ed1 1940 }
meric 0:2a01c5a56ed1 1941
meric 0:2a01c5a56ed1 1942 // Sayaç pals ISR
meric 0:2a01c5a56ed1 1943 void watermeter_isr()
meric 0:2a01c5a56ed1 1944 {
meric 0:2a01c5a56ed1 1945 fnode.pulse ++;
meric 0:2a01c5a56ed1 1946 fnode.pulseTransmit ++;
meric 0:2a01c5a56ed1 1947 fnode.pulsePressureCheck ++;
meric 0:2a01c5a56ed1 1948 }
meric 0:2a01c5a56ed1 1949
meric 0:2a01c5a56ed1 1950 // Yıkama fazı değişim ISR
meric 0:2a01c5a56ed1 1951 void flush_phase_isr()
meric 0:2a01c5a56ed1 1952 {
meric 0:2a01c5a56ed1 1953 fnode.flush_isr = true;
meric 0:2a01c5a56ed1 1954 }
meric 0:2a01c5a56ed1 1955
meric 0:2a01c5a56ed1 1956 // Basınç kontrol ISR
meric 0:2a01c5a56ed1 1957 void pressure_check_isr()
meric 0:2a01c5a56ed1 1958 {
meric 0:2a01c5a56ed1 1959 fnode.checkPressure = true;
meric 0:2a01c5a56ed1 1960 }
meric 0:2a01c5a56ed1 1961
meric 0:2a01c5a56ed1 1962 void periodic_flush_isr()
meric 0:2a01c5a56ed1 1963 {
meric 0:2a01c5a56ed1 1964 fnode.periodicFlushCounter ++;
meric 0:2a01c5a56ed1 1965 }
meric 0:2a01c5a56ed1 1966
meric 0:2a01c5a56ed1 1967 void min_flush_interval_isr()
meric 0:2a01c5a56ed1 1968 {
meric 0:2a01c5a56ed1 1969 fnode.minFlushCounter ++;
meric 0:2a01c5a56ed1 1970 }
meric 0:2a01c5a56ed1 1971
meric 0:2a01c5a56ed1 1972 void rt_data_transmit_isr()
meric 0:2a01c5a56ed1 1973 {
meric 0:2a01c5a56ed1 1974 fnode.transmit_rtData = true;
meric 0:2a01c5a56ed1 1975 fnode.rtCounter ++;
meric 0:2a01c5a56ed1 1976 }
meric 0:2a01c5a56ed1 1977 #endif