Convert w5100 code to yun shield


hi!
i have make small home automation mega , w5100 ethernet shield, it's going slow project go forward.

i want use yun shield able upload sketch wireless , host webpage on usb stick.

the wifi working upload sketch , can access files usb wireless, cannot make code running. there way keep html page , code same thing in yun in w5100?

please help!

my code

code: [select]


#include <spi.h>
#include <ethernet.h>
#include <sd.h>
// size of buffer used capture http requests
#define req_buf_sz   60

// mac address ethernet shield sticker under board
byte mac[] = { 0xde, 0xad, 0xbe, 0xef, 0xfe, 0xed };
ipaddress ip(192, 168, 2, 199); // ip address, may need change depending on network
byte subnet[] = { 255, 255, 255, 0 };
byte gateway[] = { 192, 168, 2, 1 };    

ethernetserver server(8081);  // create server @ port 80
file webfile;               // web page file on sd card
char http_req[req_buf_sz] = {0}; // buffered http request stored null terminated string
char req_index = 0;              // index http_req buffer
boolean led_state[5] = {0}; // stores states of leds

float t,h;        // value temperature , humidity
#include "dht.h"
#define dhtpin a2     // pin we're connected to
// uncomment whatever type you're using!
//#define dhttype dht11   // dht 11
#define dhttype dht22   // dht 22  (am2302)
//#define dhttype dht21   // dht 21 (am2301)
// connect pin 1 (on left) of sensor +5v
// connect pin 2 of sensor whatever dhtpin is
// connect pin 4 (on right) of sensor ground
// connect 10k resistor pin 2 (data) pin 1 (power) of sensor
dht dht(dhtpin, dhttype);

// http://tronixstuff.com/2011/03/16/tutorial-your-arduinos-inbuilt-eeprom/
#include <eeprom.h>

int stare; // 0 off, 1 on
int stare0; // before state
//int teset = 225;  // temperaturee set x 10;
//int dete = 5;   // hysteresys temperature x 10;

float teset, dete;
int teset0, teset1, teset2, teset3;
int numere = 0;

// http://weblog.jos.ph/development/arduino-reset-hack/
//digitalpin 7 connected reset pin on arduino
//note: cannot program board while connected
//by default digitalpin 13 blink upon reset, stick led in there

// long int interval = 21600000; // 6 ore
long int interval = 3600000; // 1 ora
long int taim = 0;
int taim2 = 0;


void setup()
{
  digitalwrite(7, high); //we need set high on boot
  pinmode(7,output);     //we can declare output after it's high
                         // (( hackhackhackhack ))
  
    // disable ethernet chip
    pinmode(10, output);
    digitalwrite(10, high);
    
     dht.begin();              // initialize dht sensor
 
    
    serial.begin(9600);       // debugging
    
    // initialize sd card
    serial.println("initializing sd card...");
    if (!sd.begin(4)) {
        serial.println("error - sd card initialization failed!");
        return;    // init failed
    }
    serial.println("success - sd card initialized.");
    // check index.htm file
    if (!sd.exists("index.htm")) {
        serial.println("error - can't find index.htm file!");
        return;  // can't find index file
    }
    serial.println("success - found index.htm file.");
    // switches on pins 2, 3 , 5
 //   pinmode(2, input);
 //   pinmode(3, input);
 //   pinmode(5, input);
    // leds
 //   pinmode(6, output);
 //   pinmode(7, output);
 //   pinmode(8, output);
    pinmode(9, output);
    
 //   ethernet.begin(mac, ip);  // initialize ethernet device
 //   server.begin();           // start listen clients

 // start ethernet connection , server:
  ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  
   serial.print("server @ ");
  serial.println(ethernet.localip());

   t = dht.readtemperature();
serial.print("t =");
serial.print(t);
serial.println("^c");

//teset = 22.5;
//dete = 0.5;

/*
eeprom.write(150,205);
eeprom.write(149,0);
eeprom.write(151,5);
*/

teset1 = eeprom.read(150);
teset0 = eeprom.read(149);
teset = 256*teset0+teset1;
dete = eeprom.read(151);

led_state[4] = 1; // thermostat on auto mode
}

void loop()
{
    ethernetclient client = server.available();  // try client
 
 taim = millis();
  if(taim > interval){
    serial.println("reset!");
    digitalwrite(7, low); //pulling reset pin low triggers reset.
  }

    if (client) {  // got client?
        boolean currentlineisblank = true;
        while (client.connected()) {
            if (client.available()) {   // client data available read
                char c = client.read(); // read 1 byte (character) client
                // limit size of stored received http request
                // buffer first part of http request in http_req array (string)
                // leave last element in array 0 null terminate string (req_buf_sz - 1)
                if (req_index < (req_buf_sz - 1)) {
                    http_req[req_index] = c;          // save http request character
                    req_index++;
                }
                // last line of client request blank , ends \n
                // respond client after last line received
                if (c == '\n' && currentlineisblank) {
                    // send standard http response header
                    client.println("http/1.1 200 ok");
                    // remainder of header follows below, depending on if
                    // web page or xml page requested
                    // ajax request - send xml file
                    if (strcontains(http_req, "ajax_inputs")) {
                        // send rest of http header
                        client.println("content-type: text/xml");
                        client.println("connection: keep-alive");
                        client.println();
                        setleds();
                        // send xml file containing input states
                        xml_response(client);
                    }
                    else {  // web page request
                        // send rest of http header
                        client.println("content-type: text/html");
                        client.println("connection: keep-alive");
                        client.println();
                        // send web page
                        webfile = sd.open("index.htm");        // open web page file
                        if (webfile) {
                            while(webfile.available()) {
                                client.write(webfile.read()); // send web page client
                            }
                            webfile.close();
                        }
                    }
                    // display received http request on serial port
                    serial.print(http_req);
                    // reset buffer index , buffer elements 0
                    req_index = 0;
                    strclear(http_req, req_buf_sz);
                    break;
                }
                // every line of text received client ends \r\n
                if (c == '\n') {
                    // last character on line of received text
                    // starting new line next character read
                    currentlineisblank = true;
                }
                else if (c != '\r') {
                    // text character received client
                    currentlineisblank = false;
                }
            } // end if (client.available())
        } // end while (client.connected())
        delay(1);      // give web browser time receive data
        client.stop(); // close connection

    } // end if (client)
    
 // if isn't client
numere = numere + 1;
delay(1);
if (numere > 32000) {
t = dht.readtemperature();
numere = 0;
serial.print("t =");
serial.print(t);
serial.println("^c");
}
// read switches
if ((led_state[4] == 1) , (t > teset/10)) {
  digitalwrite(9, low);
}  
if ((led_state[4] == 1) , (t < teset/10 - dete/10)) {
  digitalwrite(9, high);
}  
if (led_state[4] == 0) {
  digitalwrite(9, low);
}  
    
}


code: [select]
// checks if received http request switching on/off leds
// saves state of leds
void setleds(void)
{
    // led 1 (pin 6)
    if (strcontains(http_req, "led1=1")) {
      teset = teset + 5;
      led_state[0] = 1;  // save led state
  //      digitalwrite(6, high);
// calculate unitar , zecinal units
teset0 = teset/256;
teset1 = teset - teset0*256;
// write in internal eeprom
eeprom.write(150,teset1);
eeprom.write(149,teset0);
    }
    else if (strcontains(http_req, "led1=0")) {
      teset = teset + 5;  
      led_state[0] = 0;  // save led state
 //       digitalwrite(6, low);
 // calculate unitar , zecinal units
teset0 = teset/256;
teset1 = teset - teset0*256;
// write in internal eeprom
eeprom.write(150,teset1);
eeprom.write(149,teset0);
    }
    // led 2 (pin 7)
    if (strcontains(http_req, "led2=1")) {
      teset = teset - 5;
      led_state[1] = 1;  // save led state
  //      digitalwrite(7, high);
// calculate unitar , zecinal units
teset0 = teset/256;
teset1 = teset - teset0*256;
// write in internal eeprom
eeprom.write(150,teset1);
eeprom.write(149,teset0);
    }
    else if (strcontains(http_req, "led2=0")) {
      teset = teset - 5;
      led_state[1] = 0;  // save led state
  //      digitalwrite(7, low);
// calculate unitar , zecinal units
teset0 = teset/256;
teset1 = teset - teset0*256;
// write in internal eeprom
eeprom.write(150,teset1);
eeprom.write(149,teset0);
    }
    // led 3 (pin 8)
    if (strcontains(http_req, "led3=1")) {
        dete = dete + 1;
        if (dete > 20) dete = 20;
        led_state[2] = 1;  // save led state
 //       led_state[2] = 0;  // save led state
//        digitalwrite(8, high);
    }
    else if (strcontains(http_req, "led3=0")) {
        dete = dete + 1;
        if (dete > 20) dete = 20;
  eeprom.write(151,dete);
        led_state[2] = 0;  // save led state
 //       led_state[2] = 1;  // save led state    
        }
    // led 4 (pin 9)
    if (strcontains(http_req, "led4=1")) {
        dete = dete - 1;
   eeprom.write(151,dete);      
        if (dete < 1) dete = 1;
        led_state[3] = 1;  // save led state
  //      digitalwrite(9, high);
    }
    else if (strcontains(http_req, "led4=0")) {
        dete = dete - 1;
        if (dete < 1) dete = 1;
        led_state[3] = 0;  // save led state
  //      digitalwrite(9, low);
    }
    // led 5
    if (strcontains(http_req, "led5=1")) {
        led_state[4] = 1;  // save led state
  //      digitalwrite(9, high);
   //     if (t > teset) digitalwrite(9, low);
   //     if (t < teset - dete) digitalwrite(9, high);
    }
    else if (strcontains(http_req, "led5=0")) {
        led_state[4] = 0;  // save led state
  //      digitalwrite(9, low);
    }

}

// send xml file analog values, switch status
//  and led status
void xml_response(ethernetclient cl)
{
    int analog_val;            // stores value read analog inputs
    
    cl.print("<?xml version = \"1.0\" ?>");
    cl.print("<inputs>");
    // read analog inputs
        t = dht.readtemperature();
        cl.print("<analog>");
        cl.print(t,1);
        cl.println("</analog>");
        h = dht.readhumidity();
        cl.print("<analog>");
        cl.print(h,1);
        cl.println("</analog>");

        cl.print("<analog>");
        cl.print(teset/10,1);
        cl.println("</analog>");
        cl.print("<analog>");
        cl.print(dete/10,1);
        cl.println("</analog>");
// time untill reset
        cl.print("<analog>");
        taim2 = (interval-taim)/60000;
        cl.print(taim2);
        cl.println("</analog>");

/*
// read switches
    cl.print("<switch>");
        if (digitalread(9)) {
            cl.print("on");
        }
        else {
            cl.print("off");
        }
        cl.println("</switch>");    
 */
 // button led states
  // led1
    cl.print("<led>");
    if (led_state[0]) {
        cl.print("on");
    }
    else {
        cl.print("off");
    }
    cl.println("</led>");
  // led2
    cl.print("<led>");
    if (led_state[1]) {
        cl.print("on");
    }
    else {
        cl.print("off");
    }
    cl.println("</led>");
  // led3
    cl.print("<led>");
    if (led_state[2]) {
        cl.print("on");
    }
    else {
        cl.print("off");
    }
    cl.println("</led>");
  // led4
    cl.print("<led>");
    if (led_state[3]) {
        cl.print("on");
    }
    else {
        cl.print("off");
    }
    cl.println("</led>");
  // led5
    cl.print("<led>");
    if (led_state[4]) {
        cl.print("on");
    }
    else {
        cl.print("off");
    }
    cl.println("</led>");

// read switches
    cl.print("<switch>");
    //    if (digitalread(9)) {
if ((led_state[4] == 1) , (t > teset/10)) {
  digitalwrite(9, low);
//  cl.print("<font color=red>");
  cl.print("it's warm..");
}  
if ((led_state[4] == 1) , (t < teset/10 - dete/10)) {
  digitalwrite(9, high);
//   cl.print("<font color=blue>");
          cl.print("it's cold..");
}  
if ((led_state[4] == 1) , (t >= teset/10 - dete/10)) {
  if (t <=teset/10) {
//  cl.print("<font color=green>");
  cl.print("it's ok..");
}  
}
//cl.print("</font>");

if (led_state[4] == 0) {
  digitalwrite(9, low);
          cl.print("off manual");
}  
      if (digitalread(9)) {
   //         cl.print("<font color=red>");
            cl.print("-> heater on");
        }
        else {
   //         cl.print("<font color=blue>");
            cl.print("-> heater off");
        }
        cl.println("</switch>");    
    cl.print("</inputs>");
}

// sets every element of str 0 (clears array)
void strclear(char *str, char length)
{
    for (int = 0; < length; i++) {
        str[i] = 0;
    }
}

// searches string sfind in string str
// returns 1 if string found
// returns 0 if string not found
char strcontains(char *str, char *sfind)
{
    char found = 0;
    char index = 0;
    char len;

    len = strlen(str);
    
    if (strlen(sfind) > len) {
        return 0;
    }
    while (index < len) {
        if (str[index] == sfind[found]) {
            found++;
            if (strlen(sfind) == found) {
                return 1;
            }
        }
        else {
            found = 0;
        }
        index++;
    }

    return 0;
}


Arduino Forum > Products > Arduino Yún (Moderator: fabioc84) > Convert w5100 code to yun shield


arduino

Comments

Popular posts from this blog

DHT11 Time out error using v0.4.1library

Sketch upload fails with Java error (___REMOVE___/bin/avrdude)!

Arduino Uno + KTY81/210 temperature sensor