Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <LiquidCrystal.h>
- #include <SPI.h>
- #include <Ethernet.h>
- #include <SD.h>
- #include <OneWire.h>
- File myFile;
- byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x1B, 0x15 };
- IPAddress ip(192,168,1,130);
- EthernetServer server(80);
- const int pump1pin = 28;
- const int pump2pin = 27;
- const int returnpump = 23;
- const int skimmer = 24;
- const int aux1 = 25;
- const int aux2 = 26;
- const int red = 45;
- const int green = 46;
- const int blue = 47;
- OneWire ds(29);
- const int buttonPin = 33;
- const int buttonPin2 = 34;
- const int buttonPin3 = 35;
- int pump1pot = 3;
- int pump2pot = 4;
- int offtimepot = 5;
- int buzzerpin = 7;
- String readString;
- String returnpumpstatus;
- String skimmerstate;
- String aux1state;
- String aux2state;
- String surgestate;
- String runstate;
- String PH;
- String inputstring = "r";
- String sensorstring = "";
- int debounce = 300;
- int temperature;
- int data;
- int surge = 1;
- boolean input_stringcomplete = false;
- boolean sensor_stringcomplete = false;
- LiquidCrystal lcd(43, 44, 42, 41, 40, 39);
- void setup(){
- pinMode(buttonPin, INPUT);
- pinMode(buttonPin2, INPUT);
- pinMode(buttonPin3, INPUT);
- pinMode(53, OUTPUT);
- pinMode(buzzerpin, OUTPUT);
- pinMode(pump1pin, OUTPUT);
- pinMode(pump2pin, OUTPUT);
- pinMode(returnpump, OUTPUT);
- pinMode(skimmer, OUTPUT);
- pinMode(aux1, OUTPUT);
- pinMode(aux2, OUTPUT);
- pinMode(red, OUTPUT);
- pinMode(green, OUTPUT);
- pinMode(blue, OUTPUT);
- digitalWrite(returnpump, LOW);
- digitalWrite(skimmer, LOW);
- digitalWrite(aux1, LOW);
- lcd.begin(16, 2);
- lcd.clear();
- Serial.begin(38400); //set baud rate for the hardware serial port_0 to 38400
- Serial3.begin(38400); //set baud rate for software serial port_3 to 38400
- inputstring.reserve(5); //set aside some bytes for receiving data from the PC
- sensorstring.reserve(30);
- Ethernet.begin(mac, ip);
- server.begin();
- Serial.print("server is at ");
- Serial.println(Ethernet.localIP());
- returnpumpstatus = "ON";
- skimmerstate = "ON";
- aux1state = "ON";
- aux2state = "ON";
- surgestate = "ON";
- runstate = "Normal";
- if (!SD.begin(4)) {
- Serial.println("initialization failed!");
- return;
- }
- Serial.println("initialization done.");
- myFile = SD.open("test.txt");
- if (myFile) {
- Serial.println("test.txt:");
- // read from the file until there's nothing else in it:
- while (myFile.available()) {
- Serial.write(myFile.read());
- }
- // close the file:
- myFile.close();
- } else {
- // if the file didn't open, print an error:
- Serial.println("error opening test.txt");
- }
- }
- void loop(){
- temperature = getTemp();
- temperature = ((temperature * 9 )/5) + 32;
- tempevent();
- unsigned long pump1on = analogRead(pump1pot);
- pump1on = map(pump1on, 0, 1023, 0, 120000);
- unsigned long pump2on = analogRead(pump2pot);
- pump2on = map(pump2on, 0, 1023, 0, 120000);
- unsigned long offtime = analogRead(offtimepot);
- offtime = map(offtime, 0, 1023, 0, 30);
- offtime = ((offtime*1000)*60);
- if(surge == 1){
- static unsigned long prevtime = 0;
- unsigned long pumpcycle = millis() - prevtime;
- if((pumpcycle <= pump1on + offtime) && (pumpcycle >= offtime)) {
- digitalWrite(pump1pin, HIGH);
- }
- else {
- digitalWrite(pump1pin, LOW);
- }
- // If time past is > pump1 pot, pump 2 is on but off if less than pump1 pot
- if ((pumpcycle >= pump1on + offtime) && (pumpcycle <= pump2on + pump1on + offtime)) {
- digitalWrite(pump2pin, HIGH);
- }
- else {
- digitalWrite(pump2pin, LOW);
- }
- // If time past is > than pump1 pot + pump2 pot, timmer is reset and pump 1 is active again.
- if (pump2on + pump1on + offtime <= pumpcycle){
- prevtime = millis();
- }
- }
- if(surge == 0){
- digitalWrite(pump2pin, LOW);
- digitalWrite(pump1pin, LOW);
- }
- pump1on = pump1on/1000;
- pump2on = pump2on/1000;
- Serial3.print(inputstring);
- if (sensor_stringcomplete){
- PH = sensorstring;
- sensorstring = "";
- sensor_stringcomplete = false;
- }
- EthernetClient client = server.available();
- if (client) {
- Serial.println("new client");
- // an http request ends with a blank line
- boolean currentLineIsBlank = true;
- while (client.connected()) {
- if (client.available()) {
- char c = client.read();
- Serial.write(c);
- if (readString.length() < 100) {
- //store characters to string
- readString += c;
- }
- if (c == '\n' && currentLineIsBlank) {
- // send a standard http response header
- client.println("HTTP/1.1 200 OK");
- client.println("Content-Type: text/html");
- client.println("Connnection: close");
- client.println();
- myFile = SD.open("head.txt"); while (myFile.available()) { client.write(myFile.read()); }
- myFile.close();
- client.println("<table width=\"100%\" border=\"1\" bordercolor=\"#3366ff\"><tr><td><center>Left surge pump on time is ");
- client.print(pump1on);
- client.println("S</center></td><td><center> Right surge pump on time is ");
- client.print(pump2on);
- client.print("S </center></td>");
- client.println("<td><center>surge cycle delay time is ");
- client.print(offtime);
- client.print("M</center></td></tr></table><br />");
- 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>");
- client.print(returnpumpstatus);
- client.println("</td><td>");
- client.print(skimmerstate);
- client.println("</td><td>");
- client.print(aux1state);
- client.println("</td><td>");
- client.print(aux2state);
- client.println("</td><td>");
- client.print(surgestate);
- client.println("</td><td>");
- client.print(runstate);
- client.println("</td></tr><tr><td>Actions</td><td>");
- client.println("<a href=\"/?mainon\">ON</a>--"); client.print("<a href=\"/?mainoff\">OFF</a>");
- client.println("</td><td>");
- client.println("<a href=\"/?skimmeron\">ON</a>--"); client.print("<a href=\"/?skimmeroff\">OFF</a>");
- client.println("</td><td>");
- client.println("<a href=\"/?aux1on\">ON</a>--"); client.print("<a href=\"/?aux1off\">OFF</a>");
- client.println("</td><td>");
- client.println("<a href=\"/?aux2on\">ON</a>--"); client.print("<a href=\"/?aux2off\">OFF</a>");
- client.println("</td><td>");
- client.println("<a href=\"/?surgeon\">ON</a>--"); client.print("<a href=\"/?surgeoff\">OFF</a>");
- client.println("</td><td>");
- client.println("<a href=\"/?feedmode\">Feed</a>--"); client.print("<a href=\"/?runmode\">Normal</a>");
- client.println("</td></tr></table><br />");
- client.println("Current time running = "); client.print((millis()/1000)/60);
- client.print("<br /> PH = ");client.println(PH);client.print("<br />TEMP=");client.print(temperature);
- client.println("</body></html>");
- break;
- }
- if (c == '\n') {
- // you're starting a new line
- currentLineIsBlank = true;
- }
- else if (c != '\r') {
- // you've gotten a character on the current line
- currentLineIsBlank = false;
- }
- }
- }
- // give the web browser time to receive the data
- delay(1);
- // close the connection:
- client.stop();
- Serial.println("client disonnected");
- }
- if (readString.indexOf("mainon") >0){
- digitalWrite(returnpump, LOW);
- returnpumpstatus = "ON";
- }
- if (readString.indexOf("mainoff") >0){
- digitalWrite(returnpump, HIGH);
- returnpumpstatus = "OFF";
- }
- if (readString.indexOf("skimmeron") >0){
- digitalWrite(skimmer, LOW);
- skimmerstate = "ON";
- }
- if (readString.indexOf("skimmeroff") >0){
- digitalWrite(skimmer, HIGH);
- skimmerstate = "OFF";
- }
- if (readString.indexOf("aux1on") >0){
- digitalWrite(aux1, LOW);
- aux1state = "ON";
- }
- if (readString.indexOf("aux1off") >0){
- digitalWrite(aux1, HIGH);
- aux1state = "OFF";
- }
- if (readString.indexOf("aux2on") >0){
- digitalWrite(aux2, LOW);
- aux2state = "ON";
- }
- if (readString.indexOf("aux2off") >0){
- digitalWrite(aux2, HIGH);
- aux2state = "OFF";
- }
- if (readString.indexOf("surgeon") >0){
- surge = 1;
- surgestate = "ON";
- }
- if (readString.indexOf("surgeoff") >0){
- surge = 0;
- surgestate = "OFF";
- }
- if (readString.indexOf("feedmode") >0){
- runstate = "Feed";
- digitalWrite(aux1, HIGH);
- digitalWrite(returnpump, HIGH);
- digitalWrite(skimmer, HIGH);
- aux1state = "OFF";
- skimmerstate = "OFF";
- returnpumpstatus = "OFF";
- runstate = "Feed";
- surgestate = "OFF";
- surge=0;
- }
- if (readString.indexOf("runmode") >0){
- digitalWrite(aux1, LOW);
- digitalWrite(returnpump, LOW);
- digitalWrite(skimmer, LOW);
- aux1state = "ON";
- skimmerstate = "ON";
- returnpumpstatus = "ON";
- runstate = "Normal";
- surgestate = "ON";
- surge=1;
- }
- readString="";
- // Read and remap pots
- static int buttonPushCounter = 1; // counter for the number of button presses
- static int buttonState; // current state of the button
- static int buttonState2;
- static int buttonState3;
- static int lastButtonState;
- static int lastButtonState2;
- static int lastButtonState3;
- buttonState = digitalRead(buttonPin);
- if (buttonState != lastButtonState) {
- if (buttonState == HIGH) {
- buttonPushCounter++;
- }
- }
- buttonState2 = digitalRead(buttonPin2);
- if (buttonState2 != lastButtonState2) {
- if (buttonState2 == HIGH){
- buttonPushCounter--;
- }
- }
- lastButtonState = buttonState;
- lastButtonState2 = buttonState2;
- if (buttonPushCounter == 6){buttonPushCounter = 1;}
- buttonState3 = digitalRead(buttonPin3);
- switch(buttonPushCounter){
- case 1:
- lcd.clear();
- lcd.print("PH TEMP");
- lcd.setCursor(0, 1);
- lcd.print(PH);
- lcd.setCursor(6,1);
- lcd.print(temperature);
- break;
- case 2:
- lcd.clear();
- lcd.print("Surge L - R - O");
- lcd.setCursor(0, 1);
- lcd.print("Times");
- lcd.setCursor(6, 1);
- lcd.print(pump1on);
- lcd.setCursor(10, 1);
- lcd.print(pump2on);
- lcd.setCursor(14, 1);
- lcd.print(offtime);
- break;
- case 3:
- static unsigned long time = 0;
- static int previous;
- if (buttonState3 == LOW && previous == HIGH && millis() - time > debounce) {
- if(returnpumpstatus == "ON"){digitalWrite(returnpump, HIGH);returnpumpstatus = "OFF";}
- else if(returnpumpstatus == "OFF"){digitalWrite(returnpump, LOW);returnpumpstatus = "ON";}
- time = millis();
- }
- previous = buttonState3;
- lcd.clear();
- lcd.print("Main Return Pump");
- lcd.setCursor(0, 1);
- lcd.print(returnpumpstatus);
- break;
- case 4:
- if (buttonState3 == HIGH && previous == LOW && millis() - time > debounce) {
- if(skimmerstate == "ON"){digitalWrite(skimmer, HIGH);skimmerstate = "OFF";}
- else if(skimmerstate == "OFF"){digitalWrite(skimmer, LOW);skimmerstate = "ON";}
- time = millis();
- }
- previous = buttonState3;
- lcd.clear();
- lcd.print("Skimmer Pump");
- lcd.setCursor(0, 1);
- lcd.print(skimmerstate);
- break;
- case 5:
- lcd.clear();
- lcd.print("MALEK LOVE'S");
- lcd.setCursor(0, 1);
- lcd.print("8========>");
- break;
- }
- }
- void serialEvent3(){ //if the hardware serial port_3 receives a char
- char inchar = (char)Serial3.read();
- if(inchar == '\r') {sensor_stringcomplete = true;}
- else{sensorstring += inchar;}
- }
- float getTemp(){
- //returns the temperature from one DS18S20 in DEG Celsius
- byte data[12];
- byte addr[8];
- if ( !ds.search(addr)) {
- //no more sensors on chain, reset search
- ds.reset_search();
- return -1000;
- }
- if ( OneWire::crc8( addr, 7) != addr[7]) {
- Serial.println("CRC is not valid!");
- return -1000;
- }
- if ( addr[0] != 0x10 && addr[0] != 0x28) {
- Serial.print("Device is not recognized");
- return -1000;
- }
- ds.reset();
- ds.select(addr);
- ds.write(0x44,1); // start conversion, with parasite power on at the end
- byte present = ds.reset();
- ds.select(addr);
- ds.write(0xBE); // Read Scratchpad
- for (int i = 0; i < 9; i++) { // we need 9 bytes
- data[i] = ds.read();
- }
- ds.reset_search();
- byte MSB = data[1];
- byte LSB = data[0];
- float tempRead = ((MSB << 8) | LSB); //using two's compliment
- float TemperatureSum = tempRead / 16;
- return TemperatureSum;
- }
- void tempevent(){
- static unsigned long prevbuzz = 0;
- unsigned long i = millis() - prevbuzz;
- if(temperature < 76){
- digitalWrite(red, LOW);
- digitalWrite(green, LOW);
- digitalWrite(blue, HIGH);
- if((i>0) && (i<=500)){
- digitalWrite(buzzerpin, HIGH);
- }
- else digitalWrite(buzzerpin, LOW);
- if(10000<=i){prevbuzz = millis();}
- }
- else if((temperature >= 76) && (temperature < 81)){
- digitalWrite(red, LOW);
- digitalWrite(blue, LOW);
- digitalWrite(green, HIGH);
- digitalWrite(buzzerpin, LOW);}
- if(temperature >= 81){
- digitalWrite(green, LOW);
- digitalWrite(blue, LOW);
- digitalWrite(red, HIGH);
- if((i>0) && (i<=500)){
- digitalWrite(buzzerpin, HIGH);
- }
- else digitalWrite(buzzerpin, LOW);
- if(1000<=i){prevbuzz = millis();}}
- }
Add Comment
Please, Sign In to add comment