Advertisement
Guest User

Auto & Manual Web Temp Fan Control

a guest
Jul 20th, 2014
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 12.36 KB | None | 0 0
  1. #include <DigiFi.h>
  2. #include <OneWire.h>
  3. #include <DallasTemperature.h>
  4. #include <Timer.h>
  5.  
  6. #define ONE_WIRE_BUS 24
  7. OneWire oneWire(ONE_WIRE_BUS);
  8. DallasTemperature sensors(&oneWire);
  9. DeviceAddress insideThermometer, outsideThermometer;
  10.  
  11. int AUTO = 1;
  12. String control;
  13.  
  14. Timer t;
  15.  
  16. DigiFi server;
  17.  
  18. //TEMP ALARM
  19. void newAlarmHandler(uint8_t* deviceAddress)
  20. {
  21.   Serial.println("Alarm Handler Start");
  22.   printAlarmInfo(deviceAddress);
  23.   printTemp(deviceAddress);
  24.   Serial.println();
  25.   Serial.println("Alarm Handler Finish");
  26. }
  27.  
  28. void printCurrentTemp(DeviceAddress deviceAddress)
  29. {
  30.   printAddress(deviceAddress);
  31.   printTemp(deviceAddress);
  32.   Serial.println();
  33. }
  34.  
  35. void printAddress(DeviceAddress deviceAddress)
  36. {
  37.   Serial.print("Address: ");
  38.   for (uint8_t i = 0; i < 8; i++)
  39.   {
  40.     if (deviceAddress[i] < 16) Serial.print("0");
  41.     Serial.print(deviceAddress[i], HEX);
  42.   }
  43.   Serial.print(" ");
  44. }
  45.  
  46. void printTemp(DeviceAddress deviceAddress)
  47. {
  48.   float tempC = sensors.getTempC(deviceAddress);
  49.   if (tempC != DEVICE_DISCONNECTED)
  50.   {
  51.     Serial.print("Current Temp C: ");
  52.     Serial.print(tempC);
  53.   }
  54.   else Serial.print("DEVICE DISCONNECTED");
  55.   Serial.print(" ");
  56. }
  57.  
  58. void printAlarmInfo(DeviceAddress deviceAddress)
  59. {
  60.   char temp;
  61.   printAddress(deviceAddress);
  62.   temp = sensors.getHighAlarmTemp(deviceAddress);
  63.   Serial.print("High Alarm: ");
  64.   Serial.print(temp, DEC);
  65.   Serial.print("C");
  66.   Serial.print(" Low Alarm: ");
  67.   temp = sensors.getLowAlarmTemp(deviceAddress);
  68.   Serial.print(temp, DEC);
  69.   Serial.print("C");
  70.   Serial.print(" ");
  71. }
  72.  
  73. //SETUP
  74. void setup() {
  75.  
  76.   Serial.begin(9600);
  77.   server.begin(9600);
  78.   sensors.begin();
  79.   t.every(30 * 1000, readTemp); // 10 minutes  
  80.  
  81.    // locate devices on the bus
  82.   Serial.print("Found ");
  83.   Serial.print(sensors.getDeviceCount(), DEC);
  84.   Serial.println(" devices.");
  85.  
  86.   // search for devices on the bus and assign based on an index
  87.   if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0");
  88.   if (!sensors.getAddress(outsideThermometer, 1)) Serial.println("Unable to find address for Device 1");
  89.  
  90.   Serial.print("Device insideThermometer ");
  91.   printAlarmInfo(insideThermometer);
  92.   Serial.println();
  93.  
  94.   Serial.print("Device outsideThermometer ");
  95.   printAlarmInfo(outsideThermometer);
  96.   Serial.println();
  97.  
  98.   // set alarm ranges
  99.   Serial.println("Setting alarm temps...");
  100.   sensors.setHighAlarmTemp(insideThermometer, 27);
  101.   sensors.setLowAlarmTemp(insideThermometer, 10);
  102.   sensors.setHighAlarmTemp(outsideThermometer, 27);
  103.   sensors.setLowAlarmTemp(outsideThermometer, 10);
  104.  
  105.   Serial.print("New insideThermometer ");
  106.   printAlarmInfo(insideThermometer);
  107.   Serial.println();
  108.  
  109.   Serial.print("New outsideThermometer ");
  110.   printAlarmInfo(outsideThermometer);
  111.   Serial.println();
  112.  
  113.   // attach alarm handler
  114.   sensors.setAlarmHandler(&newAlarmHandler);
  115.  
  116.   pinMode(7,OUTPUT);
  117.   pinMode(6,OUTPUT);
  118.   pinMode(5,OUTPUT);
  119.   pinMode(4,OUTPUT);
  120.  
  121.   digitalWrite(7,HIGH);
  122.   digitalWrite(6,LOW);
  123.   digitalWrite(5,LOW);
  124.   digitalWrite(4,LOW);
  125.  
  126.   //DigiX trick - since we are on serial over USB wait for character to be entered in serial terminal
  127.   while(!Serial.available()){
  128.     Serial.println("Enter any key to begin");
  129.     delay(1000);
  130.   }
  131.  
  132.   Serial.println("Starting");
  133.   Serial.println("wifi inited");
  134.  
  135.   while (server.ready() != 1)
  136.   {
  137.     Serial.println("Error connecting to network");
  138.     delay(15000);
  139.   }  
  140.  
  141.   Serial.println("Connected to wifi!");
  142.   Serial.print("Server running at: ");
  143.   String address = server.server(8080);//sets up server and returns IP
  144.   Serial.println(address);
  145.  
  146. }
  147.  
  148. //LOOP
  149. void loop() {
  150.   if ( server.serverRequest()){
  151.     if( findOutHowManyCharInAString( server.serverRequestPath() , '=') !=0){
  152.       getUrlVariablesFromWifiString( server.serverRequestPath() );
  153.       server.serverResponse(htmlReturn()); //need relay so brouser dont hang
  154.     }
  155.     else
  156.       server.serverResponse(htmlPage()); //defaults to 200
  157.   }
  158.   t.update();
  159. }
  160.  
  161. //TEMP&TIMER
  162. void readTemp()
  163. {
  164.    // ask the devices to measure the temperature
  165.   sensors.requestTemperatures();
  166.  
  167.   // if an alarm condition exists as a result of the most recent
  168.   // requestTemperatures() request, it exists until the next time
  169.   // requestTemperatures() is called AND there isn't an alarm condition
  170.   // on the device
  171.   if (sensors.hasAlarm(insideThermometer)){
  172.     float tempC = sensors.getTempC(insideThermometer);
  173.     if (tempC != DEVICE_DISCONNECTED) {
  174.         if (tempC >= sensors.getHighAlarmTemp(insideThermometer)) {
  175.             Serial.println("Oh noes!  There is at least one alarm on the bus.");
  176.             {
  177.             if (AUTO == 1)
  178.               {  
  179.               analogWrite( 11, 255 );
  180.               }
  181.             }  
  182.          }  
  183.         if (tempC <= sensors.getLowAlarmTemp(insideThermometer)) {
  184.             // LOW alarm
  185.          }
  186.     }
  187.   }
  188.  
  189.   // call alarm handler function defined by sensors.setAlarmHandler
  190.   // for each device reporting an alarm
  191.   sensors.processAlarms();
  192.  
  193.   if (!sensors.hasAlarm())
  194.   {
  195.     // just print out the current temperature
  196.     printCurrentTemp(insideThermometer);
  197.     printCurrentTemp(outsideThermometer);
  198.     {
  199.     if (AUTO == 1)
  200.             {
  201.             analogWrite( 11, 0 );
  202.             }
  203.     }    
  204.   }
  205. }
  206.  
  207. //WEB&WIFI
  208.  
  209. void runVariableCommand(String string){
  210.  if(string.charAt(0)=='d'){ // letter d = Digital
  211.  
  212.    int endOfVariableName = string.indexOf('=');
  213.    int booleanValue = stringToInt(string.substring(endOfVariableName+1,string.length()));
  214.    String variableName   = string.substring(0,endOfVariableName);
  215.    digitalWrite( stringToInt( variableName.substring(1,variableName.length()) ), booleanValue );
  216.    Serial.print("digital Pin ");
  217.    Serial.print(stringToInt( variableName.substring(1,variableName.length()) ));
  218.    Serial.print(" to ");
  219.    Serial.println(booleanValue);
  220.  }
  221.  if(string.charAt(0)=='a'){ // letter a = Analog
  222.    int endOfVariableName = string.indexOf('=');
  223.    int booleanValue = stringToInt(string.substring(endOfVariableName+1,string.length()));
  224.    String variableName   = string.substring(0,endOfVariableName);
  225.    analogWrite( stringToInt( variableName.substring(1,variableName.length()) ), booleanValue );
  226.    Serial.print("Analog Pin ");
  227.    Serial.print(stringToInt( variableName.substring(1,variableName.length()) ));
  228.    Serial.print(" to ");
  229.    Serial.println(booleanValue);
  230.  }
  231.  if(string.charAt(0)=='f'){ // letter a = Analog
  232.    int endOfVariableName = string.indexOf('=');
  233.    int booleanValue = stringToInt(string.substring(endOfVariableName+1,string.length()));
  234.    String variableName   = string.substring(0,endOfVariableName);
  235.    float calc = ((float) 255) / 100;
  236.    calc = calc * booleanValue;
  237.    booleanValue = calc;
  238.    analogWrite( stringToInt( variableName.substring(1,variableName.length()) ), booleanValue );
  239.    Serial.print("Fan speed Pin ");
  240.    Serial.print(stringToInt( variableName.substring(1,variableName.length()) ));
  241.    Serial.print(" to ");
  242.    Serial.println(booleanValue);
  243.  }
  244.  if(string.charAt(0)=='m'){ // letter d = Digital
  245.  
  246.    int endOfVariableName = string.indexOf('=');
  247.    int booleanValue = stringToInt(string.substring(endOfVariableName+1,string.length()));
  248.    String variableName   = string.substring(0,endOfVariableName);
  249.    digitalWrite( stringToInt( variableName.substring(1,variableName.length()) ), booleanValue );
  250.    AUTO = booleanValue;
  251.    Serial.print("AUTO =");
  252.    Serial.println(booleanValue);
  253.  }
  254. }
  255.  
  256. boolean getUrlVariablesFromWifiString( String data ){
  257.     Serial.print("Request = ");
  258.     Serial.println(data);
  259.     if(data.length()>=0){
  260.       getEachVariable(data.substring(data.indexOf('?')+1, data.length()));
  261.       return true;
  262.     }else
  263.     return false;
  264.      
  265. }
  266.  
  267. // split get Into smaller Chunks ie. ?d12=1&d13=0 into d12=1 and d13=0
  268. String splitVariablesUP( String *str , String strTemp, int strLength ){
  269.  
  270.   String singleVariableAsString;
  271.   int startIndex=0;
  272.   //finds the first index of &
  273.   int endIndex=strTemp.indexOf('&');
  274.   // get the variable parts into a string
  275.   singleVariableAsString = strTemp.substring( startIndex , endIndex );
  276.  
  277.   //now delete variable from reference string
  278.   *str = strTemp.substring( endIndex+1 , strLength );// endIndex +1 is so we loose the & char as we do not need it
  279.   return singleVariableAsString;
  280. }
  281.  
  282. // break down GET sting into each variable + value
  283. void getEachVariable(String strTemp){
  284.   // returns variable count
  285.   int variableCount = findOutHowManyCharInAString( strTemp , '=');
  286.    Serial.print("Variable Count = ");
  287.    Serial.println(variableCount);
  288.  
  289.   // loops through each variable
  290.   for(int i=0;i<variableCount;i++){
  291.    // assigns each variable and value to a string array
  292.    runVariableCommand(splitVariablesUP( &strTemp , strTemp , strTemp.length() ));
  293.   }
  294. }
  295. //return int value from string
  296. int stringToInt(String thisString) {
  297.   int i, value, length;
  298.  
  299.   length = thisString.length();
  300.  
  301.   char blah[(length+1)];
  302.  
  303.   for(i=0; i<length; i++) {
  304.     blah[i] = thisString.charAt(i);
  305.   }
  306.   blah[i]=0;
  307.  
  308.   value = atoi(blah);
  309.  
  310.   return value;
  311. }
  312. //return how many variables are in the GET
  313. int findOutHowManyCharInAString(String str, char findChar){
  314.   int positionChar = 0;
  315.   int count=0;
  316.   while(positionChar != -1){
  317.    positionChar = str.indexOf( findChar , positionChar+1 );
  318.    if(positionChar!=-1)
  319.     count++;
  320.   }
  321.   return count;
  322. }
  323.  
  324. // html code
  325. String htmlPage(){
  326.  
  327.  String startHtml = "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'><html xmlns='http://www.w3.org/1999/xhtml'><head><meta http-equiv='Content-Type' content='text/html;charset=utf-8' /><meta http-equiv='refresh' content='30'><title>Arduino DigiX Wifi</title>";
  328.  
  329.  String jquery = "\n<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js'></script>"
  330.                  "\n<script>\n"
  331.                  "\n$(function(){"
  332.                   "\n$('.relay').click( function(){"
  333.                    "\najaxCallScript( $(this).attr('pin') + '=' + $(this).attr('val'));"
  334.                   "\n});"
  335.  
  336.                 " \n$('.selector').change(function(){\najaxCallScript( \n$(this).attr('pin') + '=' + $(this).val());"
  337.                  "\n});"
  338.                 "\n});"
  339.                  "\n</script>";
  340.  
  341.  String ajax = "\n<script>\nfunction ajaxCallScript( get ){"
  342.    
  343.     "\nfile = '?' + get;"
  344.    
  345.     "\nif (window.XMLHttpRequest)"
  346.       "\n{// code for IE7+, Firefox, Chrome, Opera, Safari"
  347.       "\nxmlhttp=new XMLHttpRequest();"
  348.       "\n}"
  349.     "\nelse"
  350.       "\n{// code for IE6, IE5"
  351.       "\nxmlhttp=new ActiveXObject('Microsoft.XMLHTTP');"
  352.       "\n}"
  353.     "\nxmlhttp.onreadystatechange=function(){"
  354.      
  355.     "\nif (xmlhttp.readyState==4 && xmlhttp.status==200){"
  356.         "\ndocument.getElementById(elementName).innerHTML = 'done';}"
  357.       "\nelse"
  358.        "\ndocument.getElementById(elementName).innerHTML = 'Sent';"
  359.       "\n}"
  360.     "\nxmlhttp.open('GET',file,true);"
  361.     "\nxmlhttp.send();"
  362.         "\n}\n</script>";
  363.  
  364.  String javascript = "<script LANGUAGE=\"JavaScript\">\n<!--\nvar count="+String(30+1)+";\nvar counter=setInterval(timer, 1000);\nfunction timer(){\ncount=count-1;\nif(count < 0)\n{\nclearInterval(counter);\nreturn;\n}\ndocument.getElementById(\"timer\").innerHTML=count;\n}\n--></script>";
  365.  
  366.  String temphtm = "<br>insideThermometer =" + (String)sensors.getTempC(insideThermometer);
  367. {
  368. if (AUTO == 1)
  369.   control =    "<br><lable>AUTO<button class='relay' pin='m1' val='0'>HANDMATIG</button>"
  370.                "<br>Refresh in: <span id=\"timer\"></span>";
  371.    else
  372.   control =    "<br><lable>HANDMATIG<button class='relay' pin='m1' val='1'>AUTO</button>"
  373.                "<br><lable>Digital Pin 4<button class='relay' pin='d4' val='0'>LOW</button><button class='relay' pin='d4' val='1'>HIGH</button></label>"
  374.                "<br><lable>Analog Pin 1<select class='selector' pin='a1'><option>0</option><option>50</option><option>100</option><option>150</option><option>200</option><option>255</option></select>"
  375.                "<br><lable>Fan 1<select class='selector' pin='f11'><option>0</option><option>50</option><option>75</option><option>100</option></select>"
  376.                "<br>Refresh in: <span id=\"timer\"></span>";
  377. }
  378.  String endHtml = "\n</body>\n</html>";
  379.  
  380.  return startHtml+jquery+ajax+javascript+temphtm+control+endHtml;
  381. }
  382.  
  383. String htmlReturn(){
  384.  return "hello";
  385.  
  386. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement