Advertisement
hms11

Untitled

Oct 14th, 2020 (edited)
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.12 KB | None | 0 0
  1. // ------------------------- ZONE COMMAND ---------------------
  2. // ---------------------6 ZONE CONTROL BOARD-------------------
  3.  
  4. // -------------------DESIGNED AND PROGRAMMED BY:--------------
  5. // --------------------------COREY EARL-------------------------
  6. // -------REVISION 3 (Simplified Code) (OCTOBER 14th, 2020)-----
  7. // --------------All Zones Appear to Function And Debug---------
  8. // ---------------------More Testing Needed--------------------
  9. //----------------Ready for on-site BETA testing---------------
  10.  
  11.  
  12. // print debug messages or not to serial
  13. const bool serialDisplay = true;
  14.  
  15.  
  16. /// ---------------SETTINGS-----------------
  17.  
  18. // Which zones are active. If a zone is active set as true, if a zone is deactived or not needed set to false. Zones are then placed in an array.
  19.  
  20. const bool zone1Active = true;
  21. const bool zone2Active = true;
  22. const bool zone3Active = true;
  23. const bool zone4Active = true;
  24. const bool zone5Active = true;
  25. const bool zone6Active = true;
  26. const bool zoneActive[6] {zone1Active, zone2Active, zone3Active, zone4Active, zone5Active, zone6Active};
  27.  
  28. // Counters for progressing through each Zone
  29.  
  30. int zoneNumber = 0; // Which zone the loop is controlling
  31. int serialNumber = 0; // Which zone the Serial Debugger is showing
  32.  
  33. // If the relay goes active when driven low set this to true, if the relays go active when drive high set to false
  34.  
  35. const bool relayLow = true;
  36.  
  37. // If you want to trigger the outputs based on a falling value set this to true, if you want to trigger based on a raising input, set to false
  38.  
  39. const bool fallingTrigger = true;
  40.  
  41.  
  42. // Sensor trigger points to trigger each zones output on. High or low "on" decided by relayLow setting
  43.  
  44. // NOTE: GIKFUN 1.2 Moisture sensors seem to range from ~340(Capacitor submerged in water) to ~670(Dry air)
  45. // GIKFUN 2.0 Seem to run this range (~290 wet, ~700 Dry) but responds much slower as moisture increases, responds quickly to drying).
  46. // These tests done with factory ~8" jumper harness. Will retest with final length harnesses and adjust
  47.  
  48.  
  49.  
  50. // Zone 1 setpoints
  51. int trigger1Low = 330;
  52. int trigger1High = 400;
  53.  
  54. // Zone 2 setpoints
  55. int trigger2Low = 330;
  56. int trigger2High = 400;
  57.  
  58. // Zone 3 setpoints
  59. int trigger3Low = 330;
  60. int trigger3High = 400;
  61.  
  62. // Zone 4 setpoints
  63. int trigger4Low = 330;
  64. int trigger4High = 400;
  65.  
  66. // Zone 5 setpoints
  67. int trigger5Low = 330;
  68. int trigger5High = 400;
  69.  
  70. // Zone 6 setpoints
  71. int trigger6Low = 330;
  72. int trigger6High = 400;
  73.  
  74. // Zone setpoint arrays
  75.  
  76. int triggerHigh[] {trigger1High, trigger2High, trigger3High, trigger4High, trigger5High, trigger6High}; // Puts triggerLow points in an array
  77. int triggerLow[] {trigger1Low, trigger2Low, trigger3Low, trigger4Low, trigger5Low, trigger6Low}; // Puts triggerHigh points in an array
  78.  
  79.  
  80. //// -------------------CODE----------------------
  81.  
  82. // ---Pin Assignments--
  83.  
  84. // Set Pin Assignments for Zone Status LED's
  85.  
  86. const int zone1 = 8;
  87. const int zone2 = 9;
  88. const int zone3 = 10;
  89. const int zone4 = 11;
  90. const int zone5 = 12;
  91. const int zone6 = 13;
  92. const int zoneLED[] {zone1, zone2, zone3, zone4, zone5, zone6}; // Puts output LEDs in an array
  93.  
  94.  
  95. // Set pin assignments for OUT pins
  96.  
  97.  
  98. const int out1 = 2;
  99. const int out2 = 3;
  100. const int out3 = 4;
  101. const int out4 = 5;
  102. const int out5 = 6;
  103. const int out6 = 7;
  104. const int output[] {out1, out2, out3, out4, out5, out6}; // Puts output pins in an array
  105.  
  106. // Set pin asignments for sensor inputs and read delays (done with millis, not delay)
  107.  
  108. const byte sens1 = A0;
  109. const byte sens2 = A1;
  110. const byte sens3 = A2;
  111. const byte sens4 = A3;
  112. const byte sens5 = A4;
  113. const byte sens6 = A5;
  114. const byte sens[] {sens1, sens2, sens3, sens4, sens5, sens6}; // Put analog input pins in an array
  115.  
  116. // --Variables--
  117.  
  118. // Delay Variables
  119.  
  120. const int sensorReadDelay[] {500, 500, 500, 500, 500, 500}; // delay between sensor readings in millis
  121. unsigned long lastSensorReadTime[] {0, 0, 0, 0, 0, 0}; //the last time a sensor was read
  122. unsigned long serialDelay = 3000; // delay between printing to serial monitor in millis
  123. unsigned long lastSerialPrintTime = 0; // the last time the serial monitor was printed too
  124.  
  125.  
  126. // Analog sensor reading values sensors 1-6
  127. int sensor[6]; //Sensor reading values array
  128.  
  129.  
  130. // Sensor pins 1-6 states ("1" = Low, "2" = Neutral, "3" = High)
  131. int zoneState1;
  132. int zoneState2;
  133. int zoneState3;
  134. int zoneState4;
  135. int zoneState5;
  136. int zoneState6;
  137. int zoneState[] {zoneState1, zoneState2, zoneState3, zoneState4, zoneState5, zoneState6}; //Zone pin state array
  138.  
  139. // Output pin values outputs 1-6
  140.  
  141. int outRead1;
  142. int outRead2;
  143. int outRead3;
  144. int outRead4;
  145. int outRead5;
  146. int outRead6;
  147. int outRead[] {outRead1, outRead2, outRead3, outRead4, outRead5, outRead6}; // Output pin array
  148.  
  149. // Output LED pin values outputs 1-6
  150.  
  151. int outReadLED1;
  152. int outReadLED2;
  153. int outReadLED3;
  154. int outReadLED4;
  155. int outReadLED5;
  156. int outReadLED6;
  157. int ledState[] {outReadLED1, outReadLED2, outReadLED3, outReadLED4, outReadLED5, outReadLED6}; // Zone Active LED high/low array
  158.  
  159. // Serial States where neede
  160. void setup() {
  161.  
  162. // start the serial monitor and display welcome message
  163. Serial.begin(9600);
  164. delay(1000);
  165. Serial.println( " Processes Started ");
  166. Serial.println(" --ZONE COMMAND VERSION 1.5 (FOR LOOP CONTROL)-- ");
  167. Serial.println(" --6 ZONE CONTROL BOARD-- ");
  168. Serial.println(" -- ");
  169.  
  170. // set LED indicator pins to output.
  171. pinMode(zone1, OUTPUT);
  172. pinMode(zone2, OUTPUT);
  173. pinMode(zone3, OUTPUT);
  174. pinMode(zone4, OUTPUT);
  175. pinMode(zone5, OUTPUT);
  176. pinMode(zone6, OUTPUT);
  177. // set OUT pins to output
  178. pinMode(out1, OUTPUT);
  179. pinMode(out2, OUTPUT);
  180. pinMode(out3, OUTPUT);
  181. pinMode(out4, OUTPUT);
  182. pinMode(out5, OUTPUT);
  183. pinMode(out6, OUTPUT);
  184. // set sensor pins to input
  185. pinMode(sens1, INPUT);
  186. pinMode(sens2, INPUT);
  187. pinMode(sens3, INPUT);
  188. pinMode(sens4, INPUT);
  189. pinMode(sens5, INPUT);
  190. pinMode(sens6, INPUT);
  191. }
  192.  
  193. void zoneControl() {
  194. if (zoneActive[zoneNumber]) {
  195. sensor[zoneNumber] = analogRead(sens[zoneNumber]);
  196. if ((unsigned long)(millis() - lastSensorReadTime[zoneNumber]) >= sensorReadDelay[zoneNumber]) {
  197. lastSensorReadTime[zoneNumber] = millis();
  198.  
  199. // Set the sensor reading levels for the output trigger for sensor
  200.  
  201. if (!fallingTrigger) { // if you want your outputs triggering on a rising value
  202. if (sensor[zoneNumber] <= triggerLow[zoneNumber]) {
  203. zoneState[zoneNumber] = 1; // Reading is below trigger, turn on relay
  204. }
  205. else if (sensor[zoneNumber] >= triggerLow[zoneNumber] && sensor[zoneNumber] <= triggerHigh[zoneNumber]) {
  206. zoneState[zoneNumber] = 2; // Reading is in between triggers, maintain relay state
  207. }
  208. else if (sensor[zoneNumber] >= triggerHigh[zoneNumber]) {
  209. zoneState[zoneNumber] = 3; // Reading is above trigger, turn off relay
  210. }
  211. }
  212. else if (fallingTrigger) { // if you want your outputs triggering on a falling value
  213. if (sensor[zoneNumber] >= triggerLow[zoneNumber]) {
  214. zoneState[zoneNumber] = 1; // Reading is above trigger, turn on relay
  215. }
  216. else if (sensor[zoneNumber] >= triggerLow[zoneNumber] && sensor[zoneNumber] <= triggerHigh[zoneNumber]) {
  217. zoneState[zoneNumber] = 2; // Reading is in between triggers, maintain relay state
  218. }
  219. else if (sensor[zoneNumber] <= triggerHigh[zoneNumber]) {
  220. zoneState[zoneNumber] = 3; // Reading is below trigger, turn off relay
  221. }
  222. }
  223. }
  224.  
  225. // Trigger relays based on High/Low triggering
  226. if (relayLow) { //if the relays are activated by being driven low
  227. if (zoneState[zoneNumber] == 1) { // if the output needs to be turned on
  228. digitalWrite(output[zoneNumber], LOW);
  229. digitalWrite(zoneLED[zoneNumber], HIGH); //Turn Zone Indicator LED On
  230. }
  231. else if (zoneState[zoneNumber] == 3) { //if the output needs to be turned off
  232. digitalWrite(output[zoneNumber], HIGH);
  233. digitalWrite(zoneLED[zoneNumber], LOW); //Turn Zone Indicator LED Off
  234. }
  235. }
  236. else if (!relayLow) { //if the relays are actived by being driven high
  237. if (zoneState[zoneNumber] == 1) { // if the output needs to be turned on
  238. digitalWrite(output[zoneNumber], HIGH);
  239. digitalWrite(zoneLED[zoneNumber], HIGH); //Turn Zone Indicator LED On
  240. }
  241. else if (zoneState[zoneNumber] == 3) { //if the output needs to be turned off
  242. digitalWrite(output[zoneNumber], LOW);
  243. digitalWrite(zoneLED[zoneNumber], LOW); //Turn Zone Indicator LED Off
  244. }
  245. }
  246. }
  247. }
  248.  
  249.  
  250. // Display Serial debugging messages to serial monitor if serialDisplay set to true
  251. void serialDebug() {
  252. // ZONE DETAILS
  253. if (zoneActive[serialNumber]) { // if the zone is active
  254. outRead[serialNumber] = digitalRead(output[serialNumber]); //check state of output
  255. ledState[serialNumber] = digitalRead(zoneLED[serialNumber]); //check state of zone indicator LED
  256. // sensor[serialNumber] = analogRead(sens[serialNumber]); // check value of zone sensor
  257. Serial.println(" ZONE STATUS ");
  258. Serial.println(" -- ");
  259. Serial.println("ZONE: ");
  260. Serial.println(serialNumber);
  261. Serial.println("Output Status: (1 is 5V or HIGH, 0 is LOW or 0V)");
  262. Serial.print(outRead[serialNumber]);
  263. Serial.println("");
  264. Serial.println("LED Status: ");
  265. Serial.print(ledState[serialNumber]);
  266. Serial.println("");
  267. Serial.println(" Sensor Value: ");
  268. Serial.print(sensor[serialNumber]);
  269. Serial.println("");
  270. Serial.println("Zone State ('1' = LOW, '2' = NEUTRAL, '3' = HIGH): ");
  271. Serial.print(zoneState[serialNumber]);
  272. Serial.println("");
  273. Serial.println("");
  274. Serial.println("");
  275. }
  276.  
  277. }
  278.  
  279. // Loop to progress zoneControl through each zone
  280. void zoneLoop() {
  281. for (zoneNumber = 0; zoneNumber < 5; zoneNumber++) {
  282. zoneControl();
  283. }
  284. for (zoneNumber = 5; zoneNumber > 0; zoneNumber--) {
  285. zoneControl();
  286. }
  287. }
  288.  
  289. // Loop to progress serialDebug through each zone
  290. void serialLoop() {
  291. if (serialDisplay) { // if debug mode is turned on
  292. if ((unsigned long)(millis() - lastSerialPrintTime) >= serialDelay) {
  293. lastSerialPrintTime = millis();
  294. if (relayLow) { // if the Relays are activated by a low signal
  295. Serial.println(" Relays are set to be activated by a LOW (0V) signal ");
  296. }
  297. else if (!relayLow) { // if the Relays are activated by a high signal
  298. Serial.println(" Relays are set to be activated by a HIGH (5V) signal ");
  299. }
  300. if (fallingTrigger) { // If the outputs are triggered by a falling value
  301. Serial.println(" Outputs are triggered on a falling value");
  302. }
  303. else if (!fallingTrigger) { // if the outputs are triggered by a rising value
  304. Serial.println(" Outputs are triggered on a rising value");
  305. }
  306. for (serialNumber = 0; serialNumber < 5; serialNumber++) {
  307. serialDebug();
  308. }
  309. for (serialNumber = 5; serialNumber > 0; serialNumber--) {
  310. serialDebug();
  311. }
  312. }
  313. }
  314. }
  315.  
  316. void loop() {
  317. zoneLoop();
  318. serialLoop();
  319. }
  320.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement