Components and supplies
Resistor 221 ohm
Arduino Mega 2560
Android device
Standard LCD - 16x2 White on Blue
Pushbutton switch 12mm
Tools and machines
solenoid valve
Soldering iron (generic)
Apps and platforms
bluetoothchat
ecoriego
Project description
Code
ecoRiego Code - Beta Version
c_cpp
This software is a Beta Version of the prototype - 7 updates after Field Testing
1 2 3 4 5//Update No.: 7 ( Beta Version) July 23_2016 6//Developed by : Hernando Bolaños 7//*********************************************************************************************************************************************** 8//Disclaim Note: 9//THIS SOFTWARE IS PROVIDED BY THE DEVELOPER "AS IS" AND ANY EXPRESSED OR 10//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 11//OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 12//IN NO EVENT SHALL THE DEVELOPER OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 13//INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 14//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 15//SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 16//HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 17//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 18//IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 19//THE POSSIBILITY OF SUCH DAMAGE. 20//************************************************************************************************************************************************* 21 22 23#include <Wire.h> 24 25#include <LiquidCrystal_I2C.h> 26 27#include <Keypad.h> 28 29LiquidCrystal_I2C lcd(0x3F,16,2); // set the LCD address to 0x3F for a 16 chars and 2 line display- use IC2SCAN to search bus Hex Address 30 31 32//ctrol 33int conta=0; //Variable used to counter of flow meter pulses 34int pin=7; //Variable used to define flow meter input 35int inputPulsa=4; //Variable used to define flow meter input 36int estadoCero=0; //variable set counter start state 37float volumenfit=0; //Variable for volume calculatios 38char data = 99; //Variable for storing received data 39char data1=0; //Variable for red on serial 1 port 40int Tiempo=0; // varible not used 41int modolocal=10; //Variable used to define local mode input 42int modoremoto=11; //Variable used to define remote mode input 43int LOCINCMD_OPEN=12; // Variable used to define open cmd input from pushbutton 44int LOCINCMD_CLOSE=8; // Variable used to define close cmd input from pushbutton 45int OUTCMD_VALV=2; //variable to set the output to solenoid valve 46int p1=0; //variable not used 47int estadosalida=0; //varoable to set start status of relay 48int volumen=0; //Variable to report irrigation volume 49unsigned long time; //Variable uset to define time 50unsigned long tempo=0; // variable to set tieme selected 51unsigned long tinicio=0; // variable to set starting time of irrigation 52unsigned long tfinal; //variable to calculate finishing time of irrigation 53unsigned long tactual; //Variable to calculate actual time of the irrigation 54unsigned long caudal=0; // varibale to define flow 55int estado_out2; // Variable to define output state to field valve 56float tcorrido=0; //Variable to define accumulatted time 57float tfincalc=0; // variable to calculate final time 58unsigned long durationdown; // variable to set flow meter pulse input 59unsigned long durationup; //variable to set flow meter pulse input 60unsigned long frecuencia; // Variable to calculate frequency of flow meter pulses 61unsigned long periodo; // Variable to calculate T of flowmeter pulses 62int comando=100; // Variable to remove remote commands 63 64 65//Keypad 66const byte ROWS = 4; //four rows 67const byte COLS = 4; //four columns 68char keys[ROWS][COLS] = { 69 {'1','2','3','A',}, 70 {'4','5','6','B',}, 71 {'7','8','9','C'}, 72 {'*','0','#','D',} 73}; 74byte rowPins[ROWS] = {22,24,26, 28}; //connect to the row pinouts of the keypad 75byte colPins[COLS] = {30,32,34,36}; //connect to the column pinouts of the keypad 76 77Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); 78 79// Smile byte 80byte smiley[8] = { 81 B00000, 82 B10001, 83 B00000, 84 B00000, 85 B10001, 86 B01110, 87 B00000, 88}; 89 90 91void setup() { 92 93 Serial.begin(9600); //Start serial port 0 94 Serial1.begin(9600); //start seriral port 1 95 pinMode(pin, INPUT); //Sets digital pin 7 as INPUT pin de pulsos 96 pinMode(6, OUTPUT); //Sets digital pin 6 as OUTPUT con esl estado del pin de pulsos 97 pinMode(4, INPUT); //Sets digital pin 4 as INPUT PULSADOR DE RESET DE CONTADORES de pulso y vol 98 pinMode(9, OUTPUT); //Sets digital pin 9 as output VERIFICAR PARA QUE SE USA ESTA SALIDA 99 pinMode(10, INPUT); // Sets digita pin 10 as input local/mode switch 100 pinMode (11, INPUT); // Sets digital pin 11 as input remote/mode switch 101 pinMode(12, INPUT); // Sets digital pin 12 as input open push buttonEntrada de mando abrir -localmente 102 pinMode(8, INPUT); // Sets digital pin 8 as input close push buttonEntrada de mado cerrar - localmente 103 pinMode(2,OUTPUT); // Sets digita pin 2 as output open solenoid valve 104 105 106 digitalWrite(2,HIGH); //Start output to solenoid valve close- wait for commands 107 lcd.init(); //Start lcd 108 lcd.backlight(); //Turn on lcd backscreen light 109 110 lcd.createChar(0, smiley); //smile byte symbol 111 lcd.begin(16, 2); 112 lcd.write(byte(0)); 113 delay(2000); 114 115 lcd.setCursor(0,0); 116 lcd.print("APP_Eco Riego_V1"); //Boot message 117 lcd.setCursor(0,1); 118 lcd.print("by:Hernando B."); 119 delay(2000); 120 121 lcd.clear(); 122 lcd.setCursor(0,0); 123 lcd.print("Sel_Tiempo_Riego"); //Irrigation time selection message 124 delay(2000); 125 126 lcd.clear(); 127 lcd.setCursor(0,0); 128 lcd.print("T1:1min T2:2min"); //Time selection options message 129 delay(1000); 130 lcd.setCursor(0,1); 131 lcd.print("T3:3min T4:5min"); //Time selection options message 132 delay(1000); 133 134 135} 136 137 138void flujo() 139 140{ 141 142 durationdown = pulseIn(pin, LOW); 143 durationup = pulseIn(pin, HIGH); 144 Serial.println("duration"); 145 146Serial.println(durationdown); 147Serial.println(durationup); 148unsigned long periodo = durationdown; 149Serial.println("frequency:"); 150unsigned long frecuencia = 1000000/(periodo); 151Serial.println(frecuencia); 152 153Serial.println("Flow L/Min:"); 154unsigned long caudal = frecuencia/7.5; 155Serial.println(caudal); 156 lcd.clear(); 157 lcd.setCursor( 0,1); 158 lcd.println("Flow(L/M):"); 159 lcd.setCursor(12,1); 160 lcd.println(abs(caudal)); 161 delay(1000); 162 163} 164 165 166 167void loop() { 168 169flujo(); 170delay(1000); 171 172 173//Keypad inputs reading 174 char key = keypad.getKey(); 175 176 if (key != NO_KEY){ 177 Serial.println(key); } 178 179 180// when characters arrive over the serial port... 181 if (Serial.available()) { 182 // wait a bit for the entire message to arrive 183 delay(500); 184 // clear the screen 185 lcd.clear(); 186 // read all the available characters 187 while (Serial.available() > 0) { 188 // display each character to the LCD 189 lcd.setCursor(2,1); 190 lcd.print(Serial.read()); 191 Serial.println(data1); 192 193 } 194 } 195 196 197 198 199 200 int estado_local = digitalRead(modolocal); 201 202 // Local mode commands 203if ( estado_local == HIGH) { 204 205 lcd.clear(); 206 lcd.setCursor( 0,1); 207 lcd.print("Local Mode"); 208 Serial.println("Local Mode"); 209 delay(100); 210 211 if (key == '3') { //Option 1 irrigation 212 213 214 tempo=1; 215 Serial.println(" 1 min Irrigation"); 216 217 lcd.setCursor( 0,1); 218 lcd.println(" 1min__Irrig"); 219 delay(500); 220 } 221 222if (key == '6') { //Option 2 Irrigation 223 224 tempo=2; 225 Serial.println(" 2 mins Irrigation"); 226 227 lcd.setCursor( 0,1); 228 lcd.println("2mins__Irrig"); 229 delay(500); 230 } 231 232 233if (key == '9') { //Option 3 Irrigation 234 235 tempo=3; 236 Serial.println(" 3 mins Irrigation"); 237 238 lcd.setCursor( 0,1); 239 lcd.println("3mins___Irrig"); 240 delay(500); 241 } 242 243 244if (key == '#') { //Option 4 Irrigation 245 246 tempo=5; 247 Serial.println("5 mins Irrigation"); 248 249 lcd.setCursor( 0,1); 250 lcd.println(" 5mins Irrig"); 251 delay(500); 252 } 253 254 255 int comando_apertura = digitalRead(LOCINCMD_OPEN); 256 257 int comando_cierre = digitalRead(LOCINCMD_CLOSE); 258 259 260 if (comando_apertura == HIGH) { 261 262 263 264 digitalWrite(OUTCMD_VALV, LOW); 265 Serial.println(" Local Keypad open valve command sent"); 266 lcd.setCursor( 0,1); 267 lcd.println("CMD/LOCAL/Open/Valv1"); 268 269 tinicio=millis(); //Time stamp for open valve 270 tfinal= (tempo*1000*60)+tinicio; //End time calculation 271 272 Serial.println(tinicio); 273 lcd.clear(); 274 lcd.setCursor( 0,0); 275 lcd.println("Tinic:"); 276 lcd.setCursor(7,0); 277 lcd.println(tinicio); 278 279 Serial.println("End time (s):"); 280 281 Serial.println(tfinal); 282 283 lcd.setCursor( 0,0); 284 lcd.println("tfinal:"); 285 lcd.setCursor(7,0); 286 lcd.println(tfinal); 287 lcd.setCursor(0,1); 288 lcd.println("start counter T"); 289 delay(2000); 290 Serial.println("start counter(s)"); 291 delay(3000); 292 } 293 Serial.println(estado_out2); 294 Serial.println(tempo); 295 delay(100); 296 297 int estado_out2 = digitalRead(OUTCMD_VALV); 298 299 if (tempo > 0) { 300 if (estado_out2 == LOW) { 301 302 tactual = millis(); 303 Serial.println("System Time"); 304 Serial.println(tactual); 305 Serial.println(tinicio); 306 Serial.println("Automatic irrigation - Time acumulated(s):"); 307 Serial.println((tactual-tinicio)/1000); 308 309 lcd.setCursor( 0,0); 310 lcd.println("Tprogreso(s):"); 311 lcd.setCursor(13,0); 312 lcd.println(abs(tactual-tinicio)/1000); 313 314 315 Serial.println("End Time selected (ms):"); 316 Serial.println(tfinal); 317 delay (1000); 318 319 lcd.clear(); 320 lcd.setCursor( 0,1); 321 lcd.println("EndTime(s):"); 322 lcd.setCursor(11,1); 323 lcd.println(abs(tempo*60)); 324 delay(1000); 325 326 327 lcd.clear(); 328 lcd.setCursor( 0,1); 329 lcd.println("Flow(L/M):"); 330 lcd.setCursor(12,1); 331 lcd.println(abs(caudal)); 332 delay(1000); 333 } 334 335 336 if(tfinal <= tactual) { 337 338 if (estado_out2 == LOW){ 339 340 digitalWrite(OUTCMD_VALV, HIGH); 341 Serial.println(" Close Command sent to solenoid valve"); 342 Serial.println("End automatic Irrigation"); 343 delay(3000); 344 345 int volumen = tempo*29; 346 347 Serial.println("Irrigation Volume Aprox. (Lts):"); 348 Serial.println(volumen); 349 delay(2000); 350 351 lcd.clear(); 352 lcd.setCursor( 0,0); 353 lcd.println("End Auto Irrigation"); 354 lcd.setCursor(0,1); 355 lcd.clear(); 356 lcd.println("VolAproxLts:"); 357 lcd.setCursor(12,0); 358 lcd.println(volumen); 359 delay(4000); 360 361 362 tempo=0;} 363 364 } 365 366 } 367 368 369 370 371 372 if (key == 'A') { 373 374 375 376 digitalWrite(OUTCMD_VALV, LOW); 377 Serial.println(" Keypad Open command sent to solenoid valve "); 378 lcd.setCursor( 0,1); 379 lcd.println("CMD/LOCAL/Open/Valv1"); 380 381 tinicio=millis(); //Time stamp 382 tfinal= (tempo*1000*60)+tinicio; //end time calculations 383 384 Serial.println(tinicio); 385 lcd.clear(); 386 lcd.setCursor( 0,0); 387 lcd.println("Tinic:"); 388 lcd.setCursor(7,0); 389 lcd.println(tinicio); 390 391 Serial.println("End Time selected (s):"); 392 393 Serial.println(tfinal); 394 395 lcd.setCursor( 0,0); 396 lcd.println("End Time:"); 397 lcd.setCursor(7,0); 398 lcd.println(tfinal); 399 lcd.setCursor(0,1); 400 lcd.println("Start Counter T"); 401 delay(2000); 402 Serial.println("Start Counter(s)"); 403 delay(5000); 404 } 405 Serial.println(estado_out2); 406 Serial.println(tempo); 407 delay(100); 408 409 // int estado_out2 = digitalRead(OUTCMD_VALV); 410 411 if (tempo > 0) { 412 if (estado_out2 == LOW) { 413 414 tactual = millis(); 415 Serial.println("System Time:"); 416 Serial.println(tactual); 417 Serial.println(tinicio); 418 Serial.println("Time Accumulated Irrigation(s):"); 419 Serial.println((tactual-tinicio)/1000); 420 421 lcd.setCursor( 0,0); 422 lcd.println("Taccumu(s):"); 423 lcd.setCursor(13,0); 424 lcd.println(abs(tactual-tinicio)/1000); 425 426 427 Serial.println("End time selected (ms):"); 428 Serial.println(tfinal); 429 delay (1000); 430 431 lcd.clear(); 432 lcd.setCursor( 0,1); 433 lcd.println("tfinal(s):"); 434 lcd.setCursor(11,1); 435 lcd.println(abs(tempo*60)); 436 delay(1000); 437 438 439 lcd.clear(); 440 lcd.setCursor( 0,1); 441 lcd.println("Caudal(L/M):"); 442 lcd.setCursor(12,1); 443 lcd.println(abs(caudal)); 444 delay(1000); 445 } 446 447 448 if(tfinal <= tactual) { 449 450 if (estado_out2 == LOW){ 451 452 digitalWrite(OUTCMD_VALV, HIGH); 453 Serial.println(" Close command sent to solenoid Valve"); 454 Serial.println("End Automatic Irrigation"); 455 delay(3000); 456 457 int volumen = tempo*29; 458 459 Serial.println("Volume aprox. of irrigation(Lts):"); 460 Serial.println(volumen); 461 delay(2000); 462 463 lcd.clear(); 464 lcd.setCursor( 0,0); 465 lcd.println("End automatic Iirgation"); 466 lcd.setCursor(0,1); 467 lcd.clear(); 468 lcd.println("VolAproxLts:"); 469 lcd.setCursor(12,0); 470 lcd.println(volumen); 471 delay(4000); 472 473 474 tempo=0;} 475 } 476 477 } 478 479 480 481 482 483 484 485 if ( comando_cierre == HIGH) { 486 487 digitalWrite(OUTCMD_VALV, HIGH); 488 Serial.println(" Close command sent to solenoid valve"); 489 lcd.setCursor( 0,1); 490 lcd.println("CMD/Loc/Close/V1"); 491 delay(500); 492 493 } 494 495 496 497 if ( key == 'B') { 498 499 digitalWrite(OUTCMD_VALV, HIGH); 500 Serial.println(" Close command sent from keypad to solenoid valve"); 501 lcd.setCursor( 0,1); 502 lcd.println("CMD/Keyp/Close/Valv1"); 503 } 504 505 506 if ( key == 'C') { //Time of continuos operation fo the system 507 time = millis(); 508 lcd.clear(); 509 lcd.setCursor(0,0); 510 lcd.print("Continous operation Time:"); 511 delay(1000); 512 lcd.setCursor(0,1); 513 Serial.println("Cont. Operation Time"); 514 Serial.println(time); 515 delay(100); 516 517 lcd.print(time); 518 delay(4000); 519 } 520 521 522 523 524 525 if (key == '*') { // Clock reset from keypad 526 527 tfinal=0; 528 Serial.println("Clock reset from keypad"); 529 Serial.println("Irrigation aborted (Lts):"); 530 Serial.println(29*(tactual-tinicio)/60000); 531 lcd.setCursor(0,1); 532 lcd.print("Clock reset from keypad"); 533 delay(2000); 534 535 } 536 537 538 if (key == '2') { // flow report if "2" key is pressed 539 540 flujo(); 541 542 543 } 544 545 546 } 547 548 //REMOTE MODE - BLUETOOTH 549 550 551 552 int estado_remoto = digitalRead(modoremoto); //Lee selector de mando (Local/Remoto) 553 554 if ( estado_remoto == HIGH) { // Mode switch status checking 555 Serial.println ("REMOTE MODE SWITCH"); 556 delay(100); 557 lcd.setCursor( 0,1); 558 lcd.println("REMOTE MODE"); 559 delay(100); 560 561 562 if(Serial1.available() > 0) // Send data when receive data 563 564 {delay(300); 565 data = Serial1.read(); //Read and store data 566 Serial1.print(data); 567 Serial1.print("\ 568"); 569 Serial.print(data); 570 Serial.print("\ 571"); 572 573 574 if(data == '*') { // Reset Bluetooth 575 lcd.setCursor( 0,1); 576 lcd.println("Reset_BTOOTH"); 577 delay(100); 578 579 580 tempo=0; // time initial status 581 tfinal=0; 582 Serial1.print(" Btooth reset of timer !!! "); 583 lcd.setCursor( 0,1); 584 lcd.println("CMD/RESET/T_BTH"); 585 delay(100); 586 587 } 588 589 if (data == '3') { //Option 1 selected from APP 590 591 tempo=1; 592 Serial.println(" 1 min Irrigation"); 593 594 lcd.setCursor( 0,1); 595 lcd.println("1 min___Irrig"); 596 delay(500); 597 } 598 if (data == '6') { //option 2 selected from APP 599 600 tempo=2; 601 Serial.println(" 2 mins Irrigation"); 602 603 lcd.setCursor( 0,1); 604 lcd.println("2 mins__Irrig"); 605 delay(500); 606 } 607 608 609 if (data == '9') { //Option 3 selected from APP 610 611 tempo=3; // 612 Serial.println(" 3 mins Irrigation"); 613 614 lcd.setCursor( 0,1); 615 lcd.println(" mins___Irrig"); 616 delay(500); 617 } 618 619 620 if (data == '#') { //Option 4 selected from APP 621 622 tempo=5; 623 Serial.println("5 mins Irrigation"); 624 625 lcd.setCursor( 0,1); 626 lcd.println(" 5 mins Irrig"); 627 delay(1000); 628 } 629 630 631 632 633 if(data == '0') { 634 635 636 int comando=1; 637 638 digitalWrite(OUTCMD_VALV, LOW); 639 Serial.println("Open command send to solenoid valve"); 640 lcd.setCursor( 0,1); 641 lcd.println("CMD/BTOOT/Open/Val1"); 642 643 tinicio=millis(); //Time stamp 644 tfinal= (tempo*1000*60)+tinicio; //end time calculation 645 646 Serial.println(tinicio); 647 lcd.clear(); 648 lcd.setCursor( 0,0); 649 lcd.println("Tstart:"); 650 lcd.setCursor(7,0); 651 lcd.println(tinicio); 652 653 Serial.println("End Time selected (s):"); 654 655 Serial.println(tfinal); 656 657 lcd.setCursor( 0,0); 658 lcd.println("tend:"); 659 lcd.setCursor(7,0); 660 lcd.println(tfinal); 661 lcd.setCursor(0,1); 662 lcd.println("Start Counter T"); 663 delay(2000); 664 Serial.println("Starting time counter(s)"); 665 delay(3000); 666 } 667 668 669 670 } 671 672 if(data == '1') { // close command from APP 673 digitalWrite(OUTCMD_VALV, HIGH); 674 Serial1.println(" close command send to solenoid valve from APP !!! "); 675 Serial.println(" close command send to solenoid valve from APP !!! !!! "); 676 lcd.setCursor( 0,1); 677 lcd.println("close: 1 Remote-BT"); 678 delay(100); 679 } 680 681 682 } 683 684 int estado_out2 = digitalRead(OUTCMD_VALV); 685 686 if (comando=1) 687 688 if (estado_out2 == LOW){ 689 690 if (tempo > 0) { 691 692 tactual = millis(); 693 Serial.println("System Time:"); 694 Serial.println(tactual); 695 Serial.println(tinicio); 696 Serial.println("Time accumulated Irrigation(s):"); 697 Serial.println((tactual-tinicio)/1000); 698 699 lcd.setCursor( 0,0); 700 lcd.println("Taccum(s):"); 701 lcd.setCursor(13,0); 702 lcd.println(abs(tactual-tinicio)/1000); 703 704 705 Serial.println("End time selected(ms):"); 706 Serial.println(tfinal); 707 delay (1000); 708 709 lcd.clear(); 710 lcd.setCursor( 0,1); 711 lcd.println("Tend(s):"); 712 lcd.setCursor(11,1); 713 lcd.println(abs(tempo*60)); 714 delay(1000); 715 716 717 lcd.clear(); 718 lcd.setCursor( 0,1); 719 lcd.println("Flow(L/Min):"); 720 lcd.setCursor(12,1); 721 lcd.println(abs(caudal)); 722 delay(1000); 723 724 725 726 if(tfinal <= tactual) { 727 int estado_out2 = digitalRead(OUTCMD_VALV); 728 729 730 if (estado_out2 == LOW){ 731 732 digitalWrite(OUTCMD_VALV, HIGH); 733 Serial.println(" Close Command from code -safety trigger"); 734 Serial.println("End Automatic Irrigation"); 735 delay(4000); 736 737 int volumen = tempo*29; 738 739 Serial.println("Volumen aprox. of Irrigation (Lts):"); 740 Serial.println(volumen); 741 delay(3000); 742 743 lcd.clear(); 744 lcd.setCursor( 0,0); 745 lcd.println("End Autom Irrigat"); 746 lcd.setCursor(0,1); 747 lcd.clear(); 748 lcd.println("VolAproxLts:"); 749 lcd.setCursor(12,0); 750 lcd.println(volumen); 751 delay(4000); 752 753 int tempo=0; 754 int comando=100;} 755 756 } 757 758 759 } 760 761 762 763if (key == '*') { //If "*" key is pressed reset the clock 764 tempo=0; 765 tfinal=0; 766 Serial.println("Time reset pressed through keypad"); 767 lcd.setCursor(0,1); 768 lcd.print(" keypad Time Reset"); 769 delay(300); 770 771 772 773 } 774 775 } 776 777// FAIL MODEM CLOSE COMMAND TO SOLENOID VALVE FOR SAFETY 778 779 if (estado_remoto ==0) 780 if (estado_local ==0) 781 782 783 { 784 Serial.println ("ALARM: SYSTEM FAILURE CALL TECHNICAL SERVICE "); 785 delay (500); 786 lcd.setCursor(1,0); 787 lcd.print("Alarma:L/R-UNDEFINED"); 788 lcd.setCursor(0,1); 789 lcd.print("CALL TECHNICAL SERV"); 790 lcd.setCursor(0,0); 791 lcd.print("TURN OFF THE SYSTEM"); 792 793 int (estadosalida =digitalRead (2)); 794 Serial.println(estadosalida); 795 delay(500); 796 if (estadosalida == LOW) { //IF SOLENOID VALVE IS OPEN FOR SAFETY CODE CLOSE ITl 797 798 digitalWrite(OUTCMD_VALV, HIGH); 799 Serial.println("CLOSE TRIGGER SENT BY PROGRAM !!! "); 800 Serial1.println("CLOSE TRIGGER SEND BY PROGRAM!!! "); 801 lcd.setCursor( 0,0); 802 lcd.println("CLOSE VALVE:Program"); 803 lcd.setCursor( 0,1); 804 lcd.println("HARDWARE FAILURE"); 805 delay(500);} 806} 807 808} 809 810 811
Downloadable files
ECORIEGO_bb.jpg
ECORIEGO_bb.jpg
ECORIEGO_bb.jpg
ECORIEGO_bb.jpg
Comments
Only logged in users can leave comments
hbolanos2001
0 Followers
•0 Projects
Table of contents
Intro
15
0