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
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
Post a Comment