Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <DigiFi.h>
- #include <OneWire.h>
- #include <DallasTemperature.h>
- #include <Timer.h>
- #define ONE_WIRE_BUS 24
- OneWire oneWire(ONE_WIRE_BUS);
- DallasTemperature sensors(&oneWire);
- DeviceAddress insideThermometer, outsideThermometer;
- int AUTO = 1;
- String control;
- Timer t;
- DigiFi server;
- //TEMP ALARM
- void newAlarmHandler(uint8_t* deviceAddress)
- {
- Serial.println("Alarm Handler Start");
- printAlarmInfo(deviceAddress);
- printTemp(deviceAddress);
- Serial.println();
- Serial.println("Alarm Handler Finish");
- }
- void printCurrentTemp(DeviceAddress deviceAddress)
- {
- printAddress(deviceAddress);
- printTemp(deviceAddress);
- Serial.println();
- }
- void printAddress(DeviceAddress deviceAddress)
- {
- Serial.print("Address: ");
- for (uint8_t i = 0; i < 8; i++)
- {
- if (deviceAddress[i] < 16) Serial.print("0");
- Serial.print(deviceAddress[i], HEX);
- }
- Serial.print(" ");
- }
- void printTemp(DeviceAddress deviceAddress)
- {
- float tempC = sensors.getTempC(deviceAddress);
- if (tempC != DEVICE_DISCONNECTED)
- {
- Serial.print("Current Temp C: ");
- Serial.print(tempC);
- }
- else Serial.print("DEVICE DISCONNECTED");
- Serial.print(" ");
- }
- void printAlarmInfo(DeviceAddress deviceAddress)
- {
- char temp;
- printAddress(deviceAddress);
- temp = sensors.getHighAlarmTemp(deviceAddress);
- Serial.print("High Alarm: ");
- Serial.print(temp, DEC);
- Serial.print("C");
- Serial.print(" Low Alarm: ");
- temp = sensors.getLowAlarmTemp(deviceAddress);
- Serial.print(temp, DEC);
- Serial.print("C");
- Serial.print(" ");
- }
- //SETUP
- void setup() {
- Serial.begin(9600);
- server.begin(9600);
- sensors.begin();
- t.every(30 * 1000, readTemp); // 10 minutes
- // locate devices on the bus
- Serial.print("Found ");
- Serial.print(sensors.getDeviceCount(), DEC);
- Serial.println(" devices.");
- // search for devices on the bus and assign based on an index
- if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0");
- if (!sensors.getAddress(outsideThermometer, 1)) Serial.println("Unable to find address for Device 1");
- Serial.print("Device insideThermometer ");
- printAlarmInfo(insideThermometer);
- Serial.println();
- Serial.print("Device outsideThermometer ");
- printAlarmInfo(outsideThermometer);
- Serial.println();
- // set alarm ranges
- Serial.println("Setting alarm temps...");
- sensors.setHighAlarmTemp(insideThermometer, 27);
- sensors.setLowAlarmTemp(insideThermometer, 10);
- sensors.setHighAlarmTemp(outsideThermometer, 27);
- sensors.setLowAlarmTemp(outsideThermometer, 10);
- Serial.print("New insideThermometer ");
- printAlarmInfo(insideThermometer);
- Serial.println();
- Serial.print("New outsideThermometer ");
- printAlarmInfo(outsideThermometer);
- Serial.println();
- // attach alarm handler
- sensors.setAlarmHandler(&newAlarmHandler);
- pinMode(7,OUTPUT);
- pinMode(6,OUTPUT);
- pinMode(5,OUTPUT);
- pinMode(4,OUTPUT);
- digitalWrite(7,HIGH);
- digitalWrite(6,LOW);
- digitalWrite(5,LOW);
- digitalWrite(4,LOW);
- //DigiX trick - since we are on serial over USB wait for character to be entered in serial terminal
- while(!Serial.available()){
- Serial.println("Enter any key to begin");
- delay(1000);
- }
- Serial.println("Starting");
- Serial.println("wifi inited");
- while (server.ready() != 1)
- {
- Serial.println("Error connecting to network");
- delay(15000);
- }
- Serial.println("Connected to wifi!");
- Serial.print("Server running at: ");
- String address = server.server(8080);//sets up server and returns IP
- Serial.println(address);
- }
- //LOOP
- void loop() {
- if ( server.serverRequest()){
- if( findOutHowManyCharInAString( server.serverRequestPath() , '=') !=0){
- getUrlVariablesFromWifiString( server.serverRequestPath() );
- server.serverResponse(htmlReturn()); //need relay so brouser dont hang
- }
- else
- server.serverResponse(htmlPage()); //defaults to 200
- }
- t.update();
- }
- //TEMP&TIMER
- void readTemp()
- {
- // ask the devices to measure the temperature
- sensors.requestTemperatures();
- // if an alarm condition exists as a result of the most recent
- // requestTemperatures() request, it exists until the next time
- // requestTemperatures() is called AND there isn't an alarm condition
- // on the device
- if (sensors.hasAlarm(insideThermometer)){
- float tempC = sensors.getTempC(insideThermometer);
- if (tempC != DEVICE_DISCONNECTED) {
- if (tempC >= sensors.getHighAlarmTemp(insideThermometer)) {
- Serial.println("Oh noes! There is at least one alarm on the bus.");
- {
- if (AUTO == 1)
- {
- analogWrite( 11, 255 );
- }
- }
- }
- if (tempC <= sensors.getLowAlarmTemp(insideThermometer)) {
- // LOW alarm
- }
- }
- }
- // call alarm handler function defined by sensors.setAlarmHandler
- // for each device reporting an alarm
- sensors.processAlarms();
- if (!sensors.hasAlarm())
- {
- // just print out the current temperature
- printCurrentTemp(insideThermometer);
- printCurrentTemp(outsideThermometer);
- {
- if (AUTO == 1)
- {
- analogWrite( 11, 0 );
- }
- }
- }
- }
- //WEB&WIFI
- void runVariableCommand(String string){
- if(string.charAt(0)=='d'){ // letter d = Digital
- int endOfVariableName = string.indexOf('=');
- int booleanValue = stringToInt(string.substring(endOfVariableName+1,string.length()));
- String variableName = string.substring(0,endOfVariableName);
- digitalWrite( stringToInt( variableName.substring(1,variableName.length()) ), booleanValue );
- Serial.print("digital Pin ");
- Serial.print(stringToInt( variableName.substring(1,variableName.length()) ));
- Serial.print(" to ");
- Serial.println(booleanValue);
- }
- if(string.charAt(0)=='a'){ // letter a = Analog
- int endOfVariableName = string.indexOf('=');
- int booleanValue = stringToInt(string.substring(endOfVariableName+1,string.length()));
- String variableName = string.substring(0,endOfVariableName);
- analogWrite( stringToInt( variableName.substring(1,variableName.length()) ), booleanValue );
- Serial.print("Analog Pin ");
- Serial.print(stringToInt( variableName.substring(1,variableName.length()) ));
- Serial.print(" to ");
- Serial.println(booleanValue);
- }
- if(string.charAt(0)=='f'){ // letter a = Analog
- int endOfVariableName = string.indexOf('=');
- int booleanValue = stringToInt(string.substring(endOfVariableName+1,string.length()));
- String variableName = string.substring(0,endOfVariableName);
- float calc = ((float) 255) / 100;
- calc = calc * booleanValue;
- booleanValue = calc;
- analogWrite( stringToInt( variableName.substring(1,variableName.length()) ), booleanValue );
- Serial.print("Fan speed Pin ");
- Serial.print(stringToInt( variableName.substring(1,variableName.length()) ));
- Serial.print(" to ");
- Serial.println(booleanValue);
- }
- if(string.charAt(0)=='m'){ // letter d = Digital
- int endOfVariableName = string.indexOf('=');
- int booleanValue = stringToInt(string.substring(endOfVariableName+1,string.length()));
- String variableName = string.substring(0,endOfVariableName);
- digitalWrite( stringToInt( variableName.substring(1,variableName.length()) ), booleanValue );
- AUTO = booleanValue;
- Serial.print("AUTO =");
- Serial.println(booleanValue);
- }
- }
- boolean getUrlVariablesFromWifiString( String data ){
- Serial.print("Request = ");
- Serial.println(data);
- if(data.length()>=0){
- getEachVariable(data.substring(data.indexOf('?')+1, data.length()));
- return true;
- }else
- return false;
- }
- // split get Into smaller Chunks ie. ?d12=1&d13=0 into d12=1 and d13=0
- String splitVariablesUP( String *str , String strTemp, int strLength ){
- String singleVariableAsString;
- int startIndex=0;
- //finds the first index of &
- int endIndex=strTemp.indexOf('&');
- // get the variable parts into a string
- singleVariableAsString = strTemp.substring( startIndex , endIndex );
- //now delete variable from reference string
- *str = strTemp.substring( endIndex+1 , strLength );// endIndex +1 is so we loose the & char as we do not need it
- return singleVariableAsString;
- }
- // break down GET sting into each variable + value
- void getEachVariable(String strTemp){
- // returns variable count
- int variableCount = findOutHowManyCharInAString( strTemp , '=');
- Serial.print("Variable Count = ");
- Serial.println(variableCount);
- // loops through each variable
- for(int i=0;i<variableCount;i++){
- // assigns each variable and value to a string array
- runVariableCommand(splitVariablesUP( &strTemp , strTemp , strTemp.length() ));
- }
- }
- //return int value from string
- int stringToInt(String thisString) {
- int i, value, length;
- length = thisString.length();
- char blah[(length+1)];
- for(i=0; i<length; i++) {
- blah[i] = thisString.charAt(i);
- }
- blah[i]=0;
- value = atoi(blah);
- return value;
- }
- //return how many variables are in the GET
- int findOutHowManyCharInAString(String str, char findChar){
- int positionChar = 0;
- int count=0;
- while(positionChar != -1){
- positionChar = str.indexOf( findChar , positionChar+1 );
- if(positionChar!=-1)
- count++;
- }
- return count;
- }
- // html code
- String htmlPage(){
- 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>";
- String jquery = "\n<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js'></script>"
- "\n<script>\n"
- "\n$(function(){"
- "\n$('.relay').click( function(){"
- "\najaxCallScript( $(this).attr('pin') + '=' + $(this).attr('val'));"
- "\n});"
- " \n$('.selector').change(function(){\najaxCallScript( \n$(this).attr('pin') + '=' + $(this).val());"
- "\n});"
- "\n});"
- "\n</script>";
- String ajax = "\n<script>\nfunction ajaxCallScript( get ){"
- "\nfile = '?' + get;"
- "\nif (window.XMLHttpRequest)"
- "\n{// code for IE7+, Firefox, Chrome, Opera, Safari"
- "\nxmlhttp=new XMLHttpRequest();"
- "\n}"
- "\nelse"
- "\n{// code for IE6, IE5"
- "\nxmlhttp=new ActiveXObject('Microsoft.XMLHTTP');"
- "\n}"
- "\nxmlhttp.onreadystatechange=function(){"
- "\nif (xmlhttp.readyState==4 && xmlhttp.status==200){"
- "\ndocument.getElementById(elementName).innerHTML = 'done';}"
- "\nelse"
- "\ndocument.getElementById(elementName).innerHTML = 'Sent';"
- "\n}"
- "\nxmlhttp.open('GET',file,true);"
- "\nxmlhttp.send();"
- "\n}\n</script>";
- 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>";
- String temphtm = "<br>insideThermometer =" + (String)sensors.getTempC(insideThermometer);
- {
- if (AUTO == 1)
- control = "<br><lable>AUTO<button class='relay' pin='m1' val='0'>HANDMATIG</button>"
- "<br>Refresh in: <span id=\"timer\"></span>";
- else
- control = "<br><lable>HANDMATIG<button class='relay' pin='m1' val='1'>AUTO</button>"
- "<br><lable>Digital Pin 4<button class='relay' pin='d4' val='0'>LOW</button><button class='relay' pin='d4' val='1'>HIGH</button></label>"
- "<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>"
- "<br><lable>Fan 1<select class='selector' pin='f11'><option>0</option><option>50</option><option>75</option><option>100</option></select>"
- "<br>Refresh in: <span id=\"timer\"></span>";
- }
- String endHtml = "\n</body>\n</html>";
- return startHtml+jquery+ajax+javascript+temphtm+control+endHtml;
- }
- String htmlReturn(){
- return "hello";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement