Guest User

Untitled

a guest
Jan 20th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 14.54 KB | None | 0 0
  1. #include <LiquidCrystal.h>
  2. #include <SPI.h>
  3. #include <Ethernet.h>
  4. #include <SD.h>
  5. #include <OneWire.h>
  6. File myFile;
  7. byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x1B, 0x15 };
  8. IPAddress ip(192,168,1,130);
  9. EthernetServer server(80);
  10. const int pump1pin = 28;
  11. const int pump2pin = 27;
  12. const int returnpump = 23;
  13. const int skimmer = 24;
  14. const int aux1 = 25;
  15. const int aux2 = 26;
  16. const int red = 45;
  17. const int green = 46;
  18. const int blue = 47;
  19. OneWire ds(29);
  20. const int  buttonPin = 33;
  21. const int  buttonPin2 = 34;
  22. const int  buttonPin3 = 35;
  23. int pump1pot = 3;
  24. int pump2pot = 4;
  25. int offtimepot = 5;
  26. int buzzerpin = 7;
  27. String readString;
  28. String returnpumpstatus;
  29. String skimmerstate;
  30. String aux1state;
  31. String aux2state;
  32. String surgestate;
  33. String runstate;
  34. String PH;
  35. String inputstring = "r";                                                      
  36. String sensorstring = "";
  37. int debounce = 300;
  38. int temperature;
  39. int data;
  40. int surge = 1;
  41.  
  42.                                                  
  43. boolean input_stringcomplete = false;                                          
  44. boolean sensor_stringcomplete = false;
  45.  
  46. LiquidCrystal lcd(43, 44, 42, 41, 40, 39);
  47.  
  48. void setup(){
  49.  
  50.   pinMode(buttonPin, INPUT);
  51.   pinMode(buttonPin2, INPUT);
  52.   pinMode(buttonPin3, INPUT);
  53.   pinMode(53, OUTPUT);
  54.   pinMode(buzzerpin, OUTPUT);
  55.   pinMode(pump1pin, OUTPUT);
  56.   pinMode(pump2pin, OUTPUT);
  57.   pinMode(returnpump, OUTPUT);
  58.   pinMode(skimmer, OUTPUT);
  59.   pinMode(aux1, OUTPUT);
  60.   pinMode(aux2, OUTPUT);
  61.   pinMode(red, OUTPUT);
  62.   pinMode(green, OUTPUT);
  63.   pinMode(blue, OUTPUT);
  64.   digitalWrite(returnpump, LOW);
  65.   digitalWrite(skimmer, LOW);
  66.   digitalWrite(aux1, LOW);
  67.   lcd.begin(16, 2);
  68.   lcd.clear();
  69.   Serial.begin(38400);                                                      //set baud rate for the hardware serial port_0 to 38400
  70.   Serial3.begin(38400);                                                     //set baud rate for software serial port_3 to 38400
  71.   inputstring.reserve(5);                                                   //set aside some bytes for receiving data from the PC
  72.   sensorstring.reserve(30);
  73.   Ethernet.begin(mac, ip);
  74.   server.begin();
  75.   Serial.print("server is at ");
  76.   Serial.println(Ethernet.localIP());
  77.   returnpumpstatus = "ON";
  78.   skimmerstate = "ON";
  79.   aux1state = "ON";
  80.   aux2state = "ON";
  81.   surgestate = "ON";
  82.   runstate = "Normal";
  83.   if (!SD.begin(4)) {
  84.     Serial.println("initialization failed!");
  85.     return;
  86.   }
  87.   Serial.println("initialization done.");
  88.  
  89. myFile = SD.open("test.txt");
  90.   if (myFile) {
  91.     Serial.println("test.txt:");
  92.    
  93.     // read from the file until there's nothing else in it:
  94.     while (myFile.available()) {
  95.         Serial.write(myFile.read());
  96.     }
  97.     // close the file:
  98.     myFile.close();
  99.   } else {
  100.     // if the file didn't open, print an error:
  101.     Serial.println("error opening test.txt");
  102.   }
  103. }
  104.  
  105. void loop(){
  106.  
  107.  temperature = getTemp();
  108.  temperature = ((temperature * 9 )/5) + 32;
  109.  tempevent();
  110.  
  111.   unsigned long pump1on = analogRead(pump1pot);
  112.   pump1on = map(pump1on, 0, 1023, 0, 120000);
  113.   unsigned long pump2on = analogRead(pump2pot);
  114.   pump2on = map(pump2on, 0, 1023, 0, 120000);
  115.   unsigned long offtime = analogRead(offtimepot);
  116.   offtime = map(offtime, 0, 1023, 0, 30);
  117.   offtime = ((offtime*1000)*60);
  118.      if(surge == 1){
  119.      static unsigned long prevtime = 0;
  120.        unsigned long pumpcycle = millis() - prevtime;
  121.          if((pumpcycle <= pump1on + offtime) && (pumpcycle >= offtime)) {
  122.           digitalWrite(pump1pin, HIGH);
  123.           }  
  124.          else {
  125.         digitalWrite(pump1pin, LOW);
  126.               }
  127. // If time past is > pump1 pot, pump 2 is on but off if less than pump1 pot  
  128.         if ((pumpcycle >= pump1on + offtime) && (pumpcycle <= pump2on + pump1on + offtime)) {
  129.           digitalWrite(pump2pin, HIGH);
  130.           }  
  131.         else {
  132.           digitalWrite(pump2pin, LOW);
  133.              }
  134. // If time past is > than pump1 pot + pump2 pot, timmer is reset and pump 1 is active again.
  135.         if (pump2on + pump1on + offtime <= pumpcycle){
  136.         prevtime = millis();
  137.           }
  138.    }
  139.  
  140.    if(surge == 0){
  141.    digitalWrite(pump2pin, LOW);
  142.    digitalWrite(pump1pin, LOW);
  143.    }
  144. pump1on = pump1on/1000;  
  145. pump2on = pump2on/1000;
  146.  
  147.  
  148.   Serial3.print(inputstring);
  149.      if (sensor_stringcomplete){                                                    
  150.       PH = sensorstring;
  151.       sensorstring = "";                                                      
  152.       sensor_stringcomplete = false;                                          
  153.       }
  154.  
  155. EthernetClient client = server.available();
  156.  
  157.   if (client) {
  158.     Serial.println("new client");
  159.     // an http request ends with a blank line
  160.     boolean currentLineIsBlank = true;
  161.     while (client.connected()) {
  162.       if (client.available()) {
  163.         char c = client.read();
  164.         Serial.write(c);
  165.         if (readString.length() < 100) {
  166.           //store characters to string
  167.           readString += c;
  168.         }
  169.         if (c == '\n' && currentLineIsBlank) {
  170.           // send a standard http response header
  171.           client.println("HTTP/1.1 200 OK");
  172.           client.println("Content-Type: text/html");
  173.           client.println("Connnection: close");
  174.           client.println();
  175.           myFile = SD.open("head.txt"); while (myFile.available()) { client.write(myFile.read()); }
  176.           myFile.close();
  177.           client.println("<table width=\"100%\" border=\"1\" bordercolor=\"#3366ff\"><tr><td><center>Left surge pump on time is ");
  178.           client.print(pump1on);
  179.           client.println("S</center></td><td><center> Right surge pump on time is ");
  180.           client.print(pump2on);
  181.           client.print("S </center></td>");
  182.           client.println("<td><center>surge cycle delay time is ");
  183.           client.print(offtime);
  184.           client.print("M</center></td></tr></table><br />");
  185.           client.println("<table width=\"100%\" border=\"1\" bordercolor=\"#00FF00\"><tr><td>Device</td><td>Main Return Pump</td><td>Skimmer Pump</td><td>UV / Reactor</td><td>Aux 2</td><td>Surge Pumps</td><td>Run Mode</td></tr><tr><td>Status</td><td>");
  186.           client.print(returnpumpstatus);
  187.           client.println("</td><td>");
  188.           client.print(skimmerstate);
  189.           client.println("</td><td>");
  190.           client.print(aux1state);
  191.           client.println("</td><td>");
  192.           client.print(aux2state);
  193.           client.println("</td><td>");
  194.           client.print(surgestate);
  195.           client.println("</td><td>");
  196.           client.print(runstate);
  197.           client.println("</td></tr><tr><td>Actions</td><td>");
  198.           client.println("<a href=\"/?mainon\">ON</a>--"); client.print("<a href=\"/?mainoff\">OFF</a>");
  199.           client.println("</td><td>");
  200.           client.println("<a href=\"/?skimmeron\">ON</a>--"); client.print("<a href=\"/?skimmeroff\">OFF</a>");
  201.           client.println("</td><td>");
  202.           client.println("<a href=\"/?aux1on\">ON</a>--"); client.print("<a href=\"/?aux1off\">OFF</a>");
  203.           client.println("</td><td>");
  204.           client.println("<a href=\"/?aux2on\">ON</a>--"); client.print("<a href=\"/?aux2off\">OFF</a>");
  205.           client.println("</td><td>");
  206.           client.println("<a href=\"/?surgeon\">ON</a>--"); client.print("<a href=\"/?surgeoff\">OFF</a>");
  207.           client.println("</td><td>");
  208.           client.println("<a href=\"/?feedmode\">Feed</a>--"); client.print("<a href=\"/?runmode\">Normal</a>");
  209.           client.println("</td></tr></table><br />");
  210.           client.println("Current time running = "); client.print((millis()/1000)/60);
  211.           client.print("<br /> PH = ");client.println(PH);client.print("<br />TEMP=");client.print(temperature);
  212.           client.println("</body></html>");
  213.          
  214.           break;
  215.         }
  216.         if (c == '\n') {
  217.           // you're starting a new line
  218.           currentLineIsBlank = true;
  219.         }
  220.         else if (c != '\r') {
  221.           // you've gotten a character on the current line
  222.           currentLineIsBlank = false;
  223.         }
  224.       }
  225.     }
  226.     // give the web browser time to receive the data
  227.     delay(1);
  228.     // close the connection:
  229.     client.stop();
  230.     Serial.println("client disonnected");
  231.   }  
  232.       if (readString.indexOf("mainon") >0){
  233.     digitalWrite(returnpump, LOW);
  234.     returnpumpstatus = "ON";
  235.       }
  236.       if (readString.indexOf("mainoff") >0){
  237.     digitalWrite(returnpump, HIGH);
  238.     returnpumpstatus = "OFF";
  239.       }
  240.       if (readString.indexOf("skimmeron") >0){
  241.     digitalWrite(skimmer, LOW);
  242.     skimmerstate = "ON";
  243.       }
  244.       if (readString.indexOf("skimmeroff") >0){
  245.     digitalWrite(skimmer, HIGH);
  246.     skimmerstate = "OFF";
  247.       }
  248.       if (readString.indexOf("aux1on") >0){
  249.     digitalWrite(aux1, LOW);
  250.     aux1state = "ON";
  251.       }
  252.       if (readString.indexOf("aux1off") >0){
  253.     digitalWrite(aux1, HIGH);
  254.     aux1state = "OFF";
  255.       }
  256.       if (readString.indexOf("aux2on") >0){
  257.     digitalWrite(aux2, LOW);
  258.     aux2state = "ON";
  259.       }
  260.       if (readString.indexOf("aux2off") >0){
  261.     digitalWrite(aux2, HIGH);
  262.     aux2state = "OFF";
  263.       }
  264.       if (readString.indexOf("surgeon") >0){
  265.     surge = 1;
  266.     surgestate = "ON";
  267.       }
  268.       if (readString.indexOf("surgeoff") >0){
  269.     surge = 0;
  270.     surgestate = "OFF";
  271.       }
  272.       if (readString.indexOf("feedmode") >0){
  273.         runstate = "Feed";
  274.         digitalWrite(aux1, HIGH);
  275.         digitalWrite(returnpump, HIGH);
  276.         digitalWrite(skimmer, HIGH);
  277.         aux1state = "OFF";
  278.         skimmerstate = "OFF";
  279.         returnpumpstatus = "OFF";
  280.         runstate = "Feed";
  281.         surgestate = "OFF";
  282.         surge=0;
  283.       }
  284.       if (readString.indexOf("runmode") >0){
  285.         digitalWrite(aux1, LOW);
  286.         digitalWrite(returnpump, LOW);
  287.         digitalWrite(skimmer, LOW);
  288.         aux1state = "ON";
  289.         skimmerstate = "ON";
  290.         returnpumpstatus = "ON";
  291.         runstate = "Normal";
  292.         surgestate = "ON";
  293.         surge=1;
  294.       }    
  295.          readString="";
  296. // Read and remap pots
  297. static int buttonPushCounter = 1;   // counter for the number of button presses
  298. static int buttonState;         // current state of the button
  299. static int buttonState2;
  300. static int buttonState3;
  301. static int lastButtonState;
  302. static int lastButtonState2;
  303. static int lastButtonState3;
  304.   buttonState = digitalRead(buttonPin);
  305.      if (buttonState != lastButtonState) {
  306.      if (buttonState == HIGH) {
  307.       buttonPushCounter++;
  308.     }
  309.   }
  310.     buttonState2 = digitalRead(buttonPin2);
  311.     if (buttonState2 != lastButtonState2) {
  312.       if (buttonState2 == HIGH){
  313.       buttonPushCounter--;
  314.     }
  315.   }
  316.  
  317.      lastButtonState = buttonState;
  318.      lastButtonState2 = buttonState2;
  319.      
  320.     if (buttonPushCounter == 6){buttonPushCounter = 1;}
  321.     buttonState3 = digitalRead(buttonPin3);
  322.     switch(buttonPushCounter){
  323.     case 1:
  324.     lcd.clear();
  325.     lcd.print("PH    TEMP");
  326.     lcd.setCursor(0, 1);
  327.     lcd.print(PH);
  328.     lcd.setCursor(6,1);
  329.     lcd.print(temperature);
  330.     break;
  331.     case 2:
  332.     lcd.clear();
  333.     lcd.print("Surge L - R - O");
  334.     lcd.setCursor(0, 1);
  335.     lcd.print("Times");
  336.     lcd.setCursor(6, 1);
  337.     lcd.print(pump1on);
  338.     lcd.setCursor(10, 1);
  339.     lcd.print(pump2on);
  340.     lcd.setCursor(14, 1);
  341.     lcd.print(offtime);
  342.     break;
  343.     case 3:
  344.     static unsigned long time = 0;
  345.     static int previous;
  346.     if (buttonState3 == LOW && previous == HIGH && millis() - time > debounce) {
  347.   if(returnpumpstatus == "ON"){digitalWrite(returnpump, HIGH);returnpumpstatus = "OFF";}
  348.   else if(returnpumpstatus == "OFF"){digitalWrite(returnpump, LOW);returnpumpstatus = "ON";}
  349.     time = millis();    
  350.   }
  351. previous = buttonState3;
  352.     lcd.clear();
  353.     lcd.print("Main Return Pump");
  354.     lcd.setCursor(0, 1);
  355.     lcd.print(returnpumpstatus);
  356.     break;
  357.     case 4:
  358.   if (buttonState3 == HIGH && previous == LOW && millis() - time > debounce) {
  359.   if(skimmerstate == "ON"){digitalWrite(skimmer, HIGH);skimmerstate = "OFF";}
  360.   else if(skimmerstate == "OFF"){digitalWrite(skimmer, LOW);skimmerstate = "ON";}
  361.  
  362.     time = millis();    
  363.   }
  364. previous = buttonState3;
  365.     lcd.clear();
  366.     lcd.print("Skimmer Pump");
  367.     lcd.setCursor(0, 1);
  368.     lcd.print(skimmerstate);
  369.     break;
  370.     case 5:
  371.     lcd.clear();
  372.     lcd.print("MALEK LOVE'S");
  373.     lcd.setCursor(0, 1);
  374.     lcd.print("8========>");
  375.     break;
  376.   }
  377.  
  378.  
  379.    
  380. }
  381. void serialEvent3(){                                                         //if the hardware serial port_3 receives a char
  382.               char inchar = (char)Serial3.read();
  383.               if(inchar == '\r') {sensor_stringcomplete = true;}
  384.               else{sensorstring += inchar;}                            
  385.              }
  386.  
  387. float getTemp(){
  388.   //returns the temperature from one DS18S20 in DEG Celsius
  389.  
  390.   byte data[12];
  391.   byte addr[8];
  392.  
  393.   if ( !ds.search(addr)) {
  394.       //no more sensors on chain, reset search
  395.       ds.reset_search();
  396.       return -1000;
  397.   }
  398.  
  399.   if ( OneWire::crc8( addr, 7) != addr[7]) {
  400.       Serial.println("CRC is not valid!");
  401.       return -1000;
  402.   }
  403.  
  404.   if ( addr[0] != 0x10 && addr[0] != 0x28) {
  405.       Serial.print("Device is not recognized");
  406.       return -1000;
  407.   }
  408.  
  409.   ds.reset();
  410.   ds.select(addr);
  411.   ds.write(0x44,1); // start conversion, with parasite power on at the end
  412.  
  413.   byte present = ds.reset();
  414.   ds.select(addr);    
  415.   ds.write(0xBE); // Read Scratchpad
  416.  
  417.  
  418.   for (int i = 0; i < 9; i++) { // we need 9 bytes
  419.     data[i] = ds.read();
  420.   }
  421.  
  422.   ds.reset_search();
  423.  
  424.   byte MSB = data[1];
  425.   byte LSB = data[0];
  426.  
  427.   float tempRead = ((MSB << 8) | LSB); //using two's compliment
  428.   float TemperatureSum = tempRead / 16;
  429.     return TemperatureSum;
  430.   }
  431.  
  432.  
  433. void tempevent(){
  434.   static unsigned long prevbuzz = 0;
  435.     unsigned long i = millis() - prevbuzz;
  436.     if(temperature < 76){
  437.       digitalWrite(red, LOW);
  438.       digitalWrite(green, LOW);
  439.       digitalWrite(blue, HIGH);
  440.       if((i>0) && (i<=500)){
  441.         digitalWrite(buzzerpin, HIGH);
  442.       }
  443.       else digitalWrite(buzzerpin, LOW);
  444.       if(10000<=i){prevbuzz = millis();}      
  445.        }
  446.      
  447.     else if((temperature >= 76) && (temperature < 81)){
  448.       digitalWrite(red, LOW);
  449.       digitalWrite(blue, LOW);
  450.       digitalWrite(green, HIGH);
  451.       digitalWrite(buzzerpin, LOW);}
  452.    
  453.    if(temperature >= 81){
  454.       digitalWrite(green, LOW);
  455.       digitalWrite(blue, LOW);
  456.       digitalWrite(red, HIGH);
  457.       if((i>0) && (i<=500)){
  458.        digitalWrite(buzzerpin, HIGH);
  459.       }
  460.       else digitalWrite(buzzerpin, LOW);
  461.       if(1000<=i){prevbuzz = millis();}}
  462.     }
Add Comment
Please, Sign In to add comment