@@ -100,9 +100,11 @@ Contributed by Jim (
[email protected] ) with much contribution from Pete (p
100
100
101
101
#define NUMBER_OF_VALVES 8 // Change this to set your valve count up to 16.
102
102
#define VALVE_RESET_TIME 7500UL // Change this (in milliseconds) for the time you need your valves to hydraulically reset and change state
103
+ #define VALVE_TIMES_RELOAD 300000UL // Change this (in milliseconds) for how often to update all valves data from the controller (Loops at value/number valves)
104
+ // ie: 300000 for 8 valves produces requests 37.5seconds with all valves updated every 5mins
103
105
104
106
#define SKETCH_NAME " MySprinkler"
105
- #define SKETCH_VERSION " 2.0 "
107
+ #define SKETCH_VERSION " 2.2 "
106
108
//
107
109
#define CHILD_ID_SPRINKLER 0
108
110
//
@@ -149,6 +151,7 @@ bool buttonPushed = false;
149
151
bool showTime = true ;
150
152
bool clockUpdating = false ;
151
153
bool recentUpdate = true ;
154
+ int allVars[] = {V_VAR1, V_VAR2, V_VAR3};
152
155
const char *dayOfWeek[] = {
153
156
" Null" , " Sunday " , " Monday " , " Tuesday " , " Wednesday " , " Thursday " , " Friday " , " Saturday "
154
157
};
@@ -175,6 +178,7 @@ MyMessage var1valve(CHILD_ID_SPRINKLER, V_VAR1);
175
178
MyMessage var2valve (CHILD_ID_SPRINKLER, V_VAR2);
176
179
177
180
bool receivedInitialValue = false ;
181
+ bool inSetup = true ;
178
182
//
179
183
void setup ()
180
184
{
@@ -241,45 +245,11 @@ void setup()
241
245
}
242
246
}
243
247
//
244
- lcd.clear ();
245
- // Update valve data when first powered on
246
- for (byte i = 0 ; i <= NUMBER_OF_VALVES; i++)
248
+ // Update valve data when first powered on
249
+ for (byte i = 1 ; i <= NUMBER_OF_VALVES; i++)
247
250
{
248
- lcd.print (F (" Updating " ));
249
- lcd.setCursor (0 , 1 );
250
- lcd.print (F (" Valve Data: " ));
251
- lcd.print (i);
252
- bool flashIcon = false ;
253
- DEBUG_PRINT (F (" Calling for Valve " ));
254
- DEBUG_PRINT (i);
255
- DEBUG_PRINTLN (F (" Data..." ));
256
- receivedInitialValue = false ;
257
- while (!receivedInitialValue)
258
- {
259
- lcd.setCursor (15 , 0 );
260
- flashIcon = !flashIcon;
261
- flashIcon ? lcd.write (byte (1 )) : lcd.print (F (" " ));
262
- request (i, V_VAR1);
263
- wait (500 );
264
- }
265
- receivedInitialValue = false ;
266
- while (!receivedInitialValue)
267
- {
268
- lcd.setCursor (15 , 0 );
269
- flashIcon = !flashIcon;
270
- flashIcon ? lcd.write (byte (1 )) : lcd.print (F (" " ));
271
- request (i, V_VAR2);
272
- wait (500 );
273
- }
274
- receivedInitialValue = false ;
275
- while (!receivedInitialValue)
276
- {
277
- lcd.setCursor (15 , 0 );
278
- flashIcon = !flashIcon;
279
- flashIcon ? lcd.write (byte (1 )) : lcd.print (F (" " ));
280
- request (i, V_VAR3);
281
- wait (500 );
282
- }
251
+ lcd.clear ();
252
+ goGetValveTimes ();
283
253
}
284
254
lcd.clear ();
285
255
}
@@ -360,6 +330,7 @@ void loop()
360
330
{
361
331
send (msg1valve.setSensor (i).set (false ), false );
362
332
}
333
+ wait (50 );
363
334
}
364
335
}
365
336
lastValve = valveNumber;
@@ -395,6 +366,7 @@ void loop()
395
366
for (byte i = 0 ; i <= NUMBER_OF_VALVES; i++)
396
367
{
397
368
send (msg1valve.setSensor (i).set (false ), false );
369
+ wait (50 );
398
370
}
399
371
DEBUG_PRINT (F (" State = " ));
400
372
DEBUG_PRINTLN (state);
@@ -417,6 +389,7 @@ void loop()
417
389
{
418
390
send (msg1valve.setSensor (i).set (false ), false );
419
391
}
392
+ wait (50 );
420
393
}
421
394
DEBUG_PRINTLN (F (" State Changed, Single Zone Running..." ));
422
395
DEBUG_PRINT (F (" Zone: " ));
@@ -456,11 +429,14 @@ void loop()
456
429
state = STAND_BY_ALL_OFF;
457
430
}
458
431
}
459
- else if (state == ZONE_SELECT_MENU)
432
+ if (state == ZONE_SELECT_MENU)
460
433
{
461
434
displayMenu ();
435
+ }
436
+ else
437
+ {
438
+ lastState = state;
462
439
}
463
- lastState = state;
464
440
}
465
441
//
466
442
void displayMenu (void )
@@ -625,9 +601,9 @@ void receive(const MyMessage &message)
625
601
}
626
602
valveNickName[i] = " " ;
627
603
valveNickName[i] += newMessage;
628
- DEBUG_PRINT (F (" Recieved new name for zone " ));
604
+ DEBUG_PRINT (F (" Recieved variable3 valve: " ));
629
605
DEBUG_PRINT (i);
630
- DEBUG_PRINT (F (" and it is now called: " ));
606
+ DEBUG_PRINT (F (" = " ));
631
607
DEBUG_PRINTLN (valveNickName[i]);
632
608
}
633
609
receivedInitialValue = true ;
@@ -646,7 +622,9 @@ void receive(const MyMessage &message)
646
622
DEBUG_PRINT (F (" individual time: " ));
647
623
DEBUG_PRINT (valveSoloTime[i]);
648
624
DEBUG_PRINT (F (" group time: " ));
649
- DEBUG_PRINTLN (allZoneTime[i]);
625
+ DEBUG_PRINT (allZoneTime[i]);
626
+ DEBUG_PRINT (F (" name: " ));
627
+ DEBUG_PRINTLN (valveNickName[i]);
650
628
recentUpdate = true ;
651
629
}
652
630
}
@@ -869,17 +847,34 @@ void goGetValveTimes()
869
847
{
870
848
static unsigned long valveUpdateTime;
871
849
static byte valveIndex = 1 ;
872
- if (millis () - valveUpdateTime >= 300000UL / NUMBER_OF_VALVES)// update each valve once every 5 mins (distributes the traffic)
850
+ if (inSetup || millis () - valveUpdateTime >= VALVE_TIMES_RELOAD / NUMBER_OF_VALVES) // update each valve once every 5 mins (distributes the traffic)
873
851
{
874
- DEBUG_PRINTLN (F (" Calling for Valve Data..." ));
875
- lcd.setCursor (15 , 0 );
876
- lcd.write (byte (1 )); // lcd.write(1);
877
- request (valveIndex, V_VAR1);
878
- request (valveIndex, V_VAR2);
879
- request (valveIndex, V_VAR3);
852
+ if (inSetup) {
853
+ lcd.print (F (" Updating " ));
854
+ lcd.setCursor (0 , 1 );
855
+ lcd.print (F (" Valve Data: " ));
856
+ lcd.print (valveIndex);
857
+ }
858
+ bool flashIcon = false ;
859
+ DEBUG_PRINT (F (" Calling for Valve " ));
860
+ DEBUG_PRINT (valveIndex);
861
+ DEBUG_PRINTLN (F (" Data..." ));
862
+ for (int a = 0 ; a < (sizeof (allVars)/sizeof (int )); a++) {
863
+ receivedInitialValue = false ;
864
+ byte timeout = 10 ;
865
+ while (!receivedInitialValue && timeout > 0 )
866
+ {
867
+ lcd.setCursor (15 , 0 );
868
+ flashIcon = !flashIcon;
869
+ flashIcon ? lcd.write (byte (1 )) : lcd.print (F (" " ));
870
+ request (valveIndex, allVars[a]);
871
+ wait (50 );
872
+ timeout--;
873
+ }
874
+ }
880
875
valveUpdateTime = millis ();
881
876
valveIndex++;
882
- if (valveIndex > NUMBER_OF_VALVES + 1 )
877
+ if (valveIndex > NUMBER_OF_VALVES)
883
878
{
884
879
valveIndex = 1 ;
885
880
}
0 commit comments