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 /*
meric 0:2a01c5a56ed1 2 ****************************************************************************
meric 0:2a01c5a56ed1 3 ****************************************************************************
meric 0:2a01c5a56ed1 4 ** DEVINT BİLİŞİM YAZILIM DONANIM TİC. LTD. ŞTİ. TARAFINDAN GELİŞTİRİLMİŞTİR
meric 0:2a01c5a56ed1 5 ** İzmir / TÜRKİYE
meric 0:2a01c5a56ed1 6 **
meric 0:2a01c5a56ed1 7 ** Copyright (C) 2015
meric 0:2a01c5a56ed1 8 ****************************************************************************
meric 0:2a01c5a56ed1 9 ****************************************************************************
meric 0:2a01c5a56ed1 10 */
meric 0:2a01c5a56ed1 11
meric 0:2a01c5a56ed1 12 #include "mbed.h"
meric 0:2a01c5a56ed1 13 #include "define.h"
meric 0:2a01c5a56ed1 14 #include "i2c.h"
meric 0:2a01c5a56ed1 15 #include "function.h"
meric 0:2a01c5a56ed1 16 #include "alerts.h"
meric 0:2a01c5a56ed1 17
meric 0:2a01c5a56ed1 18 int main ()
meric 0:2a01c5a56ed1 19 {
meric 0:2a01c5a56ed1 20 // RF Modül açık
meric 0:2a01c5a56ed1 21 rfPower = 1;
meric 0:2a01c5a56ed1 22 wait_ms(50);
meric 0:2a01c5a56ed1 23
meric 0:2a01c5a56ed1 24 // RF UART: 38400 Kbit, 8 Data Bits, No Parity, 1 Stop Bit
meric 0:2a01c5a56ed1 25 rf.baud(BAUD_SERIAL_RF);
meric 0:2a01c5a56ed1 26 rf.format(8, SerialBase::None, 1);
meric 0:2a01c5a56ed1 27
meric 0:2a01c5a56ed1 28 // MASTER UART: 115200 Kbit, 8 Data Bits, No Parity, 1 Stop Bit
meric 0:2a01c5a56ed1 29 master.baud(BAUD_MASTER);
meric 0:2a01c5a56ed1 30 master.format(8, SerialBase::None, 1);
meric 0:2a01c5a56ed1 31
meric 0:2a01c5a56ed1 32 // UART Rx ISR
meric 0:2a01c5a56ed1 33 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 34
meric 0:2a01c5a56ed1 35 // MASTER Rx ISR
meric 0:2a01c5a56ed1 36 master.attach(&master_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 37
meric 0:2a01c5a56ed1 38 // EEPROM frekansı 100 KHz
meric 0:2a01c5a56ed1 39 i2c.frequency(EEPROM_FREQUENCY);
meric 0:2a01c5a56ed1 40 wait_ms(1500);
meric 0:2a01c5a56ed1 41
meric 0:2a01c5a56ed1 42 // EEPROM'a ilk çalışma için varsayılan konfigürasyonları yaz
meric 0:2a01c5a56ed1 43 configure_eeprom_default_values();
meric 0:2a01c5a56ed1 44
meric 0:2a01c5a56ed1 45 // EEPROM'dan konfigürasyonu oku
meric 0:2a01c5a56ed1 46 init_node();
meric 0:2a01c5a56ed1 47
meric 0:2a01c5a56ed1 48 // PCF pinleri LOW
meric 0:2a01c5a56ed1 49 io_send(fnode.filterByte_1, fnode.filterByte_2);
meric 0:2a01c5a56ed1 50 wait_ms(1500);
meric 0:2a01c5a56ed1 51
meric 0:2a01c5a56ed1 52 check_and_close_valves();
meric 0:2a01c5a56ed1 53
meric 0:2a01c5a56ed1 54 while(1) {
meric 0:2a01c5a56ed1 55
meric 0:2a01c5a56ed1 56
meric 0:2a01c5a56ed1 57 if (fnode.flush_isr == true) {
meric 0:2a01c5a56ed1 58
meric 0:2a01c5a56ed1 59 fnode.flush_isr = false;
meric 0:2a01c5a56ed1 60
meric 0:2a01c5a56ed1 61 if (fnode.globalFlushPhase != fnode.lastFlushPhase) {
meric 0:2a01c5a56ed1 62
meric 0:2a01c5a56ed1 63 fnode.globalFlushPhase ++;
meric 0:2a01c5a56ed1 64 fnode.currentFlushPhase ++;
meric 0:2a01c5a56ed1 65
meric 0:2a01c5a56ed1 66 if (fnode.currentFlushPhase > 4) {
meric 0:2a01c5a56ed1 67
meric 0:2a01c5a56ed1 68 fnode.globalFlushingFilter ++;
meric 0:2a01c5a56ed1 69 fnode.currentFlushingFilter ++;
meric 0:2a01c5a56ed1 70
meric 0:2a01c5a56ed1 71 fnode.currentFlushPhase = 1;
meric 0:2a01c5a56ed1 72 }
meric 0:2a01c5a56ed1 73
meric 0:2a01c5a56ed1 74 if (fnode.currentFlushingFilter > 4) {
meric 0:2a01c5a56ed1 75
meric 0:2a01c5a56ed1 76 fnode.currentWorkingSlave ++;
meric 0:2a01c5a56ed1 77 fnode.currentFlushingFilter = 1;
meric 0:2a01c5a56ed1 78
meric 0:2a01c5a56ed1 79 }
meric 0:2a01c5a56ed1 80 }
meric 0:2a01c5a56ed1 81
meric 0:2a01c5a56ed1 82 fnode.flushStarted = true;
meric 0:2a01c5a56ed1 83 }
meric 0:2a01c5a56ed1 84
meric 0:2a01c5a56ed1 85 // 30 sn aralıkla 10 kez veri gönderim koşulu oluşmuşsa
meric 0:2a01c5a56ed1 86 if (fnode.transmit_rtData == true) {
meric 0:2a01c5a56ed1 87
meric 0:2a01c5a56ed1 88 if (fnode.irrigation == true) {
meric 0:2a01c5a56ed1 89
meric 0:2a01c5a56ed1 90 fnode.rWIC = 0;
meric 0:2a01c5a56ed1 91 fnode.rWI = (fnode.rtPulseFirst - fnode.pulse) * fnode.watermeterCoefficient;
meric 0:2a01c5a56ed1 92 fnode.rQI = (float)fnode.rWI / (float)RT_DATA_TRANSMIT_INTERVAL;
meric 0:2a01c5a56ed1 93 fnode.rtPulseFirst = fnode.pulse;
meric 0:2a01c5a56ed1 94
meric 0:2a01c5a56ed1 95 } else {
meric 0:2a01c5a56ed1 96
meric 0:2a01c5a56ed1 97 fnode.rWDC = 0;
meric 0:2a01c5a56ed1 98 fnode.rWD = (fnode.rtPulseFirst - fnode.pulse) * fnode.watermeterCoefficient;
meric 0:2a01c5a56ed1 99 fnode.rQD = (float)fnode.rWD / (float)RT_DATA_TRANSMIT_INTERVAL;
meric 0:2a01c5a56ed1 100 fnode.rtPulseFirst = fnode.pulse;
meric 0:2a01c5a56ed1 101
meric 0:2a01c5a56ed1 102 }
meric 0:2a01c5a56ed1 103
meric 0:2a01c5a56ed1 104 fnode.transmit_rtData = false;
meric 0:2a01c5a56ed1 105
meric 0:2a01c5a56ed1 106 prepare_data_fread();
meric 0:2a01c5a56ed1 107
meric 0:2a01c5a56ed1 108 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 109 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 110
meric 0:2a01c5a56ed1 111 if (fnode.rtCounter >= 10) {
meric 0:2a01c5a56ed1 112 rtDataTransmitTicker.detach();
meric 0:2a01c5a56ed1 113 fnode.rtCounter = 0;
meric 0:2a01c5a56ed1 114 fnode.rtActive = false;
meric 0:2a01c5a56ed1 115 fnode.rtPulseFirst = 0;
meric 0:2a01c5a56ed1 116
meric 0:2a01c5a56ed1 117 send_to_coordinator("{CMD:\"FRTOFFOK\"}");
meric 0:2a01c5a56ed1 118 memset(fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 119 wait_ms(50);
meric 0:2a01c5a56ed1 120 }
meric 0:2a01c5a56ed1 121 }
meric 0:2a01c5a56ed1 122
meric 0:2a01c5a56ed1 123 // Otomatik veri aktarım koşulu oluşmuşsa
meric 0:2a01c5a56ed1 124 if (fnode.transmitData == true) {
meric 0:2a01c5a56ed1 125
meric 0:2a01c5a56ed1 126 fnode.transmitData = false;
meric 0:2a01c5a56ed1 127
meric 0:2a01c5a56ed1 128 if (fnode.irrigation == true) {
meric 0:2a01c5a56ed1 129
meric 0:2a01c5a56ed1 130 fnode.WIC = fnode.pulse * fnode.watermeterCoefficient;
meric 0:2a01c5a56ed1 131 fnode.WI = fnode.pulseTransmit * fnode.watermeterCoefficient;
meric 0:2a01c5a56ed1 132 fnode.QI = (float)fnode.WI / timer.read();
meric 0:2a01c5a56ed1 133
meric 0:2a01c5a56ed1 134 } else {
meric 0:2a01c5a56ed1 135
meric 0:2a01c5a56ed1 136 fnode.WDC = fnode.pulse * fnode.watermeterCoefficient;
meric 0:2a01c5a56ed1 137 fnode.WD = fnode.pulseTransmit * fnode.watermeterCoefficient;
meric 0:2a01c5a56ed1 138 fnode.QD = (float)fnode.WD / timer.read();
meric 0:2a01c5a56ed1 139
meric 0:2a01c5a56ed1 140 }
meric 0:2a01c5a56ed1 141
meric 0:2a01c5a56ed1 142 fnode.pulseTransmit = 0;
meric 0:2a01c5a56ed1 143
meric 0:2a01c5a56ed1 144 timer.reset();
meric 0:2a01c5a56ed1 145
meric 0:2a01c5a56ed1 146 prepare_data();
meric 0:2a01c5a56ed1 147
meric 0:2a01c5a56ed1 148 // Otomatik veri aktarımı açıksa veriyi gönder
meric 0:2a01c5a56ed1 149 if (fnode.autosend == true) {
meric 0:2a01c5a56ed1 150 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 151 }
meric 0:2a01c5a56ed1 152
meric 0:2a01c5a56ed1 153 memset(fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 154 }
meric 0:2a01c5a56ed1 155
meric 0:2a01c5a56ed1 156 // İki DP yıkaması arasında min bekleme süresinin hesaplanması
meric 0:2a01c5a56ed1 157 if (fnode.minFlushEnabled == true && (fnode.minFlushCounter >= fnode.minFlushInterval * 60)) {
meric 0:2a01c5a56ed1 158
meric 0:2a01c5a56ed1 159 minFlushTicker.detach();
meric 0:2a01c5a56ed1 160 fnode.isMinTimePassed = true;
meric 0:2a01c5a56ed1 161 fnode.minFlushCounter = 0;
meric 0:2a01c5a56ed1 162 }
meric 0:2a01c5a56ed1 163
meric 0:2a01c5a56ed1 164 // PERIYODIK YIKAMA
meric 0:2a01c5a56ed1 165 // Filtrasyon nodunda ters yıkamalara izin verilmişse && şu an ters yıkama yoksa (manual ya da DP ile aktiflenmiş) && sulama varsa && önceden hata oluşmamışsa && periyodik yıkamanın kullanımı aktif edilmişse
meric 0:2a01c5a56ed1 166 //if (fnode.flushEnabled == 1 && fnode.flushing == false && fnode.irrigation == true && fnode.errorOccured == false && fnode.periodicFlushEnabled == true) {
meric 0:2a01c5a56ed1 167 if (fnode.flushEnabled == 1 && fnode.flushing == false && fnode.errorOccured == false && fnode.periodicFlushEnabled == true) {
meric 0:2a01c5a56ed1 168
meric 0:2a01c5a56ed1 169 // Periyodik sayaç periyot değerine ulaşmışsa yıkamayı başlat
meric 0:2a01c5a56ed1 170 if (fnode.periodicFlushCounter >= fnode.periodicFlushInterval * 60 * 60) {
meric 0:2a01c5a56ed1 171
meric 0:2a01c5a56ed1 172 // Periyot zamanlayıcısını iptal et ve periyot sayaç değerini sıfırla
meric 0:2a01c5a56ed1 173 periodicFlushTicker.detach();
meric 0:2a01c5a56ed1 174 fnode.periodicFlushCounter = 0;
meric 0:2a01c5a56ed1 175
meric 0:2a01c5a56ed1 176 // Yıkama zamanlayıcısını iptal et ve minimum zaman sayacını sıfırla
meric 0:2a01c5a56ed1 177 minFlushTicker.detach();
meric 0:2a01c5a56ed1 178 //fnode.isMinTimePassed = true;
meric 0:2a01c5a56ed1 179 fnode.minFlushCounter = 0;
meric 0:2a01c5a56ed1 180
meric 0:2a01c5a56ed1 181 // Şu an periyodik yıkama yapılıyor koşuluna geç
meric 0:2a01c5a56ed1 182 fnode.flushing = true;
meric 0:2a01c5a56ed1 183
meric 0:2a01c5a56ed1 184 fnode.checkDp = false;
meric 0:2a01c5a56ed1 185 fnode.flushStarted = true;
meric 0:2a01c5a56ed1 186
meric 0:2a01c5a56ed1 187 // Yıkama fazı 1
meric 0:2a01c5a56ed1 188 fnode.globalFlushPhase = 1;
meric 0:2a01c5a56ed1 189 fnode.currentFlushPhase = 1;
meric 0:2a01c5a56ed1 190 fnode.globalFlushingFilter = 1;
meric 0:2a01c5a56ed1 191 fnode.currentFlushingFilter = 1;
meric 0:2a01c5a56ed1 192 fnode.currentWorkingSlave = 0;
meric 0:2a01c5a56ed1 193
meric 0:2a01c5a56ed1 194 send_alarm(BACKFLUSH_PERIODIC_STARTED, fnode.globalFlushingFilter, fnode.currentWorkingSlave);
meric 0:2a01c5a56ed1 195 }
meric 0:2a01c5a56ed1 196 }
meric 0:2a01c5a56ed1 197
meric 0:2a01c5a56ed1 198 if (fnode.checkPressure == true) {
meric 0:2a01c5a56ed1 199
meric 0:2a01c5a56ed1 200 fnode.checkPressure = false;
meric 0:2a01c5a56ed1 201
meric 0:2a01c5a56ed1 202 fnode.pressure = read_pressure();
meric 0:2a01c5a56ed1 203 fnode.dpPressure = read_pressure_dp();
meric 0:2a01c5a56ed1 204
meric 0:2a01c5a56ed1 205 // 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 206 // Giriş basıncı = Okunan basınç
meric 0:2a01c5a56ed1 207 // Çıkış basıncı = Okunan basınç - Fark basınç
meric 0:2a01c5a56ed1 208 if (fnode.pressureSensorPosition == 0) {
meric 0:2a01c5a56ed1 209
meric 0:2a01c5a56ed1 210 fnode.inletPressure = fnode.pressure;
meric 0:2a01c5a56ed1 211 fnode.outletPressure = fnode.pressure - fnode.dpPressure;
meric 0:2a01c5a56ed1 212
meric 0:2a01c5a56ed1 213 if (fnode.outletPressure < 0) {
meric 0:2a01c5a56ed1 214
meric 0:2a01c5a56ed1 215 fnode.outletPressure = 0;
meric 0:2a01c5a56ed1 216
meric 0:2a01c5a56ed1 217 }
meric 0:2a01c5a56ed1 218
meric 0:2a01c5a56ed1 219 // 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 220 // Giriş basıncı = Okunan basınç + Fark basınç
meric 0:2a01c5a56ed1 221 // Çıkış basıncı = Okunan basınç
meric 0:2a01c5a56ed1 222 } else {
meric 0:2a01c5a56ed1 223
meric 0:2a01c5a56ed1 224 fnode.inletPressure = fnode.pressure + fnode.dpPressure;
meric 0:2a01c5a56ed1 225 fnode.outletPressure = fnode.pressure;
meric 0:2a01c5a56ed1 226
meric 0:2a01c5a56ed1 227 }
meric 0:2a01c5a56ed1 228
meric 0:2a01c5a56ed1 229 // Eğer alarmlar aktifse ve giriş basıncı set edilen alt alarm eşik değerinin altında ise ve alarm daha önce gönderilmemişse alarm gönder
meric 0:2a01c5a56ed1 230 // Alarm gönderme işlemi alarm bölgesi değiştiğinde tekrar devreye girer
meric 0:2a01c5a56ed1 231 if (fnode.alarmsEnabled == 1) {
meric 0:2a01c5a56ed1 232
meric 0:2a01c5a56ed1 233 if (fnode.inletPressure < (float)fnode.pressureLowThreshold / 10.0f && fnode.pressureLowError == false) {
meric 0:2a01c5a56ed1 234
meric 0:2a01c5a56ed1 235 fnode.pressureLowError = true;
meric 0:2a01c5a56ed1 236 fnode.pressureNormalError = false;
meric 0:2a01c5a56ed1 237 fnode.pressureHighError = false;
meric 0:2a01c5a56ed1 238
meric 0:2a01c5a56ed1 239 // Düşük
meric 0:2a01c5a56ed1 240 send_alarm(INLET_LOW_PRESSURE, fnode.globalFlushingFilter, fnode.currentWorkingSlave);
meric 0:2a01c5a56ed1 241
meric 0:2a01c5a56ed1 242 // Eğer giriş basıncı set edilen güvenli bölge içinde ise alarm gönder
meric 0:2a01c5a56ed1 243 } else if (fnode.inletPressure >= (float)fnode.pressureLowThreshold / 10.0f && fnode.inletPressure <= (float)fnode.pressureHighThreshold / 10.0f && fnode.pressureNormalError == false) {
meric 0:2a01c5a56ed1 244
meric 0:2a01c5a56ed1 245 fnode.pressureLowError = false;
meric 0:2a01c5a56ed1 246 fnode.pressureNormalError = true;
meric 0:2a01c5a56ed1 247 fnode.pressureHighError = false;
meric 0:2a01c5a56ed1 248
meric 0:2a01c5a56ed1 249 // Normal
meric 0:2a01c5a56ed1 250 send_alarm(INLET_NORMAL_PRESSURE, fnode.globalFlushingFilter, fnode.currentWorkingSlave);
meric 0:2a01c5a56ed1 251
meric 0:2a01c5a56ed1 252 // Eğer giriş basıncı set edilen üst alarm eşik değerinin üstünde ise alarm gönder
meric 0:2a01c5a56ed1 253 } else if (fnode.inletPressure > (float)fnode.pressureHighThreshold / 10.0f && fnode.pressureHighError == false) {
meric 0:2a01c5a56ed1 254
meric 0:2a01c5a56ed1 255 fnode.pressureLowError = false;
meric 0:2a01c5a56ed1 256 fnode.pressureNormalError = false;
meric 0:2a01c5a56ed1 257 fnode.pressureHighError = true;
meric 0:2a01c5a56ed1 258
meric 0:2a01c5a56ed1 259 // Yüksek
meric 0:2a01c5a56ed1 260 send_alarm(INLET_HIGH_PRESSURE, fnode.globalFlushingFilter, fnode.currentWorkingSlave);
meric 0:2a01c5a56ed1 261
meric 0:2a01c5a56ed1 262 }
meric 0:2a01c5a56ed1 263 }
meric 0:2a01c5a56ed1 264
meric 0:2a01c5a56ed1 265 // Giriş basıncı set edilen değerin altında ise sulamanın bittiği kabul edilir
meric 0:2a01c5a56ed1 266 // SULAMA DIŞI
meric 0:2a01c5a56ed1 267 if (fnode.inletPressure < (float)fnode.inletPressureSet / 10.0f) {
meric 0:2a01c5a56ed1 268
meric 0:2a01c5a56ed1 269 // Giriş basıncı set edilen değerden düşükse önce son kez data gönderilir, sonrasında sulama bitti (filtrasyondan su geçişi durdu) alarmı gönderilir
meric 0:2a01c5a56ed1 270 if (fnode.irrigation == true) {
meric 0:2a01c5a56ed1 271
meric 0:2a01c5a56ed1 272 fnode.irrigation = false;
meric 0:2a01c5a56ed1 273
meric 0:2a01c5a56ed1 274 dataTransmitTicker.detach();
meric 0:2a01c5a56ed1 275
meric 0:2a01c5a56ed1 276 // Sulama bitince periyodik sayıcıyı durdur ancak counterı sıfırlama (Pause)
meric 0:2a01c5a56ed1 277 // Sulama başlayınca saymaya devam edecek
meric 0:2a01c5a56ed1 278 periodicFlushTicker.detach();
meric 0:2a01c5a56ed1 279
meric 0:2a01c5a56ed1 280 // Min yıkama aralığını durdur
meric 0:2a01c5a56ed1 281 minFlushTicker.detach();
meric 0:2a01c5a56ed1 282 fnode.minFlushCounter = 0;
meric 0:2a01c5a56ed1 283
meric 0:2a01c5a56ed1 284 // Sulama bitince sulama sırasında geçen su miktarlarını ve debiyi hesapla
meric 0:2a01c5a56ed1 285 fnode.WI = fnode.pulseTransmit * fnode.watermeterCoefficient;
meric 0:2a01c5a56ed1 286 fnode.WIC = fnode.pulse * fnode.watermeterCoefficient;
meric 0:2a01c5a56ed1 287 fnode.QI = (float)fnode.WI / timer.read();
meric 0:2a01c5a56ed1 288
meric 0:2a01c5a56ed1 289 // Sulama dışı değişkenleri sıfırla
meric 0:2a01c5a56ed1 290 fnode.WD = 0;
meric 0:2a01c5a56ed1 291 fnode.WDC = 0;
meric 0:2a01c5a56ed1 292 fnode.QD = 0;
meric 0:2a01c5a56ed1 293
meric 0:2a01c5a56ed1 294 // Basınç alarmlarını sıfırla
meric 0:2a01c5a56ed1 295 fnode.pressureLowError = false;
meric 0:2a01c5a56ed1 296 fnode.pressureNormalError = false;
meric 0:2a01c5a56ed1 297 fnode.pressureHighError = false;
meric 0:2a01c5a56ed1 298
meric 0:2a01c5a56ed1 299 // Timerı resetle
meric 0:2a01c5a56ed1 300 timer.reset();
meric 0:2a01c5a56ed1 301
meric 0:2a01c5a56ed1 302 // Pals sayaç ISR değişkenlerini sıfırla
meric 0:2a01c5a56ed1 303 fnode.pulse = 0;
meric 0:2a01c5a56ed1 304 fnode.pulseTransmit = 0;
meric 0:2a01c5a56ed1 305 fnode.pulsePressureCheck = 0;
meric 0:2a01c5a56ed1 306
meric 0:2a01c5a56ed1 307 // SULAMA BİTTİĞİNDE SON KEZ DATA GÖNDER !!!
meric 0:2a01c5a56ed1 308 prepare_data();
meric 0:2a01c5a56ed1 309 if (fnode.autosend == true) {
meric 0:2a01c5a56ed1 310 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 311 }
meric 0:2a01c5a56ed1 312 memset(fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 313
meric 0:2a01c5a56ed1 314 // SULAMANIN BİTTİĞİNİ BELİRTEN ALARMI GÖNDER !!!
meric 0:2a01c5a56ed1 315 send_alarm(IRRIGATION_ENDED, fnode.globalFlushingFilter, fnode.currentWorkingSlave);
meric 0:2a01c5a56ed1 316
meric 0:2a01c5a56ed1 317 // Sulama sırasında geçen su miktarını sıfırla
meric 0:2a01c5a56ed1 318 fnode.WIC = 0;
meric 0:2a01c5a56ed1 319 fnode.WI = 0;
meric 0:2a01c5a56ed1 320 fnode.QI = 0;
meric 0:2a01c5a56ed1 321
meric 0:2a01c5a56ed1 322 // Veri aktarım aralığını sulama dışı sıklığa ayarla
meric 0:2a01c5a56ed1 323 dataTransmitTicker.attach(&data_transmit_isr, fnode.dryTransmitInterval * 60);
meric 0:2a01c5a56ed1 324
meric 0:2a01c5a56ed1 325 // Sulamanın bittiğini EEPROM'a yaz
meric 0:2a01c5a56ed1 326 eeprom_write(EEPROM_TYPE, IRRI_STATUS_ADDR, 0);
meric 0:2a01c5a56ed1 327
meric 0:2a01c5a56ed1 328 }
meric 0:2a01c5a56ed1 329
meric 0:2a01c5a56ed1 330 // Giriş basıncı set değerinin üzerine çıktığında filtrasyon aktive olur. (Kendi başına çalışma koşulu)
meric 0:2a01c5a56ed1 331 // Bu durumda çıkış basıncının set edilen değere ulaşıp ulaşmadığına bakılır
meric 0:2a01c5a56ed1 332 //(SULAMA)
meric 0:2a01c5a56ed1 333 } else if (fnode.inletPressure >= (float)fnode.inletPressureSet / 10.0f) {
meric 0:2a01c5a56ed1 334
meric 0:2a01c5a56ed1 335 // Giriş basıncı set edilen değerden yüksekse sulama başladı (filtrasyondan su geçişi var) alarmı gönderilir
meric 0:2a01c5a56ed1 336 if (fnode.irrigation == false) {
meric 0:2a01c5a56ed1 337
meric 0:2a01c5a56ed1 338 fnode.irrigation = true;
meric 0:2a01c5a56ed1 339
meric 0:2a01c5a56ed1 340 dataTransmitTicker.detach();
meric 0:2a01c5a56ed1 341
meric 0:2a01c5a56ed1 342 fnode.WDC = fnode.pulse * fnode.watermeterCoefficient;
meric 0:2a01c5a56ed1 343 fnode.WD = fnode.pulseTransmit * fnode.watermeterCoefficient;
meric 0:2a01c5a56ed1 344 fnode.QD = (float)fnode.WD / timer.read();
meric 0:2a01c5a56ed1 345
meric 0:2a01c5a56ed1 346 timer.reset();
meric 0:2a01c5a56ed1 347
meric 0:2a01c5a56ed1 348 fnode.pulse = 0;
meric 0:2a01c5a56ed1 349 fnode.pulseTransmit = 0;
meric 0:2a01c5a56ed1 350 fnode.pulsePressureCheck = 0;
meric 0:2a01c5a56ed1 351
meric 0:2a01c5a56ed1 352 fnode.WI = 0;
meric 0:2a01c5a56ed1 353 fnode.WIC = 0;
meric 0:2a01c5a56ed1 354 fnode.QI = 0;
meric 0:2a01c5a56ed1 355
meric 0:2a01c5a56ed1 356 // Basınç alarmlarını sıfırla
meric 0:2a01c5a56ed1 357 fnode.pressureLowError = false;
meric 0:2a01c5a56ed1 358 fnode.pressureNormalError = false;
meric 0:2a01c5a56ed1 359 fnode.pressureHighError = false;
meric 0:2a01c5a56ed1 360
meric 0:2a01c5a56ed1 361 // Veri aktarım aralığını sulama sıklığına ayarla
meric 0:2a01c5a56ed1 362 dataTransmitTicker.attach(&data_transmit_isr, fnode.irriTransmitInterval * 60);
meric 0:2a01c5a56ed1 363
meric 0:2a01c5a56ed1 364 //Sulama başlayınca ilk sulama verisini gönder
meric 0:2a01c5a56ed1 365 prepare_data();
meric 0:2a01c5a56ed1 366 if (fnode.autosend == true) {
meric 0:2a01c5a56ed1 367 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 368 }
meric 0:2a01c5a56ed1 369 memset(fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 370
meric 0:2a01c5a56ed1 371 // Sulama başlayınca sulama başladı alarmını gönder
meric 0:2a01c5a56ed1 372 send_alarm(IRRIGATION_STARTED, fnode.globalFlushingFilter, fnode.currentWorkingSlave);
meric 0:2a01c5a56ed1 373
meric 0:2a01c5a56ed1 374 fnode.WD = 0;
meric 0:2a01c5a56ed1 375 fnode.WDC = 0;
meric 0:2a01c5a56ed1 376 fnode.QD = 0;
meric 0:2a01c5a56ed1 377
meric 0:2a01c5a56ed1 378 // Periyodik yıkama süresini yeniden başlat
meric 0:2a01c5a56ed1 379 fnode.periodicFirstStartCounter ++;
meric 0:2a01c5a56ed1 380
meric 0:2a01c5a56ed1 381 if (fnode.periodicFirstStartCounter == 1) {
meric 0:2a01c5a56ed1 382
meric 0:2a01c5a56ed1 383 periodicFlushTicker.attach(&periodic_flush_isr, 1);
meric 0:2a01c5a56ed1 384 fnode.periodicFlushCounter = 0;
meric 0:2a01c5a56ed1 385
meric 0:2a01c5a56ed1 386 } else if (fnode.periodicFirstStartCounter > 1) {
meric 0:2a01c5a56ed1 387
meric 0:2a01c5a56ed1 388 fnode.periodicFirstStartCounter = 2;
meric 0:2a01c5a56ed1 389
meric 0:2a01c5a56ed1 390 if (fnode.periodicFlushCounter >= fnode.periodicFlushInterval * 60 * 60) {
meric 0:2a01c5a56ed1 391
meric 0:2a01c5a56ed1 392 fnode.periodicFlushCounter = 0;
meric 0:2a01c5a56ed1 393 periodicFlushTicker.attach(&periodic_flush_isr, 1);
meric 0:2a01c5a56ed1 394
meric 0:2a01c5a56ed1 395 } else {
meric 0:2a01c5a56ed1 396
meric 0:2a01c5a56ed1 397 periodicFlushTicker.attach(&periodic_flush_isr, 1);
meric 0:2a01c5a56ed1 398
meric 0:2a01c5a56ed1 399 }
meric 0:2a01c5a56ed1 400 }
meric 0:2a01c5a56ed1 401
meric 0:2a01c5a56ed1 402 // Min yıkama aralığını yeniden başlat
meric 0:2a01c5a56ed1 403 fnode.minFlushCounter = 0;
meric 0:2a01c5a56ed1 404
meric 0:2a01c5a56ed1 405 // Sulamanın başladığını EEPROM'a yaz
meric 0:2a01c5a56ed1 406 eeprom_write(EEPROM_TYPE, IRRI_STATUS_ADDR, 1);
meric 0:2a01c5a56ed1 407
meric 0:2a01c5a56ed1 408 }
meric 0:2a01c5a56ed1 409
meric 0:2a01c5a56ed1 410 // Sulama yapılıyorsa ve sayaç mevcutsa geçen su miktarlarını sulama süresince her basınç kontrolü yapıldığında hesapla
meric 0:2a01c5a56ed1 411 if ((fnode.systemSetup >> 3) & 1) {
meric 0:2a01c5a56ed1 412
meric 0:2a01c5a56ed1 413 fnode.WIC = fnode.pulse * fnode.watermeterCoefficient;
meric 0:2a01c5a56ed1 414 fnode.WI = fnode.pulsePressureCheck * fnode.watermeterCoefficient;
meric 0:2a01c5a56ed1 415 fnode.QI = (float)fnode.WI / (float)fnode.pressureControlFrequency;
meric 0:2a01c5a56ed1 416
meric 0:2a01c5a56ed1 417 fnode.pulsePressureCheck = 0;
meric 0:2a01c5a56ed1 418
meric 0:2a01c5a56ed1 419 }
meric 0:2a01c5a56ed1 420
meric 0:2a01c5a56ed1 421 // Eğer çıkış basıncı set edilen değere ulaşmışsa DP de kontrol edilir (Çıkış basıncı stabil durumda, DP kontrolü başlayacak). Ancak o an periyodik yıkama veya elle yıkama olmamaması ve ters yıkamanın kapatılmamaış olması ve iki yıkama arasındaki min sürenin geçmiş olması gerekir.
meric 0:2a01c5a56ed1 422 if ((fnode.outletPressure >= (float)fnode.outletPressureSet / 10.0f) && fnode.flushing == false && fnode.flushEnabled == 1 && fnode.isMinTimePassed == true) {
meric 0:2a01c5a56ed1 423
meric 0:2a01c5a56ed1 424 if (fnode.dpControlStarted == false) {
meric 0:2a01c5a56ed1 425
meric 0:2a01c5a56ed1 426 fnode.dpControlStarted = true;
meric 0:2a01c5a56ed1 427
meric 0:2a01c5a56ed1 428 fnode.globalFlushPhase = 1;
meric 0:2a01c5a56ed1 429 fnode.currentFlushPhase = 1;
meric 0:2a01c5a56ed1 430 fnode.globalFlushingFilter = 1;
meric 0:2a01c5a56ed1 431 fnode.currentFlushingFilter = 1;
meric 0:2a01c5a56ed1 432 fnode.currentWorkingSlave = 0;
meric 0:2a01c5a56ed1 433
meric 0:2a01c5a56ed1 434 send_alarm(DP_CONTROL_STARTED, fnode.globalFlushingFilter, fnode.currentWorkingSlave);
meric 0:2a01c5a56ed1 435
meric 0:2a01c5a56ed1 436 }
meric 0:2a01c5a56ed1 437
meric 0:2a01c5a56ed1 438 // DP set edilen değerden yüksekse ve hata durumu yoksa ve ters yıkama aktiflenmişse ve o an yıkama yapılmıyorsa ve min bekleme zamanı geçmişse ters yıkamayı başlat
meric 0:2a01c5a56ed1 439 if (fnode.dpPressure >= (float)(fnode.dpSet / 10.0f) && fnode.checkDp == true && fnode.errorOccured == false && fnode.flushEnabled == 1 && fnode.flushing == false && fnode.isMinTimePassed == true) {
meric 0:2a01c5a56ed1 440
meric 0:2a01c5a56ed1 441 // Periyodik yıkama ISR'sini durdur ve sayacı sıfırla
meric 0:2a01c5a56ed1 442 periodicFlushTicker.detach();
meric 0:2a01c5a56ed1 443 fnode.periodicFlushCounter = 0;
meric 0:2a01c5a56ed1 444
meric 0:2a01c5a56ed1 445 fnode.isMinTimePassed = false;
meric 0:2a01c5a56ed1 446 fnode.minFlushCounter = 0;
meric 0:2a01c5a56ed1 447
meric 0:2a01c5a56ed1 448 fnode.checkDp = false;
meric 0:2a01c5a56ed1 449
meric 0:2a01c5a56ed1 450 fnode.flushing = true;
meric 0:2a01c5a56ed1 451 fnode.flushStarted = true;
meric 0:2a01c5a56ed1 452
meric 0:2a01c5a56ed1 453 // Yıkama fazı 1
meric 0:2a01c5a56ed1 454 fnode.globalFlushPhase = 1;
meric 0:2a01c5a56ed1 455 fnode.currentFlushPhase = 1;
meric 0:2a01c5a56ed1 456 fnode.globalFlushingFilter = 1;
meric 0:2a01c5a56ed1 457 fnode.currentFlushingFilter = 1;
meric 0:2a01c5a56ed1 458 fnode.currentWorkingSlave = 0;
meric 0:2a01c5a56ed1 459
meric 0:2a01c5a56ed1 460 send_alarm(BACKFLUSH_DP_STARTED, fnode.globalFlushingFilter, fnode.currentWorkingSlave);
meric 0:2a01c5a56ed1 461
meric 0:2a01c5a56ed1 462 }
meric 0:2a01c5a56ed1 463 }
meric 0:2a01c5a56ed1 464 }
meric 0:2a01c5a56ed1 465 }
meric 0:2a01c5a56ed1 466
meric 0:2a01c5a56ed1 467 // YIKAMA FAZLARI
meric 0:2a01c5a56ed1 468 if (fnode.currentFlushPhase == 1 && fnode.flushStarted == true) {
meric 0:2a01c5a56ed1 469
meric 0:2a01c5a56ed1 470 // Ters yıkama bitirme fazı
meric 0:2a01c5a56ed1 471 if (fnode.globalFlushPhase == fnode.lastFlushPhase) {
meric 0:2a01c5a56ed1 472
meric 0:2a01c5a56ed1 473 fnode.flushStarted = false;
meric 0:2a01c5a56ed1 474
meric 0:2a01c5a56ed1 475 send_alarm(BAKCFLUSH_ENDED, fnode.globalFlushingFilter, fnode.currentWorkingSlave);
meric 0:2a01c5a56ed1 476
meric 0:2a01c5a56ed1 477 // DP kontrolünü yeniden başlat
meric 0:2a01c5a56ed1 478 fnode.checkDp = true;
meric 0:2a01c5a56ed1 479 fnode.flushing = false;
meric 0:2a01c5a56ed1 480 fnode.dpControlStarted = false;
meric 0:2a01c5a56ed1 481
meric 0:2a01c5a56ed1 482 // Yıkama bitti
meric 0:2a01c5a56ed1 483 // Sulama varsa periyodik sayaç resetlenir ve devam eder
meric 0:2a01c5a56ed1 484 // Sulama yoksa periyodik sayaç pause moduna alınır
meric 0:2a01c5a56ed1 485
meric 0:2a01c5a56ed1 486 if (fnode.irrigation == true) {
meric 0:2a01c5a56ed1 487
meric 0:2a01c5a56ed1 488 fnode.periodicFlushCounter = 0;
meric 0:2a01c5a56ed1 489 periodicFlushTicker.attach(&periodic_flush_isr, 1);
meric 0:2a01c5a56ed1 490
meric 0:2a01c5a56ed1 491 } else {
meric 0:2a01c5a56ed1 492
meric 0:2a01c5a56ed1 493 periodicFlushTicker.detach();
meric 0:2a01c5a56ed1 494
meric 0:2a01c5a56ed1 495 }
meric 0:2a01c5a56ed1 496
meric 0:2a01c5a56ed1 497 // Yıkama bittiği için min yıkama süresi sayacını etkinleştir
meric 0:2a01c5a56ed1 498 fnode.minFlushCounter = 0;
meric 0:2a01c5a56ed1 499 fnode.isMinTimePassed = false;
meric 0:2a01c5a56ed1 500
meric 0:2a01c5a56ed1 501 if (fnode.irrigation == true) {
meric 0:2a01c5a56ed1 502
meric 0:2a01c5a56ed1 503 minFlushTicker.attach(&min_flush_interval_isr, 1);
meric 0:2a01c5a56ed1 504
meric 0:2a01c5a56ed1 505 } else {
meric 0:2a01c5a56ed1 506
meric 0:2a01c5a56ed1 507 minFlushTicker.detach();
meric 0:2a01c5a56ed1 508
meric 0:2a01c5a56ed1 509 }
meric 0:2a01c5a56ed1 510
meric 0:2a01c5a56ed1 511 } else {
meric 0:2a01c5a56ed1 512
meric 0:2a01c5a56ed1 513 fnode.flushStarted = false;
meric 0:2a01c5a56ed1 514 fnode.flowControl = false;
meric 0:2a01c5a56ed1 515
meric 0:2a01c5a56ed1 516 // SOLENOIDLER ACIK
meric 0:2a01c5a56ed1 517 if (open_solenoid(FILTER_MAIN_SOLENOID) == false) {
meric 0:2a01c5a56ed1 518
meric 0:2a01c5a56ed1 519 // ALARM
meric 0:2a01c5a56ed1 520 }
meric 0:2a01c5a56ed1 521
meric 0:2a01c5a56ed1 522 if (send_command(fnode.currentWorkingSlave, OPEN_SOLENOID, fnode.currentFlushingFilter) == false) {
meric 0:2a01c5a56ed1 523
meric 0:2a01c5a56ed1 524 // SEND ERROR ALARM
meric 0:2a01c5a56ed1 525
meric 0:2a01c5a56ed1 526 } else {
meric 0:2a01c5a56ed1 527
meric 0:2a01c5a56ed1 528 send_alarm(FILTER_FLUSH_STARTED, fnode.globalFlushingFilter, fnode.currentWorkingSlave);
meric 0:2a01c5a56ed1 529
meric 0:2a01c5a56ed1 530 }
meric 0:2a01c5a56ed1 531
meric 0:2a01c5a56ed1 532 // Faz 2'yi zamanla
meric 0:2a01c5a56ed1 533 flushTimer.attach(&flush_phase_isr, (float)fnode.flowControlLatency);
meric 0:2a01c5a56ed1 534 }
meric 0:2a01c5a56ed1 535
meric 0:2a01c5a56ed1 536
meric 0:2a01c5a56ed1 537 } else if (fnode.currentFlushPhase == 2 && fnode.flushStarted == true) {
meric 0:2a01c5a56ed1 538
meric 0:2a01c5a56ed1 539 fnode.flushStarted = false;
meric 0:2a01c5a56ed1 540 fnode.flowControl = true;
meric 0:2a01c5a56ed1 541
meric 0:2a01c5a56ed1 542 // Faz 3'ü zamanla
meric 0:2a01c5a56ed1 543 flushTimer.attach(&flush_phase_isr, (float)(fnode.flushDuration - fnode.flowControlLatency));
meric 0:2a01c5a56ed1 544
meric 0:2a01c5a56ed1 545 } else if (fnode.currentFlushPhase == 3 && fnode.flushStarted == true) {
meric 0:2a01c5a56ed1 546
meric 0:2a01c5a56ed1 547 fnode.flushStarted = false;
meric 0:2a01c5a56ed1 548 fnode.flowControl = false;
meric 0:2a01c5a56ed1 549
meric 0:2a01c5a56ed1 550 // SOLENOIDLER KAPALI
meric 0:2a01c5a56ed1 551 if (close_solenoid(FILTER_MAIN_SOLENOID) == false) {
meric 0:2a01c5a56ed1 552
meric 0:2a01c5a56ed1 553 // ALARM
meric 0:2a01c5a56ed1 554 }
meric 0:2a01c5a56ed1 555
meric 0:2a01c5a56ed1 556 if (send_command(fnode.currentWorkingSlave, CLOSE_SOLENOID, fnode.currentFlushingFilter) == false) {
meric 0:2a01c5a56ed1 557
meric 0:2a01c5a56ed1 558 // SEND ERROR ALARM
meric 0:2a01c5a56ed1 559
meric 0:2a01c5a56ed1 560 } else {
meric 0:2a01c5a56ed1 561
meric 0:2a01c5a56ed1 562 send_alarm(FILTER_FLUSH_ENDED, fnode.globalFlushingFilter, fnode.currentWorkingSlave);
meric 0:2a01c5a56ed1 563
meric 0:2a01c5a56ed1 564 }
meric 0:2a01c5a56ed1 565
meric 0:2a01c5a56ed1 566 // Faz 4'ü zamanla
meric 0:2a01c5a56ed1 567 flushTimer.attach(&flush_phase_isr, (float)fnode.flowControlLatency);
meric 0:2a01c5a56ed1 568
meric 0:2a01c5a56ed1 569 } else if (fnode.currentFlushPhase == 4 && fnode.flushStarted == true) {
meric 0:2a01c5a56ed1 570
meric 0:2a01c5a56ed1 571 fnode.flushStarted = false;
meric 0:2a01c5a56ed1 572 fnode.flowControl = true;
meric 0:2a01c5a56ed1 573
meric 0:2a01c5a56ed1 574 // Sonraki ya da son fazı zamanla
meric 0:2a01c5a56ed1 575 flushTimer.attach(&flush_phase_isr, (float)(fnode.flushInterval - fnode.flowControlLatency));
meric 0:2a01c5a56ed1 576 }
meric 0:2a01c5a56ed1 577
meric 0:2a01c5a56ed1 578
meric 0:2a01c5a56ed1 579
meric 0:2a01c5a56ed1 580 // AKIŞ SENSÖRÜ KONTROLÜ
meric 0:2a01c5a56ed1 581 // YIKAMA SIRASINDA
meric 0:2a01c5a56ed1 582 // Filtre yıkanırken AKIŞ YOK hatası:
meric 0:2a01c5a56ed1 583 if (fnode.currentFlushPhase == 2 && flowSensor.read() == 0 && fnode.flowControl == true) {
meric 0:2a01c5a56ed1 584
meric 0:2a01c5a56ed1 585 // Eğer hata olduğunda ters yıkama duracaksa
meric 0:2a01c5a56ed1 586 if (fnode.onErrorStop == 1) {
meric 0:2a01c5a56ed1 587
meric 0:2a01c5a56ed1 588 fnode.flowControl = false;
meric 0:2a01c5a56ed1 589
meric 0:2a01c5a56ed1 590 // Faz zamanlayıcısını kapat
meric 0:2a01c5a56ed1 591 flushTimer.detach();
meric 0:2a01c5a56ed1 592
meric 0:2a01c5a56ed1 593 fnode.errorOccured = true;
meric 0:2a01c5a56ed1 594 fnode.flushing = false;
meric 0:2a01c5a56ed1 595
meric 0:2a01c5a56ed1 596 // SOLENOIDLER KAPALI
meric 0:2a01c5a56ed1 597 if (close_solenoid(FILTER_MAIN_SOLENOID) == false) {
meric 0:2a01c5a56ed1 598
meric 0:2a01c5a56ed1 599 // ALARM
meric 0:2a01c5a56ed1 600 }
meric 0:2a01c5a56ed1 601
meric 0:2a01c5a56ed1 602
meric 0:2a01c5a56ed1 603 if (send_command(fnode.currentWorkingSlave, CLOSE_SOLENOID, fnode.currentFlushingFilter) == false) {
meric 0:2a01c5a56ed1 604
meric 0:2a01c5a56ed1 605
meric 0:2a01c5a56ed1 606 } else {
meric 0:2a01c5a56ed1 607
meric 0:2a01c5a56ed1 608 send_alarm(NO_FLOW_DURING_FLUSH, fnode.globalFlushingFilter, fnode.currentWorkingSlave);
meric 0:2a01c5a56ed1 609
meric 0:2a01c5a56ed1 610 }
meric 0:2a01c5a56ed1 611
meric 0:2a01c5a56ed1 612 fnode.globalFlushPhase = 0;
meric 0:2a01c5a56ed1 613 fnode.currentFlushPhase = 0;
meric 0:2a01c5a56ed1 614 fnode.globalFlushingFilter = 0;
meric 0:2a01c5a56ed1 615 fnode.currentFlushingFilter = 0;
meric 0:2a01c5a56ed1 616 fnode.currentWorkingSlave = 0;
meric 0:2a01c5a56ed1 617
meric 0:2a01c5a56ed1 618 // Yıkama bittiği için periyodik yıkama sayacını aktifleştir.
meric 0:2a01c5a56ed1 619 fnode.periodicFlushCounter = 0;
meric 0:2a01c5a56ed1 620 periodicFlushTicker.attach(&periodic_flush_isr, 1);
meric 0:2a01c5a56ed1 621
meric 0:2a01c5a56ed1 622 } else {
meric 0:2a01c5a56ed1 623
meric 0:2a01c5a56ed1 624 fnode.flowControl = false;
meric 0:2a01c5a56ed1 625
meric 0:2a01c5a56ed1 626 // Filtre yıkaması sırasında akış yok hatası
meric 0:2a01c5a56ed1 627 send_alarm(NO_FLOW_DURING_FLUSH, fnode.globalFlushingFilter, fnode.currentWorkingSlave);
meric 0:2a01c5a56ed1 628
meric 0:2a01c5a56ed1 629 }
meric 0:2a01c5a56ed1 630
meric 0:2a01c5a56ed1 631
meric 0:2a01c5a56ed1 632 //----------------------------------------------------------------------------//
meric 0:2a01c5a56ed1 633 // YIKAMA SONRASINDA
meric 0:2a01c5a56ed1 634 // Filtre yıkaması arasında AKIŞ VAR hatası:
meric 0:2a01c5a56ed1 635 } else if (fnode.currentFlushPhase == 4 && flowSensor.read() == 1 && fnode.flowControl == true) {
meric 0:2a01c5a56ed1 636
meric 0:2a01c5a56ed1 637 // Eğer hata olduğunda ters yıkama duracaksa
meric 0:2a01c5a56ed1 638 if (fnode.onErrorStop == 1) {
meric 0:2a01c5a56ed1 639
meric 0:2a01c5a56ed1 640 fnode.flowControl = false;
meric 0:2a01c5a56ed1 641
meric 0:2a01c5a56ed1 642 // Faz zamanlayıcısını kapat
meric 0:2a01c5a56ed1 643 flushTimer.detach();
meric 0:2a01c5a56ed1 644
meric 0:2a01c5a56ed1 645 fnode.errorOccured = true;
meric 0:2a01c5a56ed1 646 fnode.flushing = false;
meric 0:2a01c5a56ed1 647
meric 0:2a01c5a56ed1 648 // 1. ve ana solenoid Faz 4'de kapatıldığı için kapatmaya gerek yok.
meric 0:2a01c5a56ed1 649
meric 0:2a01c5a56ed1 650 send_alarm(FLOW_DURING_FLUSH, fnode.globalFlushingFilter, fnode.currentWorkingSlave);
meric 0:2a01c5a56ed1 651
meric 0:2a01c5a56ed1 652 fnode.globalFlushPhase = 0;
meric 0:2a01c5a56ed1 653 fnode.currentFlushPhase = 0;
meric 0:2a01c5a56ed1 654 fnode.globalFlushingFilter = 0;
meric 0:2a01c5a56ed1 655 fnode.currentFlushingFilter = 0;
meric 0:2a01c5a56ed1 656 fnode.currentWorkingSlave = 0;
meric 0:2a01c5a56ed1 657
meric 0:2a01c5a56ed1 658 // Yıkama bittiği için periyodik yıkama sayacını aktifleştir.
meric 0:2a01c5a56ed1 659 fnode.periodicFlushCounter = 0;
meric 0:2a01c5a56ed1 660 periodicFlushTicker.attach(&periodic_flush_isr, 1);
meric 0:2a01c5a56ed1 661
meric 0:2a01c5a56ed1 662 } else {
meric 0:2a01c5a56ed1 663
meric 0:2a01c5a56ed1 664 fnode.flowControl = false;
meric 0:2a01c5a56ed1 665
meric 0:2a01c5a56ed1 666 // Filtre yıkaması arasında akış var hatası
meric 0:2a01c5a56ed1 667 send_alarm(FLOW_DURING_FLUSH, fnode.globalFlushingFilter, fnode.currentWorkingSlave);
meric 0:2a01c5a56ed1 668
meric 0:2a01c5a56ed1 669 }
meric 0:2a01c5a56ed1 670 }
meric 0:2a01c5a56ed1 671
meric 0:2a01c5a56ed1 672
meric 0:2a01c5a56ed1 673 // WSN Komutlarının İşlenmesi
meric 0:2a01c5a56ed1 674 if (fnode.rfInterruptComplete == true) {
meric 0:2a01c5a56ed1 675
meric 0:2a01c5a56ed1 676 // FENABLE
meric 0:2a01c5a56ed1 677 if (strncmp (fnode.rfBuffer, fenable_command, 7) == 0) {
meric 0:2a01c5a56ed1 678
meric 0:2a01c5a56ed1 679 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 680
meric 0:2a01c5a56ed1 681 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 682 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 683
meric 0:2a01c5a56ed1 684 process_command(FENABLE);
meric 0:2a01c5a56ed1 685
meric 0:2a01c5a56ed1 686 // FDISABLE
meric 0:2a01c5a56ed1 687 } else if (strncmp (fnode.rfBuffer, fdisable_command, 8) == 0) {
meric 0:2a01c5a56ed1 688
meric 0:2a01c5a56ed1 689 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 690
meric 0:2a01c5a56ed1 691 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 692 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 693
meric 0:2a01c5a56ed1 694 process_command(FDISABLE);
meric 0:2a01c5a56ed1 695
meric 0:2a01c5a56ed1 696 // FSETSYS
meric 0:2a01c5a56ed1 697 } else if (strncmp (fnode.rfBuffer, fsetsys_command, 7) == 0) {
meric 0:2a01c5a56ed1 698
meric 0:2a01c5a56ed1 699 sscanf (fnode.rfBuffer,"%s%hhd%hhd%hhd%hhd%hd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hd%hhd", fnode.str, &fnode.systemSetup, &fnode.autosendStatus, &fnode.irriTransmitInterval, &fnode.dryTransmitInterval, &fnode.watermeterCoefficient, &fnode.pMax, &fnode.pressureSensorType, &fnode.dpSet, &fnode.pressureControlFrequency, &fnode.flushDuration, &fnode.flushInterval, &fnode.flowControlLatency, &fnode.flushEnabled, &fnode.pressureSensorPosition, &fnode.onErrorStop, &fnode.pressureLowThreshold, &fnode.pressureHighThreshold, &fnode.alarmsEnabled, &fnode.dpThreshold, &fnode.inletPressureSet, &fnode.outletPressureSet, &fnode.periodicFlushInterval, &fnode.minFlushInterval, &fnode.filterNumber);
meric 0:2a01c5a56ed1 700 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 701 memset (fnode.str, 0, sizeof(fnode.str));
meric 0:2a01c5a56ed1 702
meric 0:2a01c5a56ed1 703 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 704 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 705
meric 0:2a01c5a56ed1 706 process_command(FSETSYS);
meric 0:2a01c5a56ed1 707
meric 0:2a01c5a56ed1 708 // FGETCFG
meric 0:2a01c5a56ed1 709 } else if (strncmp(fnode.rfBuffer, fgetcfg_command, 7) == 0) {
meric 0:2a01c5a56ed1 710
meric 0:2a01c5a56ed1 711 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 712
meric 0:2a01c5a56ed1 713 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 714 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 715
meric 0:2a01c5a56ed1 716 process_command(FGETCFG);
meric 0:2a01c5a56ed1 717
meric 0:2a01c5a56ed1 718 // FREAD
meric 0:2a01c5a56ed1 719 } else if (strncmp(fnode.rfBuffer, fread_command, 5) == 0) {
meric 0:2a01c5a56ed1 720
meric 0:2a01c5a56ed1 721 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 722
meric 0:2a01c5a56ed1 723 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 724 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 725
meric 0:2a01c5a56ed1 726 process_command(FREAD);
meric 0:2a01c5a56ed1 727
meric 0:2a01c5a56ed1 728 // FFIX
meric 0:2a01c5a56ed1 729 } else if (strncmp(fnode.rfBuffer, ffix_command, 4) == 0) {
meric 0:2a01c5a56ed1 730
meric 0:2a01c5a56ed1 731 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 732
meric 0:2a01c5a56ed1 733 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 734 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 735
meric 0:2a01c5a56ed1 736 process_command(FFIX);
meric 0:2a01c5a56ed1 737
meric 0:2a01c5a56ed1 738 // FTEST
meric 0:2a01c5a56ed1 739 } else if (strncmp(fnode.rfBuffer, ftest_command, 5) == 0) {
meric 0:2a01c5a56ed1 740 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 741
meric 0:2a01c5a56ed1 742 sprintf(fnode.dataBuffer, "%s", "{CMD:\"FTESTOK\"}");
meric 0:2a01c5a56ed1 743 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 744 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 745
meric 0:2a01c5a56ed1 746 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 747 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 748
meric 0:2a01c5a56ed1 749 // FRESET komutu
meric 0:2a01c5a56ed1 750 } else if (strncmp(fnode.rfBuffer, freset_command, 6) == 0) {
meric 0:2a01c5a56ed1 751 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 752
meric 0:2a01c5a56ed1 753 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 754 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 755
meric 0:2a01c5a56ed1 756 if (fnode.irrigation == true) {
meric 0:2a01c5a56ed1 757
meric 0:2a01c5a56ed1 758 eeprom_write(EEPROM_TYPE, IRRI_STATUS_ADDR, 1);
meric 0:2a01c5a56ed1 759
meric 0:2a01c5a56ed1 760 } else {
meric 0:2a01c5a56ed1 761
meric 0:2a01c5a56ed1 762 eeprom_write(EEPROM_TYPE, IRRI_STATUS_ADDR, 0);
meric 0:2a01c5a56ed1 763
meric 0:2a01c5a56ed1 764 }
meric 0:2a01c5a56ed1 765
meric 0:2a01c5a56ed1 766 if (fnode.autosend == true) {
meric 0:2a01c5a56ed1 767
meric 0:2a01c5a56ed1 768 eeprom_write(EEPROM_TYPE, AUTOSEND_STATUS_ADDR, 1);
meric 0:2a01c5a56ed1 769
meric 0:2a01c5a56ed1 770 } else {
meric 0:2a01c5a56ed1 771
meric 0:2a01c5a56ed1 772 eeprom_write(EEPROM_TYPE, AUTOSEND_STATUS_ADDR, 0);
meric 0:2a01c5a56ed1 773
meric 0:2a01c5a56ed1 774 }
meric 0:2a01c5a56ed1 775
meric 0:2a01c5a56ed1 776 sprintf(fnode.dataBuffer, "%s", "{CMD:\"FRESETOK\"}");
meric 0:2a01c5a56ed1 777 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 778 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 779
meric 0:2a01c5a56ed1 780 wait(1);
meric 0:2a01c5a56ed1 781 NVIC_SystemReset();
meric 0:2a01c5a56ed1 782
meric 0:2a01c5a56ed1 783 // FCLEAR
meric 0:2a01c5a56ed1 784 } else if (strncmp(fnode.rfBuffer, fclear_command, 6) == 0) {
meric 0:2a01c5a56ed1 785
meric 0:2a01c5a56ed1 786 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 787
meric 0:2a01c5a56ed1 788 bool eepromOk = true;
meric 0:2a01c5a56ed1 789
meric 0:2a01c5a56ed1 790 for (uint16_t i = 0; i < 60; i++) {
meric 0:2a01c5a56ed1 791
meric 0:2a01c5a56ed1 792 eeprom_write(EEPROM_TYPE, i, 0xFF);
meric 0:2a01c5a56ed1 793
meric 0:2a01c5a56ed1 794 }
meric 0:2a01c5a56ed1 795
meric 0:2a01c5a56ed1 796 for (uint16_t i = 0; i < 60; i++) {
meric 0:2a01c5a56ed1 797
meric 0:2a01c5a56ed1 798 if (eeprom_read(EEPROM_TYPE, i) != 0xFF) {
meric 0:2a01c5a56ed1 799
meric 0:2a01c5a56ed1 800 eepromOk = false;
meric 0:2a01c5a56ed1 801
meric 0:2a01c5a56ed1 802 }
meric 0:2a01c5a56ed1 803 }
meric 0:2a01c5a56ed1 804
meric 0:2a01c5a56ed1 805 if (eepromOk == true) {
meric 0:2a01c5a56ed1 806
meric 0:2a01c5a56ed1 807 sprintf(fnode.dataBuffer, "%s", "{CMD:\"FCLEAROK\"}");
meric 0:2a01c5a56ed1 808
meric 0:2a01c5a56ed1 809 } else {
meric 0:2a01c5a56ed1 810
meric 0:2a01c5a56ed1 811 sprintf(fnode.dataBuffer, "%s", "{CMD:\"FCLEARERR\"}");
meric 0:2a01c5a56ed1 812
meric 0:2a01c5a56ed1 813 }
meric 0:2a01c5a56ed1 814
meric 0:2a01c5a56ed1 815 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 816 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 817
meric 0:2a01c5a56ed1 818 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 819 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 820
meric 0:2a01c5a56ed1 821 // FGETSTATUS
meric 0:2a01c5a56ed1 822 } else if (strncmp(fnode.rfBuffer, fgetstatus_command, 10) == 0) {
meric 0:2a01c5a56ed1 823
meric 0:2a01c5a56ed1 824 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 825
meric 0:2a01c5a56ed1 826 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 827 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 828
meric 0:2a01c5a56ed1 829 process_command(FGETSTATUS);
meric 0:2a01c5a56ed1 830
meric 0:2a01c5a56ed1 831 // FFGETSTAT
meric 0:2a01c5a56ed1 832 } else if (strncmp(fnode.rfBuffer, ffgetstat_command, 9) == 0) {
meric 0:2a01c5a56ed1 833
meric 0:2a01c5a56ed1 834 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 835
meric 0:2a01c5a56ed1 836 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 837 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 838
meric 0:2a01c5a56ed1 839 process_command(FFGETSTAT);
meric 0:2a01c5a56ed1 840
meric 0:2a01c5a56ed1 841 // FGETFSTATUS
meric 0:2a01c5a56ed1 842 } else if (strncmp(fnode.rfBuffer, fgetfstatus_command, 11) == 0) {
meric 0:2a01c5a56ed1 843
meric 0:2a01c5a56ed1 844 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 845
meric 0:2a01c5a56ed1 846 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 847 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 848
meric 0:2a01c5a56ed1 849 process_command(FGETFSTATUS);
meric 0:2a01c5a56ed1 850
meric 0:2a01c5a56ed1 851 // FLUSHNOW
meric 0:2a01c5a56ed1 852 } else if (strncmp(fnode.rfBuffer, fflushnow_command, 9) == 0) {
meric 0:2a01c5a56ed1 853
meric 0:2a01c5a56ed1 854 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 855
meric 0:2a01c5a56ed1 856 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 857 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 858
meric 0:2a01c5a56ed1 859 process_command(FLUSHNOW);
meric 0:2a01c5a56ed1 860
meric 0:2a01c5a56ed1 861 // FRTON
meric 0:2a01c5a56ed1 862 } else if (strncmp(fnode.rfBuffer, frton_command, 5) == 0) {
meric 0:2a01c5a56ed1 863
meric 0:2a01c5a56ed1 864 if(fnode.rtActive == false) {
meric 0:2a01c5a56ed1 865
meric 0:2a01c5a56ed1 866 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 867 sprintf(fnode.dataBuffer, "%s", "{CMD:\"FRTONOK\"}");
meric 0:2a01c5a56ed1 868 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 869 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 870
meric 0:2a01c5a56ed1 871 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 872 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 873
meric 0:2a01c5a56ed1 874 fnode.rtCounter = 0;
meric 0:2a01c5a56ed1 875 fnode.rtActive = true;
meric 0:2a01c5a56ed1 876
meric 0:2a01c5a56ed1 877 fnode.rtPulseFirst = fnode.pulse;
meric 0:2a01c5a56ed1 878
meric 0:2a01c5a56ed1 879 rtDataTransmitTicker.attach(&rt_data_transmit_isr, RT_DATA_TRANSMIT_INTERVAL);
meric 0:2a01c5a56ed1 880
meric 0:2a01c5a56ed1 881 } else {
meric 0:2a01c5a56ed1 882
meric 0:2a01c5a56ed1 883 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 884 sprintf(fnode.dataBuffer, "%s", "{CMD:\"FRTONERROR\"}");
meric 0:2a01c5a56ed1 885 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 886 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 887
meric 0:2a01c5a56ed1 888 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 889 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 890
meric 0:2a01c5a56ed1 891 }
meric 0:2a01c5a56ed1 892
meric 0:2a01c5a56ed1 893 // FRTOFF
meric 0:2a01c5a56ed1 894 } else if (strncmp(fnode.rfBuffer, frtoff_command, 6) == 0) {
meric 0:2a01c5a56ed1 895
meric 0:2a01c5a56ed1 896 if (fnode.rtActive == true) {
meric 0:2a01c5a56ed1 897
meric 0:2a01c5a56ed1 898 rtDataTransmitTicker.detach();
meric 0:2a01c5a56ed1 899
meric 0:2a01c5a56ed1 900 fnode.rtCounter = 0;
meric 0:2a01c5a56ed1 901 fnode.rtActive = false;
meric 0:2a01c5a56ed1 902
meric 0:2a01c5a56ed1 903 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 904 sprintf(fnode.dataBuffer, "%s", "{CMD:\"FRTOFFOK\"}");
meric 0:2a01c5a56ed1 905 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 906 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 907
meric 0:2a01c5a56ed1 908 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 909 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 910
meric 0:2a01c5a56ed1 911 } else {
meric 0:2a01c5a56ed1 912
meric 0:2a01c5a56ed1 913 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 914 sprintf(fnode.dataBuffer, "%s", "{CMD:\"FRTOFFERROR\"}");
meric 0:2a01c5a56ed1 915 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 916 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 917
meric 0:2a01c5a56ed1 918 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 919 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 920
meric 0:2a01c5a56ed1 921 }
meric 0:2a01c5a56ed1 922
meric 0:2a01c5a56ed1 923 // GETFRTSTATUS
meric 0:2a01c5a56ed1 924 } else if (strncmp(fnode.rfBuffer, getfrtstatus_command, 12) == 0) {
meric 0:2a01c5a56ed1 925
meric 0:2a01c5a56ed1 926 if (fnode.rtActive == true) {
meric 0:2a01c5a56ed1 927
meric 0:2a01c5a56ed1 928 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 929 sprintf(fnode.dataBuffer, "%s", "{CMD:\"GETFRTSTATUS\",STAT:\"ACTIVE\"}");
meric 0:2a01c5a56ed1 930 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 931 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 932
meric 0:2a01c5a56ed1 933 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 934 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 935
meric 0:2a01c5a56ed1 936 } else {
meric 0:2a01c5a56ed1 937
meric 0:2a01c5a56ed1 938 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 939 sprintf(fnode.dataBuffer, "%s", "{CMD:\"GETFRTSTATUS\",STAT:\"PASSIVE\"}");
meric 0:2a01c5a56ed1 940 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 941 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 942
meric 0:2a01c5a56ed1 943 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 944 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 945
meric 0:2a01c5a56ed1 946 }
meric 0:2a01c5a56ed1 947
meric 0:2a01c5a56ed1 948 // SELTESTON
meric 0:2a01c5a56ed1 949 } else if (strncmp(fnode.rfBuffer, selteston_command, 9) == 0) {
meric 0:2a01c5a56ed1 950
meric 0:2a01c5a56ed1 951 sscanf (fnode.rfBuffer,"%s%hhd%hhd", fnode.str, &fnode.testid, &fnode.testFilterNo);
meric 0:2a01c5a56ed1 952 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 953 memset (fnode.str, 0, sizeof(fnode.str));
meric 0:2a01c5a56ed1 954
meric 0:2a01c5a56ed1 955 if (send_command(fnode.testid, TEST_OPEN_SOLENOID, fnode.testFilterNo) == true) {
meric 0:2a01c5a56ed1 956
meric 0:2a01c5a56ed1 957 sprintf(fnode.dataBuffer, "%s", "{CMD:\"SELTESTONOK\"}");
meric 0:2a01c5a56ed1 958 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 959 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 960
meric 0:2a01c5a56ed1 961 } else {
meric 0:2a01c5a56ed1 962
meric 0:2a01c5a56ed1 963 sprintf(fnode.dataBuffer, "%s", "{CMD:\"SELTESTONERROR\"}");
meric 0:2a01c5a56ed1 964 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 965 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 966 }
meric 0:2a01c5a56ed1 967
meric 0:2a01c5a56ed1 968 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 969 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 970
meric 0:2a01c5a56ed1 971 // SELTESTOFF
meric 0:2a01c5a56ed1 972 } else if (strncmp(fnode.rfBuffer, seltestoff_command, 10) == 0) {
meric 0:2a01c5a56ed1 973
meric 0:2a01c5a56ed1 974 sscanf (fnode.rfBuffer,"%s%hhd%hhd", fnode.str, &fnode.testid, &fnode.testFilterNo);
meric 0:2a01c5a56ed1 975 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 976 memset (fnode.str, 0, sizeof(fnode.str));
meric 0:2a01c5a56ed1 977
meric 0:2a01c5a56ed1 978 if (send_command(fnode.testid, TEST_CLOSE_SOLENOID, fnode.testFilterNo) == true) {
meric 0:2a01c5a56ed1 979
meric 0:2a01c5a56ed1 980 sprintf(fnode.dataBuffer, "%s", "{CMD:\"SELTESTOFFOK\"}");
meric 0:2a01c5a56ed1 981 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 982 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 983
meric 0:2a01c5a56ed1 984 } else {
meric 0:2a01c5a56ed1 985
meric 0:2a01c5a56ed1 986 sprintf(fnode.dataBuffer, "%s", "{CMD:\"SELTESTOFFERROR\"}");
meric 0:2a01c5a56ed1 987 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 988 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 989 }
meric 0:2a01c5a56ed1 990
meric 0:2a01c5a56ed1 991 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 992 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 993
meric 0:2a01c5a56ed1 994 // TANIMSIZ KOMUT
meric 0:2a01c5a56ed1 995 } else {
meric 0:2a01c5a56ed1 996
meric 0:2a01c5a56ed1 997 memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer));
meric 0:2a01c5a56ed1 998
meric 0:2a01c5a56ed1 999 sprintf(fnode.dataBuffer, "%s", "{CMD:\"UNKNOWN COMMAND\"}");
meric 0:2a01c5a56ed1 1000 send_to_coordinator(fnode.dataBuffer);
meric 0:2a01c5a56ed1 1001 memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer));
meric 0:2a01c5a56ed1 1002
meric 0:2a01c5a56ed1 1003 fnode.rfInterruptComplete = false;
meric 0:2a01c5a56ed1 1004 rf.attach(&rf_rx_isr, Serial::RxIrq);
meric 0:2a01c5a56ed1 1005 }
meric 0:2a01c5a56ed1 1006 }
meric 0:2a01c5a56ed1 1007 }
meric 0:2a01c5a56ed1 1008 }