6-Unit Chemostat Bioreactor (Recommended for Evolution)
6-unit (100ml) chemostat microbial bioreactor (recommended for long term microbial evolution experiment).
Components and supplies
1
Arduino Mega 2560
1
Adafruit Motor Shield V2
Tools and machines
1
Peristalitic Pump (Chinese made)
Apps and platforms
1
Meguno Link
Project description
Code
Chemostat 6 unit, one arduino based.
arduino
1 2 #include <Wire.h> 3 4 #include "CommandHandler.h" 5 #include "TimeLib.h" 6 7 #include "MegunoLink.h" 8 Message MyCSVMessage("Data"); 9 10 11 float ODVarT8; 12 13 float FEDWASTEVAR1; 14 float FEDWASTEVAR2; 15 16 float Multivar1=0.5; 17 float Multivar2=0.5; 18 float Multivar3=0.5; 19 float Multivar4=0.5; 20 float Multivar5=0.5; 21 float Multivar6=0.5; 22 23 24 unsigned long Timediff1; 25 unsigned long Timediff2; 26 unsigned long Timediff3; 27 unsigned long Timediff4; 28 unsigned long Timediff5; 29 unsigned long Timediff6; 30 31 32 33 unsigned long Timediff2a; 34 unsigned long Timediff2b; 35 unsigned long Timediff2c; 36 unsigned long Timediff2d; 37 unsigned long Timediff2e; 38 unsigned long Timediff2f; 39 40 41 float addPumpOFF1; 42 float addPumpOFF2; 43 float addPumpOFF3; 44 float addPumpOFF4; 45 float addPumpOFF5; 46 float addPumpOFF6; 47 48 49 float TimeVarT2 = millis(); 50 51 float FLOWINMIN1 = 250; 52 float FLOWINMIN2 = 250; 53 float FLOWINMIN3 = 0; 54 float FLOWINMIN4 = 0; 55 float FLOWINMIN5 = 0; 56 float FLOWINMIN6 = 0; 57 58 59 float PUMPONV1 = 0.001; 60 float PUMPONV2 = 0.001; 61 float PUMPONV3 = 0.001; 62 float PUMPONV4 = 0.001; 63 float PUMPONV5 = 0.001; 64 float PUMPONV6 = 0.001; 65 66 67 68 float PUMPOFFV1 = 1000; 69 float PUMPOFFV2 = 1000; 70 float PUMPOFFV3 = 1000; 71 float PUMPOFFV4 = 1000; 72 float PUMPOFFV5 = 1000; 73 float PUMPOFFV6 = 1000; 74 75 76 unsigned long previousMillis = 0; 77 unsigned long previousMillis2 = 0; 78 unsigned long previousMillis3 = 0; 79 unsigned long previousMillis4 = 0; 80 unsigned long previousMillis5 = 0; 81 unsigned long previousMillis6 = 0; 82 83 84 unsigned long previousMillis2a = 0; 85 unsigned long previousMillis2b = 0; 86 unsigned long previousMillis2c = 0; 87 unsigned long previousMillis2d = 0; 88 unsigned long previousMillis2e = 0; 89 unsigned long previousMillis2f = 0; 90 91 92 93 unsigned long previousMillisT1 = 0; 94 unsigned long previousMillisT2 = 0; 95 unsigned long previousMillisT3 = 0; 96 unsigned long previousMillisT4 = 0; 97 unsigned long previousMillisT5 = 0; 98 unsigned long previousMillisT6 = 0; 99 100 unsigned long Countdownsec1; 101 unsigned long Countdownmin1; 102 unsigned long Countdownhr1; 103 104 105 unsigned long Countdownsec2; 106 unsigned long Countdownmin2; 107 unsigned long Countdownhr2; 108 109 110 unsigned long Countdownsec3; 111 unsigned long Countdownmin3; 112 unsigned long Countdownhr3; 113 114 115 unsigned long Countdownsec4; 116 unsigned long Countdownmin4; 117 unsigned long Countdownhr4; 118 119 120 unsigned long Countdownsec5; 121 unsigned long Countdownmin5; 122 unsigned long Countdownhr5; 123 124 125 unsigned long Countdownsec6; 126 unsigned long Countdownmin6; 127 unsigned long Countdownhr6; 128 129 // Select which 'port' M1, M2, M3 or M4. In this case, M1 (V2) 130 131 132 CommandHandler<100> SerialCommandHandler; 133 #include <SoftwareSerial.h> 134 InterfacePanel MyPanel; 135 136 #include <Adafruit_MotorShield.h> 137 Adafruit_MotorShield AFMS(0x60); 138 Adafruit_MotorShield AFMS1(0x61); 139 Adafruit_MotorShield AFMS2(0x62); 140 #include <avr/wdt.h> 141 142 Adafruit_DCMotor *myMotor1 = AFMS.getMotor(1); 143 Adafruit_DCMotor *myMotor2 = AFMS.getMotor(2); 144 Adafruit_DCMotor *myMotor3 = AFMS.getMotor(3); 145 Adafruit_DCMotor *myMotor4 = AFMS.getMotor(4); 146 147 Adafruit_DCMotor *myMotor1Sh1 = AFMS1.getMotor(1); 148 Adafruit_DCMotor *myMotor2Sh1 = AFMS1.getMotor(2); 149 Adafruit_DCMotor *myMotor3Sh1 = AFMS1.getMotor(3); 150 Adafruit_DCMotor *myMotor4Sh1 = AFMS1.getMotor(4); 151 152 Adafruit_DCMotor *myMotor1Sh2 = AFMS2.getMotor(1); 153 Adafruit_DCMotor *myMotor2Sh2 = AFMS2.getMotor(2); 154 Adafruit_DCMotor *myMotor3Sh2 = AFMS2.getMotor(3); 155 Adafruit_DCMotor *myMotor4Sh2 = AFMS2.getMotor(4); 156 157 158 void Cmd_MultipleVaal1(CommandParameter &p) 159 { 160 161 Multivar1 = p.NextParameterAsDouble(); 162 MyPanel.SetNumber(F("Multi1"),Multivar1 ); 163 164 } 165 166 167 void Cmd_MultipleVaal2(CommandParameter &p) 168 { 169 170 Multivar2 = p.NextParameterAsDouble(); 171 MyPanel.SetNumber(F("Multi2"),Multivar2 ); 172 173 } 174 175 176 void Cmd_MultipleVaal3(CommandParameter &p) 177 { 178 179 Multivar3 = p.NextParameterAsDouble(); 180 MyPanel.SetNumber(F("Multi3"),Multivar3 ); 181 182 } 183 184 185 186 void Cmd_MultipleVaal4(CommandParameter &p) 187 { 188 189 Multivar4 = p.NextParameterAsDouble(); 190 MyPanel.SetNumber(F("Multi4"),Multivar4 ); 191 192 } 193 194 195 void Cmd_MultipleVaal5(CommandParameter &p) 196 { 197 198 Multivar5 = p.NextParameterAsDouble(); 199 MyPanel.SetNumber(F("Multi5"),Multivar5 ); 200 201 } 202 203 204 void Cmd_MultipleVaal6(CommandParameter &p) 205 { 206 207 Multivar6 = p.NextParameterAsDouble(); 208 MyPanel.SetNumber(F("Multi6"),Multivar6 ); 209 210 } 211 212 213 214 215 216 void Cmd_FWValueBB(CommandParameter &p) 217 { 218 219 FEDWASTEVAR1 = p.NextParameterAsDouble(); 220 MyPanel.SetNumber(F("FWValueV"),FEDWASTEVAR1 ); 221 222 FEDWASTEVAR2= FEDWASTEVAR1*1000; 223 } 224 225 void Cmd_FeedBDown(CommandParameter &p) 226 { 227 228 MyPanel.ShowControl(F("Arrow1")); 229 230 myMotor1->setSpeed(FLOWINMIN1); 231 myMotor1->run(FORWARD); 232 myMotor1Sh2->setSpeed(200); 233 myMotor1Sh2->run(FORWARD); 234 delay(FEDWASTEVAR2); 235 236 237 SerialCommandHandler.Process(); 238 239 240 MyPanel.SetNumber(F("PTime"), hour()); 241 MyPanel.SetNumber(F("PTime2"), minute()); 242 MyPanel.SetNumber(F("PTime3"), second()); 243 MyPanel.SetNumber(F("PTime4"), day()); 244 MyPanel.SetNumber(F("PTime5"), month()); 245 } 246 247 248 void Cmd_WasteBDown(CommandParameter &p) 249 { 250 251 MyPanel.ShowControl(F("Arrow2")); 252 myMotor2->setSpeed(FLOWINMIN1); 253 myMotor2->run(FORWARD); 254 myMotor1Sh2->setSpeed(200); 255 myMotor1Sh2->run(FORWARD); 256 delay(FEDWASTEVAR2); 257 258 259 260 SerialCommandHandler.Process(); 261 262 263 MyPanel.SetNumber(F("PTime"), hour()); 264 MyPanel.SetNumber(F("PTime2"), minute()); 265 MyPanel.SetNumber(F("PTime3"), second()); 266 MyPanel.SetNumber(F("PTime4"), day()); 267 MyPanel.SetNumber(F("PTime5"), month()); 268 269 270 271 } 272 273 void Cmd_PUMPON1(CommandParameter &p) 274 { 275 PUMPONV1 = p.NextParameterAsDouble(); 276 MyPanel.SetNumber(F("PUMPONVAL1"), PUMPONV1); 277 278 } 279 280 281 void Cmd_PUMPOFF1(CommandParameter &p) 282 { 283 PUMPOFFV1 = p.NextParameterAsDouble(); 284 MyPanel.SetNumber(F("PUMPOFFVAL1"), PUMPOFFV1); 285 ODVarT8=PUMPOFFV1*3600000; 286 hour(0); 287 second(0); 288 minute(0); 289 Timediff2 = PUMPOFFV1*3600000; 290 addPumpOFF1 = PUMPOFFV1 + hour(); 291 } 292 293 294 295 void Cmd_PUMPON2(CommandParameter &p) 296 { 297 PUMPONV2 = p.NextParameterAsDouble(); 298 MyPanel.SetNumber(F("PUMPONVAL2"), PUMPONV2); 299 300 } 301 302 303 void Cmd_PUMPOFF2(CommandParameter &p) 304 { 305 PUMPOFFV2 = p.NextParameterAsDouble(); 306 MyPanel.SetNumber(F("PUMPOFFVAL2"), PUMPOFFV2); 307 ODVarT8=PUMPOFFV2*3600000; 308 hour(0); 309 second(0); 310 minute(0); 311 Timediff2 = PUMPOFFV2*3600000; 312 addPumpOFF2 = PUMPOFFV2 + hour(); 313 } 314 315 316 317 void Cmd_PUMPON3(CommandParameter &p) 318 { 319 PUMPONV3 = p.NextParameterAsDouble(); 320 MyPanel.SetNumber(F("PUMPONVAL3"), PUMPONV3); 321 322 } 323 324 325 void Cmd_PUMPOFF3(CommandParameter &p) 326 { 327 PUMPOFFV3 = p.NextParameterAsDouble(); 328 MyPanel.SetNumber(F("PUMPOFFVAL3"), PUMPOFFV3); 329 ODVarT8=PUMPOFFV3*3600000; 330 hour(0); 331 second(0); 332 minute(0); 333 Timediff2 = PUMPOFFV3*3600000; 334 addPumpOFF3 = PUMPOFFV3 + hour(); 335 } 336 337 338 339 void Cmd_PUMPON4(CommandParameter &p) 340 { 341 PUMPONV4 = p.NextParameterAsDouble(); 342 MyPanel.SetNumber(F("PUMPONVAL4"), PUMPONV4); 343 344 } 345 346 347 void Cmd_PUMPOFF4(CommandParameter &p) 348 { 349 PUMPOFFV4 = p.NextParameterAsDouble(); 350 MyPanel.SetNumber(F("PUMPOFFVAL4"), PUMPOFFV4); 351 ODVarT8=PUMPOFFV4*3600000; 352 hour(0); 353 second(0); 354 minute(0); 355 Timediff2 = PUMPOFFV4*3600000; 356 addPumpOFF4 = PUMPOFFV4 + hour(); 357 } 358 359 360 361 void Cmd_PUMPON5(CommandParameter &p) 362 { 363 PUMPONV5 = p.NextParameterAsDouble(); 364 MyPanel.SetNumber(F("PUMPONVAL5"), PUMPONV5); 365 366 } 367 368 369 void Cmd_PUMPOFF5(CommandParameter &p) 370 { 371 PUMPOFFV5 = p.NextParameterAsDouble(); 372 MyPanel.SetNumber(F("PUMPOFFVAL5"), PUMPOFFV5); 373 ODVarT8=PUMPOFFV5*3600000; 374 hour(0); 375 second(0); 376 minute(0); 377 Timediff2 = PUMPOFFV5*3600000; 378 addPumpOFF5 = PUMPOFFV5 + hour(); 379 } 380 381 382 383 void Cmd_PUMPON6(CommandParameter &p) 384 { 385 PUMPONV6 = p.NextParameterAsDouble(); 386 MyPanel.SetNumber(F("PUMPONVAL6"), PUMPONV6); 387 388 } 389 390 391 void Cmd_PUMPOFF6(CommandParameter &p) 392 { 393 PUMPOFFV6 = p.NextParameterAsDouble(); 394 MyPanel.SetNumber(F("PUMPOFFVAL6"), PUMPOFFV6); 395 ODVarT8=PUMPOFFV6*3600000; 396 hour(0); 397 second(0); 398 minute(0); 399 Timediff2 = PUMPOFFV6*3600000; 400 addPumpOFF6 = PUMPOFFV6 + hour(); 401 } 402 403 404 405 406//------Reports-------------------------- 407 408void Cmd_ReportRefresh(CommandParameter &p) 409{ 410 411MyPanel.SetText(F("Report2"), "2"); 412 413MyPanel.SetNumber(F("Report5"), PUMPOFFV1); 414MyPanel.SetNumber(F("Report6"), PUMPONV1); 415MyPanel.SetNumber(F("Report8"), FLOWINMIN1); 416 417MyPanel.SetNumber(F("FWValueV"),FEDWASTEVAR1 ); 418MyPanel.SetNumber(F("PUMPONVAL"), PUMPONV1); 419MyPanel.SetNumber(F("PUMPOFFVAL"), PUMPOFFV1); 420MyPanel.SetNumber(F("INMINVAL"), FLOWINMIN1); 421MyPanel.SetNumber(F("INMINVAL"), FLOWINMIN1); 422MyPanel.SetNumber(F("PUMPOFFVAL"), PUMPOFFV1); 423 424SerialCommandHandler.Process(); 425 426MyPanel.SetNumber(F("PTime"), hour()); 427MyPanel.SetNumber(F("PTime2"), minute()); 428MyPanel.SetNumber(F("PTime3"), second()); 429MyPanel.SetNumber(F("PTime4"), day()); 430MyPanel.SetNumber(F("PTime5"), month()); 431 432 433 } 434//--------------------------------------------------------------------------------- 435 436 437 438 void Cmd_Move1(CommandParameter &p) 439 { 440 MyPanel.SetText(F("Switch"), "ON"); 441 MyPanel.SetBackColor(F("Switch"), F("green")); 442 FLOWINMIN1 = 250; 443 PUMPONV1 = 0.001; 444 PUMPOFFV1 = 1000; 445 unsigned long currentMillis = millis(); 446 unsigned long currenthour = hour(0); 447 unsigned long currentsec = second(0); 448 unsigned long currentmin = minute(0); 449 MyPanel.SetNumber(F("INMINVAL"), FLOWINMIN1); 450 451 setTime(00,00,00,01, 01, 0000); 452 453 previousMillis = currentMillis; 454 previousMillis2a = currentMillis; 455 456 457 458 SerialCommandHandler.Process(); 459 460 461 MyPanel.SetNumber(F("PTime"), hour()); 462 MyPanel.SetNumber(F("PTime2"), minute()); 463 MyPanel.SetNumber(F("PTime3"), second()); 464 MyPanel.SetNumber(F("PTime4"), day()); 465 MyPanel.SetNumber(F("PTime5"), month()); 466 467 } 468 469 void Cmd_Move2(CommandParameter &p) 470 { 471 MyPanel.SetText(F("Switch"), "ON"); 472 MyPanel.SetBackColor(F("Switch"), F("green")); 473 FLOWINMIN2 = 250; 474 PUMPONV1 = 0.001; 475 PUMPOFFV1 = 1000; 476 unsigned long currentMillis = millis(); 477 unsigned long currenthour = hour(0); 478 unsigned long currentsec = second(0); 479 unsigned long currentmin = minute(0); 480 MyPanel.SetNumber(F("INMINVAL1"), FLOWINMIN2); 481 482 setTime(00,00,00,01, 01, 0000); 483 484 previousMillis2 = currentMillis; 485 previousMillis2b = currentMillis; 486 487 488 489 SerialCommandHandler.Process(); 490 491 492 MyPanel.SetNumber(F("PTime"), hour()); 493 MyPanel.SetNumber(F("PTime2"), minute()); 494 MyPanel.SetNumber(F("PTime3"), second()); 495 MyPanel.SetNumber(F("PTime4"), day()); 496 MyPanel.SetNumber(F("PTime5"), month()); 497 498 } 499 500 void Cmd_Move3(CommandParameter &p) 501 { 502 MyPanel.SetText(F("Switch"), "ON"); 503 MyPanel.SetBackColor(F("Switch"), F("green")); 504 FLOWINMIN3 = 250; 505 PUMPONV1 = 0.001; 506 PUMPOFFV1 = 1000; 507 unsigned long currentMillis = millis(); 508 unsigned long currenthour = hour(0); 509 unsigned long currentsec = second(0); 510 unsigned long currentmin = minute(0); 511 MyPanel.SetNumber(F("INMINVAL2"), FLOWINMIN3); 512 513 setTime(00,00,00,01, 01, 0000); 514 515 previousMillis3 = currentMillis; 516 previousMillis2c = currentMillis; 517 518 519 520 SerialCommandHandler.Process(); 521 522 523 MyPanel.SetNumber(F("PTime"), hour()); 524 MyPanel.SetNumber(F("PTime2"), minute()); 525 MyPanel.SetNumber(F("PTime3"), second()); 526 MyPanel.SetNumber(F("PTime4"), day()); 527 MyPanel.SetNumber(F("PTime5"), month()); 528 529 } 530 531 void Cmd_Move4(CommandParameter &p) 532 { 533 MyPanel.SetText(F("Switch"), "ON"); 534 MyPanel.SetBackColor(F("Switch"), F("green")); 535 FLOWINMIN4 = 250; 536 PUMPONV1 = 0.001; 537 PUMPOFFV1 = 1000; 538 unsigned long currentMillis = millis(); 539 unsigned long currenthour = hour(0); 540 unsigned long currentsec = second(0); 541 unsigned long currentmin = minute(0); 542 MyPanel.SetNumber(F("INMINVAL3"), FLOWINMIN4); 543 544 setTime(00,00,00,01, 01, 0000); 545 546 previousMillis4 = currentMillis; 547 previousMillis2d = currentMillis; 548 549 550 551 SerialCommandHandler.Process(); 552 553 554 MyPanel.SetNumber(F("PTime"), hour()); 555 MyPanel.SetNumber(F("PTime2"), minute()); 556 MyPanel.SetNumber(F("PTime3"), second()); 557 MyPanel.SetNumber(F("PTime4"), day()); 558 MyPanel.SetNumber(F("PTime5"), month()); 559 560 } 561 562 void Cmd_Move5(CommandParameter &p) 563 { 564 MyPanel.SetText(F("Switch"), "ON"); 565 MyPanel.SetBackColor(F("Switch"), F("green")); 566 FLOWINMIN5 = 250; 567 PUMPONV1 = 0.001; 568 PUMPOFFV1 = 1000; 569 unsigned long currentMillis = millis(); 570 unsigned long currenthour = hour(0); 571 unsigned long currentsec = second(0); 572 unsigned long currentmin = minute(0); 573 MyPanel.SetNumber(F("INMINVAL4"), FLOWINMIN5); 574 575 setTime(00,00,00,01, 01, 0000); 576 577 previousMillis5 = currentMillis; 578 previousMillis2e = currentMillis; 579 580 581 582 SerialCommandHandler.Process(); 583 584 585 MyPanel.SetNumber(F("PTime"), hour()); 586 MyPanel.SetNumber(F("PTime2"), minute()); 587 MyPanel.SetNumber(F("PTime3"), second()); 588 MyPanel.SetNumber(F("PTime4"), day()); 589 MyPanel.SetNumber(F("PTime5"), month()); 590 591 } 592 593 void Cmd_Move6(CommandParameter &p) 594 { 595 MyPanel.SetText(F("Switch"), "ON"); 596 MyPanel.SetBackColor(F("Switch"), F("green")); 597 FLOWINMIN6 = 250; 598 PUMPONV1 = 0.001; 599 PUMPOFFV1 = 1000; 600 unsigned long currentMillis = millis(); 601 unsigned long currenthour = hour(0); 602 unsigned long currentsec = second(0); 603 unsigned long currentmin = minute(0); 604 MyPanel.SetNumber(F("INMINVAL5"), FLOWINMIN6); 605 606 setTime(00,00,00,01, 01, 0000); 607 608 previousMillis6 = currentMillis; 609 previousMillis2f = currentMillis; 610 611 612 613 SerialCommandHandler.Process(); 614 615 616 MyPanel.SetNumber(F("PTime"), hour()); 617 MyPanel.SetNumber(F("PTime2"), minute()); 618 MyPanel.SetNumber(F("PTime3"), second()); 619 MyPanel.SetNumber(F("PTime4"), day()); 620 MyPanel.SetNumber(F("PTime5"), month()); 621 622 } 623 624 625 626 627 void Cmd_Stop1(CommandParameter &p) 628 { 629 MyPanel.SetText(F("Switch"), "OFF"); 630 MyPanel.SetBackColor(F("Switch"), F("red")); 631 FLOWINMIN1 = 0; 632 PUMPONV1 = 0.001; 633 PUMPOFFV1 = 1000; 634 MyPanel.SetNumber(F("INMINVAL"), FLOWINMIN1); 635 } 636 637 638 void Cmd_Stop2(CommandParameter &p) 639 { 640 MyPanel.SetText(F("Switch"), "OFF"); 641 MyPanel.SetBackColor(F("Switch"), F("red")); 642 643 FLOWINMIN2 = 0; 644 PUMPONV2 = 0.001; 645 PUMPOFFV2 = 1000; 646 MyPanel.SetNumber(F("INMINVAL1"), FLOWINMIN2); 647 } 648 649 650 void Cmd_Stop3(CommandParameter &p) 651 { 652 MyPanel.SetText(F("Switch"), "OFF"); 653 MyPanel.SetBackColor(F("Switch"), F("red")); 654 FLOWINMIN3 = 0; 655 PUMPONV3 = 0.001; 656 PUMPOFFV3 = 1000; 657 MyPanel.SetNumber(F("INMINVAL2"), FLOWINMIN3); 658 659 } 660 661 662void Cmd_Stop4(CommandParameter &p) 663 { 664 MyPanel.SetText(F("Switch"), "OFF"); 665 MyPanel.SetBackColor(F("Switch"), F("red")); 666 FLOWINMIN4 = 0; 667 PUMPONV4 = 0.001; 668 PUMPOFFV4 = 1000; 669 MyPanel.SetNumber(F("INMINVAL3"), FLOWINMIN4); 670 671 } 672 673 674void Cmd_Stop5(CommandParameter &p) 675 { 676 MyPanel.SetText(F("Switch"), "OFF"); 677 MyPanel.SetBackColor(F("Switch"), F("red")); 678 FLOWINMIN5 = 0; 679 PUMPONV5 = 0.001; 680 PUMPOFFV5 = 1000; 681 MyPanel.SetNumber(F("INMINVAL4"), FLOWINMIN5); 682 683 } 684 685 686 void Cmd_Stop6(CommandParameter &p) 687 { 688 MyPanel.SetText(F("Switch"), "OFF"); 689 MyPanel.SetBackColor(F("Switch"), F("red")); 690 FLOWINMIN6 = 0; 691 PUMPONV6 = 0.001; 692 PUMPOFFV6 = 1000; 693 MyPanel.SetNumber(F("INMINVAL5"), FLOWINMIN6); 694 695 } 696 697//------------------------------------------------------------------------------------ 698 699 void setup() { 700 Serial.begin(9600); 701 702 Wire.begin(); 703 704 705 Multivar1=0.5; 706 Multivar2=0.5; 707 Multivar3=0.5; 708 Multivar4=0.5; 709 Multivar5=0.5; 710 Multivar6=0.5; 711 712 713 714 715 716 SerialCommandHandler.AddCommand(F("Go1"), Cmd_Move1); 717 SerialCommandHandler.AddCommand(F("Go2"), Cmd_Move2); 718 SerialCommandHandler.AddCommand(F("Go3"), Cmd_Move3); 719 SerialCommandHandler.AddCommand(F("Go4"), Cmd_Move4); 720 SerialCommandHandler.AddCommand(F("Go5"), Cmd_Move5); 721 SerialCommandHandler.AddCommand(F("Go6"), Cmd_Move6); 722 723 724 SerialCommandHandler.AddCommand(F("Stop1"), Cmd_Stop1); 725 SerialCommandHandler.AddCommand(F("Stop2"), Cmd_Stop2); 726 SerialCommandHandler.AddCommand(F("Stop3"), Cmd_Stop3); 727 SerialCommandHandler.AddCommand(F("Stop4"), Cmd_Stop4); 728 SerialCommandHandler.AddCommand(F("Stop5"), Cmd_Stop5); 729 SerialCommandHandler.AddCommand(F("Stop6"), Cmd_Stop6); 730 731 732 733 SerialCommandHandler.AddCommand(F("PUMPDELAYON1"), Cmd_PUMPON1); 734 SerialCommandHandler.AddCommand(F("PUMPDELAYOFF1"), Cmd_PUMPOFF1); 735 736 737 SerialCommandHandler.AddCommand(F("PUMPDELAYON2"), Cmd_PUMPON2); 738 SerialCommandHandler.AddCommand(F("PUMPDELAYOFF2"), Cmd_PUMPOFF2); 739 740 741 SerialCommandHandler.AddCommand(F("PUMPDELAYON3"), Cmd_PUMPON3); 742 SerialCommandHandler.AddCommand(F("PUMPDELAYOFF3"), Cmd_PUMPOFF3); 743 744 745 SerialCommandHandler.AddCommand(F("PUMPDELAYON4"), Cmd_PUMPON4); 746 SerialCommandHandler.AddCommand(F("PUMPDELAYOFF4"), Cmd_PUMPOFF4); 747 748 749 SerialCommandHandler.AddCommand(F("PUMPDELAYON5"), Cmd_PUMPON5); 750 SerialCommandHandler.AddCommand(F("PUMPDELAYOFF5"), Cmd_PUMPOFF5); 751 752 753 SerialCommandHandler.AddCommand(F("PUMPDELAYON6"), Cmd_PUMPON6); 754 SerialCommandHandler.AddCommand(F("PUMPDELAYOFF6"), Cmd_PUMPOFF6); 755 756 757 758 759 760 761 762 SerialCommandHandler.AddCommand(F("Feed-BDown"), Cmd_FeedBDown); 763 SerialCommandHandler.AddCommand(F("FWValueBB"), Cmd_FWValueBB); 764 SerialCommandHandler.AddCommand(F("Waste-BDown"), Cmd_WasteBDown); 765 766 767 768 SerialCommandHandler.AddCommand(F("Report-Refresh"), Cmd_ReportRefresh); 769 770 771SerialCommandHandler.AddCommand(F("MultipleVaaal1"), Cmd_MultipleVaal1); 772SerialCommandHandler.AddCommand(F("MultipleVaaal2"), Cmd_MultipleVaal2); 773SerialCommandHandler.AddCommand(F("MultipleVaaal3"), Cmd_MultipleVaal3); 774SerialCommandHandler.AddCommand(F("MultipleVaaal4"), Cmd_MultipleVaal4); 775SerialCommandHandler.AddCommand(F("MultipleVaaal5"), Cmd_MultipleVaal5); 776SerialCommandHandler.AddCommand(F("MultipleVaaal6"), Cmd_MultipleVaal6); 777 778 779 780 781 //Combination system serial orders 782 783 784 785 786 AFMS.begin(); 787 myMotor1-> run(FORWARD); 788 myMotor2-> run(FORWARD); 789 myMotor3-> run(FORWARD); 790 myMotor4-> run(FORWARD); 791 792 793 myMotor1-> run(RELEASE); 794 myMotor2-> run(RELEASE); 795 myMotor3-> run(RELEASE); 796 myMotor4-> run(RELEASE); 797 798 799 800 AFMS1.begin(); 801 myMotor1Sh1-> run(FORWARD); 802 myMotor2Sh1-> run(FORWARD); 803 myMotor3Sh1-> run(FORWARD); 804 myMotor4Sh1-> run(FORWARD); 805 806 807 myMotor1Sh1-> run(RELEASE); 808 myMotor2Sh1-> run(RELEASE); 809 myMotor3Sh1-> run(RELEASE); 810 myMotor4Sh1-> run(RELEASE); 811 812 813 814 AFMS2.begin(); 815 myMotor1Sh2-> run(FORWARD); 816 myMotor2Sh2-> run(FORWARD); 817 myMotor3Sh2-> run(FORWARD); 818 myMotor4Sh2-> run(FORWARD); 819 820 821 myMotor1Sh2-> run(RELEASE); 822 myMotor2Sh2-> run(RELEASE); 823 myMotor3Sh2-> run(RELEASE); 824 myMotor4Sh2-> run(RELEASE); 825 826 827 } 828 829 830 831 void Stopoption(){ 832 833 } 834 835 void loop() 836 { 837 uint8_t i; 838 SerialCommandHandler.Process(); 839 840 unsigned long currentMillis = millis(); 841 unsigned long currentMillis2 = millis(); 842 unsigned long currentMillis3 = millis(); 843 unsigned long currentMillis4 = millis(); 844 845wdt_enable(WDTO_4S); 846 847 TimePlot TimeR1("TimeR1"); 848 TimeR1.SendData("TimeR1", Countdownhr1); 849 Timediff1= currentMillis - previousMillisT1; 850 Countdownhr1= ((Timediff2a - Timediff1)/3600000); 851 852 //----------------------------Reactor 1------------------------------- 853 854 if ((currentMillis - previousMillis) <= (PUMPOFFV1*3600000)) { 855 856 myMotor1->run(RELEASE); 857 myMotor2->run(RELEASE); 858 859 Countdownsec1= 60 - second(); 860 Countdownmin1= 60 - (minute()+1); 861 MyPanel.SetNumber(F("TtoNexta"), Countdownhr1); 862 MyPanel.SetNumber(F("TtoNext2a"),Countdownmin1); 863 MyPanel.SetNumber(F("TtoNext3a"),Countdownsec1 ); 864 865 } 866 else if ((currentMillis - previousMillis) <(((PUMPONV1*Multivar1)+PUMPOFFV1)*3600000)) { 867 868 myMotor2->setSpeed(FLOWINMIN1); 869 myMotor2->run(FORWARD); 870 871 } 872 873 wdt_reset(); 874wdt_disable(); 875wdt_enable(WDTO_2S); 876 if ((currentMillis - previousMillis2a) >=(((PUMPONV1*Multivar1)+PUMPOFFV1)*3600000)) { 877 myMotor2->run(RELEASE); 878 myMotor1->setSpeed(FLOWINMIN1); 879 myMotor1->run(FORWARD); 880 } 881 882 883 884 if ((currentMillis - previousMillis) >= ((PUMPONV1+PUMPOFFV1)*3600000)) { 885 886 myMotor1->run(RELEASE); 887 previousMillis = currentMillis; 888 previousMillis2a = currentMillis; 889 wdt_reset(); 890 wdt_disable(); 891 } 892 893 894 895 896 897//-----------------------------Reactor2--------------------------------- 898 TimePlot TimeR2("TimeR2"); 899 TimeR2.SendData("TimeR2", Countdownhr2); 900 Timediff2= currentMillis - previousMillisT2; 901 Countdownhr2= ((Timediff2b - Timediff2)/3600000); 902wdt_enable(WDTO_4S); 903 if ((currentMillis - previousMillis2) <= (PUMPOFFV2*3600000)) { 904 905 myMotor3->run(RELEASE); 906 myMotor4->run(RELEASE); 907 908 Countdownsec2= 60 - second(); 909 Countdownmin2= 60 - (minute()+1); 910 911 MyPanel.SetNumber(F("TtoNextb"), Countdownhr2); 912 MyPanel.SetNumber(F("TtoNext2b"),Countdownmin2); 913 MyPanel.SetNumber(F("TtoNext3b"),Countdownsec2 ); 914 915 } 916 else if ((currentMillis - previousMillis2) <(((PUMPONV2*Multivar2)+PUMPOFFV2)*3600000)) { 917 918 myMotor4->setSpeed(FLOWINMIN2); 919 myMotor4->run(FORWARD); 920 921 } 922 923 wdt_reset(); 924wdt_disable(); 925wdt_enable(WDTO_2S); 926 if ((currentMillis - previousMillis2b) >=(((PUMPONV2*Multivar2)+PUMPOFFV2)*3600000)) { 927 myMotor4->run(RELEASE); 928 myMotor3->setSpeed(FLOWINMIN2); 929 myMotor3->run(FORWARD); 930 } 931 932 933 if ((currentMillis - previousMillis2) >= ((PUMPONV2+PUMPOFFV2)*3600000)) { 934 935 myMotor3->run(RELEASE); 936 937 previousMillis2 = currentMillis; 938 previousMillis2b = currentMillis; 939 940 wdt_reset(); 941wdt_disable(); 942 943 } 944 945//-----------------------------Reactor3--------------------------------- 946 TimePlot TimeR3("TimeR3"); 947 TimeR3.SendData("TimeR3", Countdownhr3); 948 Timediff3= currentMillis - previousMillisT3; 949 Countdownhr3= ((Timediff2c - Timediff3)/3600000); 950wdt_enable(WDTO_4S); 951 if ((currentMillis - previousMillis3) <= (PUMPOFFV3*3600000)) { 952 953 954 myMotor1Sh1->run(RELEASE); 955 myMotor2Sh1->run(RELEASE); 956 957 Countdownsec3= 60 - second(); 958 Countdownmin3= 60 - (minute()+1); 959 MyPanel.SetNumber(F("TtoNextc"), Countdownhr3); 960 MyPanel.SetNumber(F("TtoNext2c"),Countdownmin3); 961 MyPanel.SetNumber(F("TtoNext3c"),Countdownsec3 ); 962 963 } 964 else if ((currentMillis - previousMillis3) <(((PUMPONV3*Multivar3)+PUMPOFFV3)*3600000)) { 965 previousMillis6 = currentMillis; 966 967 myMotor2Sh1->setSpeed(FLOWINMIN3); 968 myMotor2Sh1->run(FORWARD); 969 970 } 971 972 wdt_reset(); 973wdt_disable(); 974wdt_enable(WDTO_2S); 975 if ((currentMillis - previousMillis2c) >=(((PUMPONV3*Multivar3)+PUMPOFFV3)*3600000)) { 976 myMotor2Sh1->run(RELEASE); 977 myMotor1Sh1->setSpeed(FLOWINMIN3); 978 myMotor1Sh1->run(FORWARD); 979 980 981 } 982 983 984 if ((currentMillis - previousMillis3) >= ((PUMPONV3+PUMPOFFV3)*3600000)) { 985 986 987 myMotor1Sh1->run(RELEASE); 988 previousMillis3 = currentMillis; 989 previousMillis2c = currentMillis; 990 wdt_reset(); 991wdt_disable(); 992 } 993//-----------------------------Reactor4--------------------------------- 994 TimePlot TimeR4("TimeR4"); 995 TimeR4.SendData("TimeR4", Countdownhr4); 996 Timediff4= currentMillis - previousMillisT4; 997 Countdownhr4= ((Timediff2d - Timediff4)/3600000); 998wdt_enable(WDTO_4S); 999 if ((currentMillis - previousMillis4) <= (PUMPOFFV4*3600000)) { 1000 1001 myMotor3Sh1->run(RELEASE); 1002 myMotor4Sh1->run(RELEASE); 1003 1004 Countdownsec4= 60 - second(); 1005 Countdownmin4= 60 - (minute()+1); 1006 MyPanel.SetNumber(F("TtoNextd"), Countdownhr4); 1007 MyPanel.SetNumber(F("TtoNext2d"),Countdownmin4); 1008 MyPanel.SetNumber(F("TtoNext3d"),Countdownsec4 ); 1009 1010 } 1011 else if ((currentMillis - previousMillis4) <(((PUMPONV4*Multivar4)+PUMPOFFV4)*3600000)) { 1012 1013 myMotor4Sh1->setSpeed(FLOWINMIN4); 1014 myMotor4Sh1->run(FORWARD); 1015 1016 } 1017 1018 wdt_reset(); 1019wdt_disable(); 1020wdt_enable(WDTO_2S); 1021 if ((currentMillis - previousMillis2d) >=(((PUMPONV4*Multivar4)+PUMPOFFV4)*3600000)) { 1022 myMotor4Sh1->run(RELEASE); 1023 myMotor3Sh1->setSpeed(FLOWINMIN4); 1024 myMotor3Sh1->run(FORWARD); 1025 } 1026 1027 1028 if ((currentMillis - previousMillis4) >= ((PUMPONV4+PUMPOFFV4)*3600000)) { 1029 1030 1031 myMotor3Sh1->run(RELEASE); 1032 1033 previousMillis4 = currentMillis; 1034 previousMillis2d = currentMillis; 1035 wdt_reset(); 1036wdt_disable(); 1037 } 1038 1039//-----------------------------Reactor5--------------------------------- 1040 TimePlot TimeR5("TimeR5"); 1041 TimeR5.SendData("TimeR5", Countdownhr5); 1042 Timediff5= currentMillis - previousMillisT5; 1043 Countdownhr5= ((Timediff2e - Timediff5)/3600000); 1044wdt_enable(WDTO_4S); 1045 if ((currentMillis - previousMillis5) <= (PUMPOFFV5*3600000)) { 1046 1047 1048 myMotor1Sh2->run(RELEASE); 1049 myMotor2Sh2->run(RELEASE); 1050 1051 Countdownsec5= 60 - second(); 1052 Countdownmin5= 60 - (minute()+1); 1053 MyPanel.SetNumber(F("TtoNexte"), Countdownhr5); 1054 MyPanel.SetNumber(F("TtoNext2e"),Countdownmin5); 1055 MyPanel.SetNumber(F("TtoNext3e"),Countdownsec5 ); 1056 1057 } 1058 else if ((currentMillis - previousMillis5) <(((PUMPONV5*Multivar5)+PUMPOFFV5)*3600000)) { 1059 1060 myMotor2Sh2->setSpeed(FLOWINMIN5); 1061 myMotor2Sh2->run(FORWARD); 1062 1063 } 1064 1065 wdt_reset(); 1066wdt_disable(); 1067wdt_enable(WDTO_2S); 1068 if ((currentMillis - previousMillis2e) >=(((PUMPONV5*Multivar5)+PUMPOFFV5)*3600000)) { 1069 myMotor2Sh2->run(RELEASE); 1070 myMotor1Sh2->setSpeed(FLOWINMIN5); 1071 myMotor1Sh2->run(FORWARD); 1072 1073 1074 1075 } 1076 1077 1078 if ((currentMillis - previousMillis5) >= ((PUMPONV5+PUMPOFFV5)*3600000)) { 1079 1080 myMotor1Sh2->run(RELEASE); 1081 1082 1083 1084 previousMillis5 = currentMillis; 1085 previousMillis2e = currentMillis; 1086 1087 wdt_reset(); 1088wdt_disable(); 1089 1090 } 1091 1092 1093//-----------------------------Reactor6--------------------------------- 1094 TimePlot TimeR6("TimeR6"); 1095 TimeR6.SendData("TimeR6", Countdownhr6); 1096 Timediff6= currentMillis - previousMillisT6; 1097 Countdownhr6= ((Timediff2f - Timediff6)/3600000); 1098wdt_enable(WDTO_4S); 1099 if ((currentMillis - previousMillis6) <= (PUMPOFFV6*3600000)) { 1100 1101 myMotor3Sh2->run(RELEASE); 1102 myMotor4Sh2->run(RELEASE); 1103 1104 1105 Countdownsec6= 60 - second(); 1106 Countdownmin6= 60 - (minute()+1); 1107 MyPanel.SetNumber(F("TtoNextf"), Countdownhr6); 1108 MyPanel.SetNumber(F("TtoNext2f"),Countdownmin6); 1109 MyPanel.SetNumber(F("TtoNext3f"),Countdownsec6 ); 1110 1111 } 1112 else if ((currentMillis - previousMillis6) <(((PUMPONV6*Multivar6)+PUMPOFFV6)*3600000)) { 1113 1114 1115 myMotor4Sh2->setSpeed(FLOWINMIN6); 1116 myMotor4Sh2->run(FORWARD); 1117 1118 } 1119 1120 wdt_reset(); 1121wdt_disable(); 1122wdt_enable(WDTO_2S); 1123 if ((currentMillis - previousMillis2f) >=(((PUMPONV6*Multivar6)+PUMPOFFV6)*3600000)) { 1124 myMotor4Sh2->run(RELEASE); 1125 myMotor3Sh2->setSpeed(FLOWINMIN6); 1126 myMotor3Sh2->run(FORWARD); 1127 } 1128 1129 1130 if ((currentMillis - previousMillis6) >= ((PUMPONV6+PUMPOFFV6)*3600000)) { 1131 1132 myMotor3Sh2->run(RELEASE); 1133 1134 1135 previousMillis6 = currentMillis; 1136 previousMillis2f = currentMillis; 1137 1138 wdt_reset(); 1139wdt_disable(); 1140 } 1141 1142 } 1143 1144 1145 1146
Chemostat 6 unit, one arduino based.
arduino
1 2 #include <Wire.h> 3 4 #include "CommandHandler.h" 5 #include "TimeLib.h" 6 7 #include "MegunoLink.h" 8 Message MyCSVMessage("Data"); 9 10 11 float ODVarT8; 12 13 float FEDWASTEVAR1; 14 float FEDWASTEVAR2; 15 16 float Multivar1=0.5; 17 float Multivar2=0.5; 18 float Multivar3=0.5; 19 float Multivar4=0.5; 20 float Multivar5=0.5; 21 float Multivar6=0.5; 22 23 24 unsigned long Timediff1; 25 unsigned long Timediff2; 26 unsigned long Timediff3; 27 unsigned long Timediff4; 28 unsigned long Timediff5; 29 unsigned long Timediff6; 30 31 32 33 unsigned long Timediff2a; 34 unsigned long Timediff2b; 35 unsigned long Timediff2c; 36 unsigned long Timediff2d; 37 unsigned long Timediff2e; 38 unsigned long Timediff2f; 39 40 41 float addPumpOFF1; 42 float addPumpOFF2; 43 float addPumpOFF3; 44 float addPumpOFF4; 45 float addPumpOFF5; 46 float addPumpOFF6; 47 48 49 float TimeVarT2 = millis(); 50 51 float FLOWINMIN1 = 250; 52 float FLOWINMIN2 = 250; 53 float FLOWINMIN3 = 0; 54 float FLOWINMIN4 = 0; 55 float FLOWINMIN5 = 0; 56 float FLOWINMIN6 = 0; 57 58 59 float PUMPONV1 = 0.001; 60 float PUMPONV2 = 0.001; 61 float PUMPONV3 = 0.001; 62 float PUMPONV4 = 0.001; 63 float PUMPONV5 = 0.001; 64 float PUMPONV6 = 0.001; 65 66 67 68 float PUMPOFFV1 = 1000; 69 float PUMPOFFV2 = 1000; 70 float PUMPOFFV3 = 1000; 71 float PUMPOFFV4 = 1000; 72 float PUMPOFFV5 = 1000; 73 float PUMPOFFV6 = 1000; 74 75 76 unsigned long previousMillis = 0; 77 unsigned long previousMillis2 = 0; 78 unsigned long previousMillis3 = 0; 79 unsigned long previousMillis4 = 0; 80 unsigned long previousMillis5 = 0; 81 unsigned long previousMillis6 = 0; 82 83 84 unsigned long previousMillis2a = 0; 85 unsigned long previousMillis2b = 0; 86 unsigned long previousMillis2c = 0; 87 unsigned long previousMillis2d = 0; 88 unsigned long previousMillis2e = 0; 89 unsigned long previousMillis2f = 0; 90 91 92 93 unsigned long previousMillisT1 = 0; 94 unsigned long previousMillisT2 = 0; 95 unsigned long previousMillisT3 = 0; 96 unsigned long previousMillisT4 = 0; 97 unsigned long previousMillisT5 = 0; 98 unsigned long previousMillisT6 = 0; 99 100 unsigned long Countdownsec1; 101 unsigned long Countdownmin1; 102 unsigned long Countdownhr1; 103 104 105 unsigned long Countdownsec2; 106 unsigned long Countdownmin2; 107 unsigned long Countdownhr2; 108 109 110 unsigned long Countdownsec3; 111 unsigned long Countdownmin3; 112 unsigned long Countdownhr3; 113 114 115 unsigned long Countdownsec4; 116 unsigned long Countdownmin4; 117 unsigned long Countdownhr4; 118 119 120 unsigned long Countdownsec5; 121 unsigned long Countdownmin5; 122 unsigned long Countdownhr5; 123 124 125 unsigned long Countdownsec6; 126 unsigned long Countdownmin6; 127 unsigned long Countdownhr6; 128 129 // Select which 'port' M1, M2, M3 or M4. In this case, M1 (V2) 130 131 132 CommandHandler<100> SerialCommandHandler; 133 #include <SoftwareSerial.h> 134 InterfacePanel MyPanel; 135 136 #include <Adafruit_MotorShield.h> 137 Adafruit_MotorShield AFMS(0x60); 138 Adafruit_MotorShield AFMS1(0x61); 139 Adafruit_MotorShield AFMS2(0x62); 140 #include <avr/wdt.h> 141 142 Adafruit_DCMotor *myMotor1 = AFMS.getMotor(1); 143 Adafruit_DCMotor *myMotor2 = AFMS.getMotor(2); 144 Adafruit_DCMotor *myMotor3 = AFMS.getMotor(3); 145 Adafruit_DCMotor *myMotor4 = AFMS.getMotor(4); 146 147 Adafruit_DCMotor *myMotor1Sh1 = AFMS1.getMotor(1); 148 Adafruit_DCMotor *myMotor2Sh1 = AFMS1.getMotor(2); 149 Adafruit_DCMotor *myMotor3Sh1 = AFMS1.getMotor(3); 150 Adafruit_DCMotor *myMotor4Sh1 = AFMS1.getMotor(4); 151 152 Adafruit_DCMotor *myMotor1Sh2 = AFMS2.getMotor(1); 153 Adafruit_DCMotor *myMotor2Sh2 = AFMS2.getMotor(2); 154 Adafruit_DCMotor *myMotor3Sh2 = AFMS2.getMotor(3); 155 Adafruit_DCMotor *myMotor4Sh2 = AFMS2.getMotor(4); 156 157 158 void Cmd_MultipleVaal1(CommandParameter &p) 159 { 160 161 Multivar1 = p.NextParameterAsDouble(); 162 MyPanel.SetNumber(F("Multi1"),Multivar1 ); 163 164 } 165 166 167 void Cmd_MultipleVaal2(CommandParameter &p) 168 { 169 170 Multivar2 = p.NextParameterAsDouble(); 171 MyPanel.SetNumber(F("Multi2"),Multivar2 ); 172 173 } 174 175 176 void Cmd_MultipleVaal3(CommandParameter &p) 177 { 178 179 Multivar3 = p.NextParameterAsDouble(); 180 MyPanel.SetNumber(F("Multi3"),Multivar3 ); 181 182 } 183 184 185 186 void Cmd_MultipleVaal4(CommandParameter &p) 187 { 188 189 Multivar4 = p.NextParameterAsDouble(); 190 MyPanel.SetNumber(F("Multi4"),Multivar4 ); 191 192 } 193 194 195 void Cmd_MultipleVaal5(CommandParameter &p) 196 { 197 198 Multivar5 = p.NextParameterAsDouble(); 199 MyPanel.SetNumber(F("Multi5"),Multivar5 ); 200 201 } 202 203 204 void Cmd_MultipleVaal6(CommandParameter &p) 205 { 206 207 Multivar6 = p.NextParameterAsDouble(); 208 MyPanel.SetNumber(F("Multi6"),Multivar6 ); 209 210 } 211 212 213 214 215 216 void Cmd_FWValueBB(CommandParameter &p) 217 { 218 219 FEDWASTEVAR1 = p.NextParameterAsDouble(); 220 MyPanel.SetNumber(F("FWValueV"),FEDWASTEVAR1 ); 221 222 FEDWASTEVAR2= FEDWASTEVAR1*1000; 223 } 224 225 void Cmd_FeedBDown(CommandParameter &p) 226 { 227 228 MyPanel.ShowControl(F("Arrow1")); 229 230 myMotor1->setSpeed(FLOWINMIN1); 231 myMotor1->run(FORWARD); 232 myMotor1Sh2->setSpeed(200); 233 myMotor1Sh2->run(FORWARD); 234 delay(FEDWASTEVAR2); 235 236 237 SerialCommandHandler.Process(); 238 239 240 MyPanel.SetNumber(F("PTime"), hour()); 241 MyPanel.SetNumber(F("PTime2"), minute()); 242 MyPanel.SetNumber(F("PTime3"), second()); 243 MyPanel.SetNumber(F("PTime4"), day()); 244 MyPanel.SetNumber(F("PTime5"), month()); 245 } 246 247 248 void Cmd_WasteBDown(CommandParameter &p) 249 { 250 251 MyPanel.ShowControl(F("Arrow2")); 252 myMotor2->setSpeed(FLOWINMIN1); 253 myMotor2->run(FORWARD); 254 myMotor1Sh2->setSpeed(200); 255 myMotor1Sh2->run(FORWARD); 256 delay(FEDWASTEVAR2); 257 258 259 260 SerialCommandHandler.Process(); 261 262 263 MyPanel.SetNumber(F("PTime"), hour()); 264 MyPanel.SetNumber(F("PTime2"), minute()); 265 MyPanel.SetNumber(F("PTime3"), second()); 266 MyPanel.SetNumber(F("PTime4"), day()); 267 MyPanel.SetNumber(F("PTime5"), month()); 268 269 270 271 } 272 273 void Cmd_PUMPON1(CommandParameter &p) 274 { 275 PUMPONV1 = p.NextParameterAsDouble(); 276 MyPanel.SetNumber(F("PUMPONVAL1"), PUMPONV1); 277 278 } 279 280 281 void Cmd_PUMPOFF1(CommandParameter &p) 282 { 283 PUMPOFFV1 = p.NextParameterAsDouble(); 284 MyPanel.SetNumber(F("PUMPOFFVAL1"), PUMPOFFV1); 285 ODVarT8=PUMPOFFV1*3600000; 286 hour(0); 287 second(0); 288 minute(0); 289 Timediff2 = PUMPOFFV1*3600000; 290 addPumpOFF1 = PUMPOFFV1 + hour(); 291 } 292 293 294 295 void Cmd_PUMPON2(CommandParameter &p) 296 { 297 PUMPONV2 = p.NextParameterAsDouble(); 298 MyPanel.SetNumber(F("PUMPONVAL2"), PUMPONV2); 299 300 } 301 302 303 void Cmd_PUMPOFF2(CommandParameter &p) 304 { 305 PUMPOFFV2 = p.NextParameterAsDouble(); 306 MyPanel.SetNumber(F("PUMPOFFVAL2"), PUMPOFFV2); 307 ODVarT8=PUMPOFFV2*3600000; 308 hour(0); 309 second(0); 310 minute(0); 311 Timediff2 = PUMPOFFV2*3600000; 312 addPumpOFF2 = PUMPOFFV2 + hour(); 313 } 314 315 316 317 void Cmd_PUMPON3(CommandParameter &p) 318 { 319 PUMPONV3 = p.NextParameterAsDouble(); 320 MyPanel.SetNumber(F("PUMPONVAL3"), PUMPONV3); 321 322 } 323 324 325 void Cmd_PUMPOFF3(CommandParameter &p) 326 { 327 PUMPOFFV3 = p.NextParameterAsDouble(); 328 MyPanel.SetNumber(F("PUMPOFFVAL3"), PUMPOFFV3); 329 ODVarT8=PUMPOFFV3*3600000; 330 hour(0); 331 second(0); 332 minute(0); 333 Timediff2 = PUMPOFFV3*3600000; 334 addPumpOFF3 = PUMPOFFV3 + hour(); 335 } 336 337 338 339 void Cmd_PUMPON4(CommandParameter &p) 340 { 341 PUMPONV4 = p.NextParameterAsDouble(); 342 MyPanel.SetNumber(F("PUMPONVAL4"), PUMPONV4); 343 344 } 345 346 347 void Cmd_PUMPOFF4(CommandParameter &p) 348 { 349 PUMPOFFV4 = p.NextParameterAsDouble(); 350 MyPanel.SetNumber(F("PUMPOFFVAL4"), PUMPOFFV4); 351 ODVarT8=PUMPOFFV4*3600000; 352 hour(0); 353 second(0); 354 minute(0); 355 Timediff2 = PUMPOFFV4*3600000; 356 addPumpOFF4 = PUMPOFFV4 + hour(); 357 } 358 359 360 361 void Cmd_PUMPON5(CommandParameter &p) 362 { 363 PUMPONV5 = p.NextParameterAsDouble(); 364 MyPanel.SetNumber(F("PUMPONVAL5"), PUMPONV5); 365 366 } 367 368 369 void Cmd_PUMPOFF5(CommandParameter &p) 370 { 371 PUMPOFFV5 = p.NextParameterAsDouble(); 372 MyPanel.SetNumber(F("PUMPOFFVAL5"), PUMPOFFV5); 373 ODVarT8=PUMPOFFV5*3600000; 374 hour(0); 375 second(0); 376 minute(0); 377 Timediff2 = PUMPOFFV5*3600000; 378 addPumpOFF5 = PUMPOFFV5 + hour(); 379 } 380 381 382 383 void Cmd_PUMPON6(CommandParameter &p) 384 { 385 PUMPONV6 = p.NextParameterAsDouble(); 386 MyPanel.SetNumber(F("PUMPONVAL6"), PUMPONV6); 387 388 } 389 390 391 void Cmd_PUMPOFF6(CommandParameter &p) 392 { 393 PUMPOFFV6 = p.NextParameterAsDouble(); 394 MyPanel.SetNumber(F("PUMPOFFVAL6"), PUMPOFFV6); 395 ODVarT8=PUMPOFFV6*3600000; 396 hour(0); 397 second(0); 398 minute(0); 399 Timediff2 = PUMPOFFV6*3600000; 400 addPumpOFF6 = PUMPOFFV6 + hour(); 401 } 402 403 404 405 406//------Reports-------------------------- 407 408void Cmd_ReportRefresh(CommandParameter &p) 409{ 410 411MyPanel.SetText(F("Report2"), "2"); 412 413MyPanel.SetNumber(F("Report5"), PUMPOFFV1); 414MyPanel.SetNumber(F("Report6"), PUMPONV1); 415MyPanel.SetNumber(F("Report8"), FLOWINMIN1); 416 417MyPanel.SetNumber(F("FWValueV"),FEDWASTEVAR1 ); 418MyPanel.SetNumber(F("PUMPONVAL"), PUMPONV1); 419MyPanel.SetNumber(F("PUMPOFFVAL"), PUMPOFFV1); 420MyPanel.SetNumber(F("INMINVAL"), FLOWINMIN1); 421MyPanel.SetNumber(F("INMINVAL"), FLOWINMIN1); 422MyPanel.SetNumber(F("PUMPOFFVAL"), PUMPOFFV1); 423 424SerialCommandHandler.Process(); 425 426MyPanel.SetNumber(F("PTime"), hour()); 427MyPanel.SetNumber(F("PTime2"), minute()); 428MyPanel.SetNumber(F("PTime3"), second()); 429MyPanel.SetNumber(F("PTime4"), day()); 430MyPanel.SetNumber(F("PTime5"), month()); 431 432 433 } 434//--------------------------------------------------------------------------------- 435 436 437 438 void Cmd_Move1(CommandParameter &p) 439 { 440 MyPanel.SetText(F("Switch"), "ON"); 441 MyPanel.SetBackColor(F("Switch"), F("green")); 442 FLOWINMIN1 = 250; 443 PUMPONV1 = 0.001; 444 PUMPOFFV1 = 1000; 445 unsigned long currentMillis = millis(); 446 unsigned long currenthour = hour(0); 447 unsigned long currentsec = second(0); 448 unsigned long currentmin = minute(0); 449 MyPanel.SetNumber(F("INMINVAL"), FLOWINMIN1); 450 451 setTime(00,00,00,01, 01, 0000); 452 453 previousMillis = currentMillis; 454 previousMillis2a = currentMillis; 455 456 457 458 SerialCommandHandler.Process(); 459 460 461 MyPanel.SetNumber(F("PTime"), hour()); 462 MyPanel.SetNumber(F("PTime2"), minute()); 463 MyPanel.SetNumber(F("PTime3"), second()); 464 MyPanel.SetNumber(F("PTime4"), day()); 465 MyPanel.SetNumber(F("PTime5"), month()); 466 467 } 468 469 void Cmd_Move2(CommandParameter &p) 470 { 471 MyPanel.SetText(F("Switch"), "ON"); 472 MyPanel.SetBackColor(F("Switch"), F("green")); 473 FLOWINMIN2 = 250; 474 PUMPONV1 = 0.001; 475 PUMPOFFV1 = 1000; 476 unsigned long currentMillis = millis(); 477 unsigned long currenthour = hour(0); 478 unsigned long currentsec = second(0); 479 unsigned long currentmin = minute(0); 480 MyPanel.SetNumber(F("INMINVAL1"), FLOWINMIN2); 481 482 setTime(00,00,00,01, 01, 0000); 483 484 previousMillis2 = currentMillis; 485 previousMillis2b = currentMillis; 486 487 488 489 SerialCommandHandler.Process(); 490 491 492 MyPanel.SetNumber(F("PTime"), hour()); 493 MyPanel.SetNumber(F("PTime2"), minute()); 494 MyPanel.SetNumber(F("PTime3"), second()); 495 MyPanel.SetNumber(F("PTime4"), day()); 496 MyPanel.SetNumber(F("PTime5"), month()); 497 498 } 499 500 void Cmd_Move3(CommandParameter &p) 501 { 502 MyPanel.SetText(F("Switch"), "ON"); 503 MyPanel.SetBackColor(F("Switch"), F("green")); 504 FLOWINMIN3 = 250; 505 PUMPONV1 = 0.001; 506 PUMPOFFV1 = 1000; 507 unsigned long currentMillis = millis(); 508 unsigned long currenthour = hour(0); 509 unsigned long currentsec = second(0); 510 unsigned long currentmin = minute(0); 511 MyPanel.SetNumber(F("INMINVAL2"), FLOWINMIN3); 512 513 setTime(00,00,00,01, 01, 0000); 514 515 previousMillis3 = currentMillis; 516 previousMillis2c = currentMillis; 517 518 519 520 SerialCommandHandler.Process(); 521 522 523 MyPanel.SetNumber(F("PTime"), hour()); 524 MyPanel.SetNumber(F("PTime2"), minute()); 525 MyPanel.SetNumber(F("PTime3"), second()); 526 MyPanel.SetNumber(F("PTime4"), day()); 527 MyPanel.SetNumber(F("PTime5"), month()); 528 529 } 530 531 void Cmd_Move4(CommandParameter &p) 532 { 533 MyPanel.SetText(F("Switch"), "ON"); 534 MyPanel.SetBackColor(F("Switch"), F("green")); 535 FLOWINMIN4 = 250; 536 PUMPONV1 = 0.001; 537 PUMPOFFV1 = 1000; 538 unsigned long currentMillis = millis(); 539 unsigned long currenthour = hour(0); 540 unsigned long currentsec = second(0); 541 unsigned long currentmin = minute(0); 542 MyPanel.SetNumber(F("INMINVAL3"), FLOWINMIN4); 543 544 setTime(00,00,00,01, 01, 0000); 545 546 previousMillis4 = currentMillis; 547 previousMillis2d = currentMillis; 548 549 550 551 SerialCommandHandler.Process(); 552 553 554 MyPanel.SetNumber(F("PTime"), hour()); 555 MyPanel.SetNumber(F("PTime2"), minute()); 556 MyPanel.SetNumber(F("PTime3"), second()); 557 MyPanel.SetNumber(F("PTime4"), day()); 558 MyPanel.SetNumber(F("PTime5"), month()); 559 560 } 561 562 void Cmd_Move5(CommandParameter &p) 563 { 564 MyPanel.SetText(F("Switch"), "ON"); 565 MyPanel.SetBackColor(F("Switch"), F("green")); 566 FLOWINMIN5 = 250; 567 PUMPONV1 = 0.001; 568 PUMPOFFV1 = 1000; 569 unsigned long currentMillis = millis(); 570 unsigned long currenthour = hour(0); 571 unsigned long currentsec = second(0); 572 unsigned long currentmin = minute(0); 573 MyPanel.SetNumber(F("INMINVAL4"), FLOWINMIN5); 574 575 setTime(00,00,00,01, 01, 0000); 576 577 previousMillis5 = currentMillis; 578 previousMillis2e = currentMillis; 579 580 581 582 SerialCommandHandler.Process(); 583 584 585 MyPanel.SetNumber(F("PTime"), hour()); 586 MyPanel.SetNumber(F("PTime2"), minute()); 587 MyPanel.SetNumber(F("PTime3"), second()); 588 MyPanel.SetNumber(F("PTime4"), day()); 589 MyPanel.SetNumber(F("PTime5"), month()); 590 591 } 592 593 void Cmd_Move6(CommandParameter &p) 594 { 595 MyPanel.SetText(F("Switch"), "ON"); 596 MyPanel.SetBackColor(F("Switch"), F("green")); 597 FLOWINMIN6 = 250; 598 PUMPONV1 = 0.001; 599 PUMPOFFV1 = 1000; 600 unsigned long currentMillis = millis(); 601 unsigned long currenthour = hour(0); 602 unsigned long currentsec = second(0); 603 unsigned long currentmin = minute(0); 604 MyPanel.SetNumber(F("INMINVAL5"), FLOWINMIN6); 605 606 setTime(00,00,00,01, 01, 0000); 607 608 previousMillis6 = currentMillis; 609 previousMillis2f = currentMillis; 610 611 612 613 SerialCommandHandler.Process(); 614 615 616 MyPanel.SetNumber(F("PTime"), hour()); 617 MyPanel.SetNumber(F("PTime2"), minute()); 618 MyPanel.SetNumber(F("PTime3"), second()); 619 MyPanel.SetNumber(F("PTime4"), day()); 620 MyPanel.SetNumber(F("PTime5"), month()); 621 622 } 623 624 625 626 627 void Cmd_Stop1(CommandParameter &p) 628 { 629 MyPanel.SetText(F("Switch"), "OFF"); 630 MyPanel.SetBackColor(F("Switch"), F("red")); 631 FLOWINMIN1 = 0; 632 PUMPONV1 = 0.001; 633 PUMPOFFV1 = 1000; 634 MyPanel.SetNumber(F("INMINVAL"), FLOWINMIN1); 635 } 636 637 638 void Cmd_Stop2(CommandParameter &p) 639 { 640 MyPanel.SetText(F("Switch"), "OFF"); 641 MyPanel.SetBackColor(F("Switch"), F("red")); 642 643 FLOWINMIN2 = 0; 644 PUMPONV2 = 0.001; 645 PUMPOFFV2 = 1000; 646 MyPanel.SetNumber(F("INMINVAL1"), FLOWINMIN2); 647 } 648 649 650 void Cmd_Stop3(CommandParameter &p) 651 { 652 MyPanel.SetText(F("Switch"), "OFF"); 653 MyPanel.SetBackColor(F("Switch"), F("red")); 654 FLOWINMIN3 = 0; 655 PUMPONV3 = 0.001; 656 PUMPOFFV3 = 1000; 657 MyPanel.SetNumber(F("INMINVAL2"), FLOWINMIN3); 658 659 } 660 661 662void Cmd_Stop4(CommandParameter &p) 663 { 664 MyPanel.SetText(F("Switch"), "OFF"); 665 MyPanel.SetBackColor(F("Switch"), F("red")); 666 FLOWINMIN4 = 0; 667 PUMPONV4 = 0.001; 668 PUMPOFFV4 = 1000; 669 MyPanel.SetNumber(F("INMINVAL3"), FLOWINMIN4); 670 671 } 672 673 674void Cmd_Stop5(CommandParameter &p) 675 { 676 MyPanel.SetText(F("Switch"), "OFF"); 677 MyPanel.SetBackColor(F("Switch"), F("red")); 678 FLOWINMIN5 = 0; 679 PUMPONV5 = 0.001; 680 PUMPOFFV5 = 1000; 681 MyPanel.SetNumber(F("INMINVAL4"), FLOWINMIN5); 682 683 } 684 685 686 void Cmd_Stop6(CommandParameter &p) 687 { 688 MyPanel.SetText(F("Switch"), "OFF"); 689 MyPanel.SetBackColor(F("Switch"), F("red")); 690 FLOWINMIN6 = 0; 691 PUMPONV6 = 0.001; 692 PUMPOFFV6 = 1000; 693 MyPanel.SetNumber(F("INMINVAL5"), FLOWINMIN6); 694 695 } 696 697//------------------------------------------------------------------------------------ 698 699 void setup() { 700 Serial.begin(9600); 701 702 Wire.begin(); 703 704 705 Multivar1=0.5; 706 Multivar2=0.5; 707 Multivar3=0.5; 708 Multivar4=0.5; 709 Multivar5=0.5; 710 Multivar6=0.5; 711 712 713 714 715 716 SerialCommandHandler.AddCommand(F("Go1"), Cmd_Move1); 717 SerialCommandHandler.AddCommand(F("Go2"), Cmd_Move2); 718 SerialCommandHandler.AddCommand(F("Go3"), Cmd_Move3); 719 SerialCommandHandler.AddCommand(F("Go4"), Cmd_Move4); 720 SerialCommandHandler.AddCommand(F("Go5"), Cmd_Move5); 721 SerialCommandHandler.AddCommand(F("Go6"), Cmd_Move6); 722 723 724 SerialCommandHandler.AddCommand(F("Stop1"), Cmd_Stop1); 725 SerialCommandHandler.AddCommand(F("Stop2"), Cmd_Stop2); 726 SerialCommandHandler.AddCommand(F("Stop3"), Cmd_Stop3); 727 SerialCommandHandler.AddCommand(F("Stop4"), Cmd_Stop4); 728 SerialCommandHandler.AddCommand(F("Stop5"), Cmd_Stop5); 729 SerialCommandHandler.AddCommand(F("Stop6"), Cmd_Stop6); 730 731 732 733 SerialCommandHandler.AddCommand(F("PUMPDELAYON1"), Cmd_PUMPON1); 734 SerialCommandHandler.AddCommand(F("PUMPDELAYOFF1"), Cmd_PUMPOFF1); 735 736 737 SerialCommandHandler.AddCommand(F("PUMPDELAYON2"), Cmd_PUMPON2); 738 SerialCommandHandler.AddCommand(F("PUMPDELAYOFF2"), Cmd_PUMPOFF2); 739 740 741 SerialCommandHandler.AddCommand(F("PUMPDELAYON3"), Cmd_PUMPON3); 742 SerialCommandHandler.AddCommand(F("PUMPDELAYOFF3"), Cmd_PUMPOFF3); 743 744 745 SerialCommandHandler.AddCommand(F("PUMPDELAYON4"), Cmd_PUMPON4); 746 SerialCommandHandler.AddCommand(F("PUMPDELAYOFF4"), Cmd_PUMPOFF4); 747 748 749 SerialCommandHandler.AddCommand(F("PUMPDELAYON5"), Cmd_PUMPON5); 750 SerialCommandHandler.AddCommand(F("PUMPDELAYOFF5"), Cmd_PUMPOFF5); 751 752 753 SerialCommandHandler.AddCommand(F("PUMPDELAYON6"), Cmd_PUMPON6); 754 SerialCommandHandler.AddCommand(F("PUMPDELAYOFF6"), Cmd_PUMPOFF6); 755 756 757 758 759 760 761 762 SerialCommandHandler.AddCommand(F("Feed-BDown"), Cmd_FeedBDown); 763 SerialCommandHandler.AddCommand(F("FWValueBB"), Cmd_FWValueBB); 764 SerialCommandHandler.AddCommand(F("Waste-BDown"), Cmd_WasteBDown); 765 766 767 768 SerialCommandHandler.AddCommand(F("Report-Refresh"), Cmd_ReportRefresh); 769 770 771SerialCommandHandler.AddCommand(F("MultipleVaaal1"), Cmd_MultipleVaal1); 772SerialCommandHandler.AddCommand(F("MultipleVaaal2"), Cmd_MultipleVaal2); 773SerialCommandHandler.AddCommand(F("MultipleVaaal3"), Cmd_MultipleVaal3); 774SerialCommandHandler.AddCommand(F("MultipleVaaal4"), Cmd_MultipleVaal4); 775SerialCommandHandler.AddCommand(F("MultipleVaaal5"), Cmd_MultipleVaal5); 776SerialCommandHandler.AddCommand(F("MultipleVaaal6"), Cmd_MultipleVaal6); 777 778 779 780 781 //Combination system serial orders 782 783 784 785 786 AFMS.begin(); 787 myMotor1-> run(FORWARD); 788 myMotor2-> run(FORWARD); 789 myMotor3-> run(FORWARD); 790 myMotor4-> run(FORWARD); 791 792 793 myMotor1-> run(RELEASE); 794 myMotor2-> run(RELEASE); 795 myMotor3-> run(RELEASE); 796 myMotor4-> run(RELEASE); 797 798 799 800 AFMS1.begin(); 801 myMotor1Sh1-> run(FORWARD); 802 myMotor2Sh1-> run(FORWARD); 803 myMotor3Sh1-> run(FORWARD); 804 myMotor4Sh1-> run(FORWARD); 805 806 807 myMotor1Sh1-> run(RELEASE); 808 myMotor2Sh1-> run(RELEASE); 809 myMotor3Sh1-> run(RELEASE); 810 myMotor4Sh1-> run(RELEASE); 811 812 813 814 AFMS2.begin(); 815 myMotor1Sh2-> run(FORWARD); 816 myMotor2Sh2-> run(FORWARD); 817 myMotor3Sh2-> run(FORWARD); 818 myMotor4Sh2-> run(FORWARD); 819 820 821 myMotor1Sh2-> run(RELEASE); 822 myMotor2Sh2-> run(RELEASE); 823 myMotor3Sh2-> run(RELEASE); 824 myMotor4Sh2-> run(RELEASE); 825 826 827 } 828 829 830 831 void Stopoption(){ 832 833 } 834 835 void loop() 836 { 837 uint8_t i; 838 SerialCommandHandler.Process(); 839 840 unsigned long currentMillis = millis(); 841 unsigned long currentMillis2 = millis(); 842 unsigned long currentMillis3 = millis(); 843 unsigned long currentMillis4 = millis(); 844 845wdt_enable(WDTO_4S); 846 847 TimePlot TimeR1("TimeR1"); 848 TimeR1.SendData("TimeR1", Countdownhr1); 849 Timediff1= currentMillis - previousMillisT1; 850 Countdownhr1= ((Timediff2a - Timediff1)/3600000); 851 852 //----------------------------Reactor 1------------------------------- 853 854 if ((currentMillis - previousMillis) <= (PUMPOFFV1*3600000)) { 855 856 myMotor1->run(RELEASE); 857 myMotor2->run(RELEASE); 858 859 Countdownsec1= 60 - second(); 860 Countdownmin1= 60 - (minute()+1); 861 MyPanel.SetNumber(F("TtoNexta"), Countdownhr1); 862 MyPanel.SetNumber(F("TtoNext2a"),Countdownmin1); 863 MyPanel.SetNumber(F("TtoNext3a"),Countdownsec1 ); 864 865 } 866 else if ((currentMillis - previousMillis) <(((PUMPONV1*Multivar1)+PUMPOFFV1)*3600000)) { 867 868 myMotor2->setSpeed(FLOWINMIN1); 869 myMotor2->run(FORWARD); 870 871 } 872 873 wdt_reset(); 874wdt_disable(); 875wdt_enable(WDTO_2S); 876 if ((currentMillis - previousMillis2a) >=(((PUMPONV1*Multivar1)+PUMPOFFV1)*3600000)) { 877 myMotor2->run(RELEASE); 878 myMotor1->setSpeed(FLOWINMIN1); 879 myMotor1->run(FORWARD); 880 } 881 882 883 884 if ((currentMillis - previousMillis) >= ((PUMPONV1+PUMPOFFV1)*3600000)) { 885 886 myMotor1->run(RELEASE); 887 previousMillis = currentMillis; 888 previousMillis2a = currentMillis; 889 wdt_reset(); 890 wdt_disable(); 891 } 892 893 894 895 896 897//-----------------------------Reactor2--------------------------------- 898 TimePlot TimeR2("TimeR2"); 899 TimeR2.SendData("TimeR2", Countdownhr2); 900 Timediff2= currentMillis - previousMillisT2; 901 Countdownhr2= ((Timediff2b - Timediff2)/3600000); 902wdt_enable(WDTO_4S); 903 if ((currentMillis - previousMillis2) <= (PUMPOFFV2*3600000)) { 904 905 myMotor3->run(RELEASE); 906 myMotor4->run(RELEASE); 907 908 Countdownsec2= 60 - second(); 909 Countdownmin2= 60 - (minute()+1); 910 911 MyPanel.SetNumber(F("TtoNextb"), Countdownhr2); 912 MyPanel.SetNumber(F("TtoNext2b"),Countdownmin2); 913 MyPanel.SetNumber(F("TtoNext3b"),Countdownsec2 ); 914 915 } 916 else if ((currentMillis - previousMillis2) <(((PUMPONV2*Multivar2)+PUMPOFFV2)*3600000)) { 917 918 myMotor4->setSpeed(FLOWINMIN2); 919 myMotor4->run(FORWARD); 920 921 } 922 923 wdt_reset(); 924wdt_disable(); 925wdt_enable(WDTO_2S); 926 if ((currentMillis - previousMillis2b) >=(((PUMPONV2*Multivar2)+PUMPOFFV2)*3600000)) { 927 myMotor4->run(RELEASE); 928 myMotor3->setSpeed(FLOWINMIN2); 929 myMotor3->run(FORWARD); 930 } 931 932 933 if ((currentMillis - previousMillis2) >= ((PUMPONV2+PUMPOFFV2)*3600000)) { 934 935 myMotor3->run(RELEASE); 936 937 previousMillis2 = currentMillis; 938 previousMillis2b = currentMillis; 939 940 wdt_reset(); 941wdt_disable(); 942 943 } 944 945//-----------------------------Reactor3--------------------------------- 946 TimePlot TimeR3("TimeR3"); 947 TimeR3.SendData("TimeR3", Countdownhr3); 948 Timediff3= currentMillis - previousMillisT3; 949 Countdownhr3= ((Timediff2c - Timediff3)/3600000); 950wdt_enable(WDTO_4S); 951 if ((currentMillis - previousMillis3) <= (PUMPOFFV3*3600000)) { 952 953 954 myMotor1Sh1->run(RELEASE); 955 myMotor2Sh1->run(RELEASE); 956 957 Countdownsec3= 60 - second(); 958 Countdownmin3= 60 - (minute()+1); 959 MyPanel.SetNumber(F("TtoNextc"), Countdownhr3); 960 MyPanel.SetNumber(F("TtoNext2c"),Countdownmin3); 961 MyPanel.SetNumber(F("TtoNext3c"),Countdownsec3 ); 962 963 } 964 else if ((currentMillis - previousMillis3) <(((PUMPONV3*Multivar3)+PUMPOFFV3)*3600000)) { 965 previousMillis6 = currentMillis; 966 967 myMotor2Sh1->setSpeed(FLOWINMIN3); 968 myMotor2Sh1->run(FORWARD); 969 970 } 971 972 wdt_reset(); 973wdt_disable(); 974wdt_enable(WDTO_2S); 975 if ((currentMillis - previousMillis2c) >=(((PUMPONV3*Multivar3)+PUMPOFFV3)*3600000)) { 976 myMotor2Sh1->run(RELEASE); 977 myMotor1Sh1->setSpeed(FLOWINMIN3); 978 myMotor1Sh1->run(FORWARD); 979 980 981 } 982 983 984 if ((currentMillis - previousMillis3) >= ((PUMPONV3+PUMPOFFV3)*3600000)) { 985 986 987 myMotor1Sh1->run(RELEASE); 988 previousMillis3 = currentMillis; 989 previousMillis2c = currentMillis; 990 wdt_reset(); 991wdt_disable(); 992 } 993//-----------------------------Reactor4--------------------------------- 994 TimePlot TimeR4("TimeR4"); 995 TimeR4.SendData("TimeR4", Countdownhr4); 996 Timediff4= currentMillis - previousMillisT4; 997 Countdownhr4= ((Timediff2d - Timediff4)/3600000); 998wdt_enable(WDTO_4S); 999 if ((currentMillis - previousMillis4) <= (PUMPOFFV4*3600000)) { 1000 1001 myMotor3Sh1->run(RELEASE); 1002 myMotor4Sh1->run(RELEASE); 1003 1004 Countdownsec4= 60 - second(); 1005 Countdownmin4= 60 - (minute()+1); 1006 MyPanel.SetNumber(F("TtoNextd"), Countdownhr4); 1007 MyPanel.SetNumber(F("TtoNext2d"),Countdownmin4); 1008 MyPanel.SetNumber(F("TtoNext3d"),Countdownsec4 ); 1009 1010 } 1011 else if ((currentMillis - previousMillis4) <(((PUMPONV4*Multivar4)+PUMPOFFV4)*3600000)) { 1012 1013 myMotor4Sh1->setSpeed(FLOWINMIN4); 1014 myMotor4Sh1->run(FORWARD); 1015 1016 } 1017 1018 wdt_reset(); 1019wdt_disable(); 1020wdt_enable(WDTO_2S); 1021 if ((currentMillis - previousMillis2d) >=(((PUMPONV4*Multivar4)+PUMPOFFV4)*3600000)) { 1022 myMotor4Sh1->run(RELEASE); 1023 myMotor3Sh1->setSpeed(FLOWINMIN4); 1024 myMotor3Sh1->run(FORWARD); 1025 } 1026 1027 1028 if ((currentMillis - previousMillis4) >= ((PUMPONV4+PUMPOFFV4)*3600000)) { 1029 1030 1031 myMotor3Sh1->run(RELEASE); 1032 1033 previousMillis4 = currentMillis; 1034 previousMillis2d = currentMillis; 1035 wdt_reset(); 1036wdt_disable(); 1037 } 1038 1039//-----------------------------Reactor5--------------------------------- 1040 TimePlot TimeR5("TimeR5"); 1041 TimeR5.SendData("TimeR5", Countdownhr5); 1042 Timediff5= currentMillis - previousMillisT5; 1043 Countdownhr5= ((Timediff2e - Timediff5)/3600000); 1044wdt_enable(WDTO_4S); 1045 if ((currentMillis - previousMillis5) <= (PUMPOFFV5*3600000)) { 1046 1047 1048 myMotor1Sh2->run(RELEASE); 1049 myMotor2Sh2->run(RELEASE); 1050 1051 Countdownsec5= 60 - second(); 1052 Countdownmin5= 60 - (minute()+1); 1053 MyPanel.SetNumber(F("TtoNexte"), Countdownhr5); 1054 MyPanel.SetNumber(F("TtoNext2e"),Countdownmin5); 1055 MyPanel.SetNumber(F("TtoNext3e"),Countdownsec5 ); 1056 1057 } 1058 else if ((currentMillis - previousMillis5) <(((PUMPONV5*Multivar5)+PUMPOFFV5)*3600000)) { 1059 1060 myMotor2Sh2->setSpeed(FLOWINMIN5); 1061 myMotor2Sh2->run(FORWARD); 1062 1063 } 1064 1065 wdt_reset(); 1066wdt_disable(); 1067wdt_enable(WDTO_2S); 1068 if ((currentMillis - previousMillis2e) >=(((PUMPONV5*Multivar5)+PUMPOFFV5)*3600000)) { 1069 myMotor2Sh2->run(RELEASE); 1070 myMotor1Sh2->setSpeed(FLOWINMIN5); 1071 myMotor1Sh2->run(FORWARD); 1072 1073 1074 1075 } 1076 1077 1078 if ((currentMillis - previousMillis5) >= ((PUMPONV5+PUMPOFFV5)*3600000)) { 1079 1080 myMotor1Sh2->run(RELEASE); 1081 1082 1083 1084 previousMillis5 = currentMillis; 1085 previousMillis2e = currentMillis; 1086 1087 wdt_reset(); 1088wdt_disable(); 1089 1090 } 1091 1092 1093//-----------------------------Reactor6--------------------------------- 1094 TimePlot TimeR6("TimeR6"); 1095 TimeR6.SendData("TimeR6", Countdownhr6); 1096 Timediff6= currentMillis - previousMillisT6; 1097 Countdownhr6= ((Timediff2f - Timediff6)/3600000); 1098wdt_enable(WDTO_4S); 1099 if ((currentMillis - previousMillis6) <= (PUMPOFFV6*3600000)) { 1100 1101 myMotor3Sh2->run(RELEASE); 1102 myMotor4Sh2->run(RELEASE); 1103 1104 1105 Countdownsec6= 60 - second(); 1106 Countdownmin6= 60 - (minute()+1); 1107 MyPanel.SetNumber(F("TtoNextf"), Countdownhr6); 1108 MyPanel.SetNumber(F("TtoNext2f"),Countdownmin6); 1109 MyPanel.SetNumber(F("TtoNext3f"),Countdownsec6 ); 1110 1111 } 1112 else if ((currentMillis - previousMillis6) <(((PUMPONV6*Multivar6)+PUMPOFFV6)*3600000)) { 1113 1114 1115 myMotor4Sh2->setSpeed(FLOWINMIN6); 1116 myMotor4Sh2->run(FORWARD); 1117 1118 } 1119 1120 wdt_reset(); 1121wdt_disable(); 1122wdt_enable(WDTO_2S); 1123 if ((currentMillis - previousMillis2f) >=(((PUMPONV6*Multivar6)+PUMPOFFV6)*3600000)) { 1124 myMotor4Sh2->run(RELEASE); 1125 myMotor3Sh2->setSpeed(FLOWINMIN6); 1126 myMotor3Sh2->run(FORWARD); 1127 } 1128 1129 1130 if ((currentMillis - previousMillis6) >= ((PUMPONV6+PUMPOFFV6)*3600000)) { 1131 1132 myMotor3Sh2->run(RELEASE); 1133 1134 1135 previousMillis6 = currentMillis; 1136 previousMillis2f = currentMillis; 1137 1138 wdt_reset(); 1139wdt_disable(); 1140 } 1141 1142 } 1143 1144 1145 1146
Documentation
The Meguno Link controling panel
Download the file below Download MEguno link, open project, select the file below Then connect your arduino and enjoy :)
The Meguno Link controling panel
Comments
Only logged in users can leave comments