Go Down

Topic: WiFly Webserver Problems - Help needed (Read 1 time) previous topic - next topic

FestArdu

Hello!
First i have to say the Arduino platform is very interesting, i stumbled on it accidentally.
Unfortunately I am not an experienced programmer and now i have i problem with my project....

I use an Arduino UNO and a Sparkfun WiFly-Shield (http://www.watterott.com/de/SparkFun-WiFly-Shield) with the Alpha 2 Release of the Experimental WiFly Arduino Library from Sparkfun.

I only need to switch one relay and measure the temperature. Right now eveything works, but not reliable!

My problems:

1.
After i power on the Arduino, i need to press reset switch once bevore the WiFly-Shield connects to my WLAN. Why?
Do i need to add some reset functions to my code?

2.
If i try to connect via web, it is not responding reliable. Sometimes it is not responding at all (and i have to press reset, maybe a loop?), pinging the WiFly-Shield is without problems at all. Ping works always. So i think my programming is not correct.

Here is the code based on some examples:

Code: [Select]


#include "WiFly.h"
#include "WString.h"

boolean LEDON = false;
String readString;

const int ledPin =  9; //digital pin for magnet
int pin = 5; // analog pin for temperature
int tempc = 0,tempf=0; // temperature variables
int samples[8]; // variables to make a better precision
int maxi = -100,mini = 100; // to start max/min temperature
int i;

Server server(80);

void setup() {
  Serial.begin(9600);
  server.begin();
  SpiSerial.begin();

  //exit CMD mode if not already done
  SpiSerial.println("");
  SpiSerial.println("exit");
  delay(1000);

  //set into CMD mode
  SpiSerial.print("$$$");
  delay(1000);

  //set authorization level
  SpiSerial.println("set w a 4");
  delay(1000);

  //set passphrase
  SpiSerial.println("set w p MYPASSPHRASE");
  delay(1000);

  //set different stuff to be shure
  SpiSerial.println("set ip dhcp 0");
  delay(1000);

  SpiSerial.println("set ip address 192.168.0.222");
  delay(1000);

  SpiSerial.println("set ip gateway 192.168.0.1");
  delay(1000);

  SpiSerial.println("set ip netmask 255.255.255.0");
  delay(1000);

  //set localport
  SpiSerial.println("set i l 80");
  delay(1000);

  //disable *HELLO* default message on connect
  SpiSerial.println("set comm remote 0");
  delay(1000);

  //join wifi network <ssid>
  SpiSerial.println("join MYSID");
  delay(5000);

  //exit CMD mode
  SpiSerial.println("exit");
  delay(1000); 

  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  LEDON = false;
}

void loop() {
  //digitalWrite(ledPin, HIGH);
  // listen for incoming clients
  Client client = server.available();
  if (client) {
    //start Temperatur sensing
    for(i=0; i<=7; i++){ // gets 8 samples of temperature
      samples[i] = ( 5.0 * analogRead(pin) * 100.0) / 1024.0;
      tempc = tempc + samples[i];
      delay(1000);
    }

    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (readString.length() < 100)
        {
          //store characters to string
          readString += c; //replaces readString.append(c);
        }
        if (c == '\n') {
          //if (c == '\n' && currentLineIsBlank) {
          if(readString.indexOf("gate=0")>-1){
            //led has to be turned OFF
            digitalWrite(ledPin, LOW);    // set the LED OFF
            LEDON = false;
          } ///else
          if(readString.indexOf("gate=1")>-1) {
            //led has to be turned ON
            digitalWrite(ledPin, HIGH);    // set on (5 Volts)
            delay(5000);
            digitalWrite(ledPin, LOW);    // set off
            //LEDON = true;
          }

          tempc = tempc/8.0; // better precision
          tempf = (tempc * 9)/ 5 + 32; // converts to fahrenheit

          if(tempc > maxi) {
            maxi = tempc;
          } // set max temperature
          if(tempc < mini) {
            mini = tempc;
          } // set min temperature

          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          // print something, in HTML format:
          client.println("<h3><a href=\"http://192.168.0.222?gate=1\">Open Relay for 5 seconds</a></h3>");
          client.println("<br />");
          client.println("<br />");
          client.println("<h4>Temperature: ");
          client.println(tempc);
          client.println(" Grad Celsius</h4>");
          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;
        }
      }
    }
    //clearing string for next read
    readString="";
    tempc = 0;
    // give the web browser time to receive the data
    delay(100);
    // close the connection:
    client.stop();
  }
}



Regards
J.Fester

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy