Skocz do zawartości

Niestabilny WebSerwer na Arduino


Pomocna odpowiedź

Napisano

Witam,

chciałem zrobić sterowanie przekaźnikami oraz odczyt z kilku czujników przez internet.

Użyłem do tego Arduino Leonardo oraz rutera Huawei B683.

Problem polega na tym, że serwer jest niestabilny, czasem się wyłączony, czasem przytnie itp.

Z czego może wynikać problem? Użyłem składni przestarzałego HTML-a?

Dodam, że WebSerwer z przykładu Arduino działa bez zarzutu.

Mam jeszcze problem ze sterowaniem z przekaźnikiem.

Mianowicie gdy przerzucam z Off na On wszystko jest ok. Problem pojawia się, gdy przełączam z On na Off. Pierwszy raz gdy klikam On na Off nic się nie dzieje, dopiero za drugim razie przeskakuje na Off. Gdzie może być przyczyna?

mój kod :

#include <SPI.h>
#include <Ethernet.h>

void Processcheckbox(EthernetClient cl);

String HTTP_req;          // stores the HTTP request
volatile boolean LED_status = 0;   // state of LED, off by default
volatile boolean LED_status2 = 0;


byte mac[] = {
 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 110);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
 // Open serial communications and wait for port to open:
 //pinMode(2,OUTPUT);
 //pinMode(3,OUTPUT);
 Serial.begin(9600);
 while (!Serial) {
   ; // wait for serial port to connect. Needed for Leonardo only
 }


 // start the Ethernet connection and the server:
 Ethernet.begin(mac, ip);
 server.begin();
 Serial.print("server is at ");
 Serial.println(Ethernet.localIP());
 pinMode(2, OUTPUT); 
 pinMode(3, OUTPUT); 
}


void loop() {
 // listen for incoming clients
 EthernetClient client = server.available();
 if (client) {
   Serial.println("new client");
   // an http request ends with a blank line
   boolean currentLineIsBlank = true;
   while (client.connected()) {
     if (client.available()) {
       char c = client.read();
       HTTP_req += c;
       Serial.write(c);
       // if you've gotten to the end of the line (received a newline
       // character) and the line is blank, the http request has ended,
       // so you can send a reply
       if (c == '\n' && currentLineIsBlank) {
         // send a standard http response header
         client.println("HTTP/1.1 200 OK");
         client.println("Content-Type: text/html");
         client.println("Connection: close");  // the connection will be closed after completion of the response
         client.println("Refresh: 5");  // refresh the page automatically every 5 sec
         client.println();
         client.println("<!DOCTYPE HTML>");
         client.println("<html>");
         client.println("<title>");
         client.println("Moj projekt");
         client.println("</title>");
         client.println("<head><h1>");
         client.println("Czujniki");
         client.println("</h1></head>");
         client.println("<br />");
         // output the value of each analog input pin
         for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
           int sensorReading = analogRead(analogChannel);
           client.print("analog input ");
           client.print(analogChannel);
           client.print(" is ");
           client.print(sensorReading);
           client.println("<br />");
         }


         client.println("<h1>");
         client.println("Przekazniki");
         client.println("</h1>");
         client.println("<p>Przekaznik nr.1</p>");
                   client.println("<form method=\"get\">");
                   ProcessCheckbox(client);
                   client.println("</form>");

         client.println("<p>Przekaznik nr.2</p>");
                   client.println("<form method=\"get\">");
                   ProcessCheckbox2(client);
                   client.println("</form>");

         client.println("</html>");
         Serial.print(HTTP_req);
                   HTTP_req = "";
         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;
       }
     }
   }
   // give the web browser time to receive the data
   delay(1);
   // close the connection:
   client.stop();
   Serial.println("client disconnected");
 }
}


void ProcessCheckbox(EthernetClient cl)
{
   if (HTTP_req.indexOf("LED2=2") > -1) {  // see if checkbox was clicked
       // the checkbox was clicked, toggle the LED
       //if (LED_status) {
           LED_status = 1;
       }
       else {
           LED_status = 0;
       }
   //}

   if (LED_status) {    // switch LED on
       digitalWrite(2, HIGH);
       // checkbox is checked
       cl.println("<input type=\"checkbox\" name=\"LED2\" value=\"2\" \
       onclick=\"submit();\" checked>On");
   }
   else {              // switch LED off
       digitalWrite(2, LOW);
       // checkbox is unchecked
       cl.println("<input type=\"checkbox\" name=\"LED2\" value=\"2\" \
       onclick=\"submit();\">Off");
   }
}

void ProcessCheckbox2(EthernetClient cl)
{
   if (HTTP_req.indexOf("LED2=3") > -1) {  // see if checkbox was clicked
       // the checkbox was clicked, toggle the LED
       //if (LED_status) {
           LED_status2 = 1;
       }
       else {
           LED_status2 = 0;
       }
   //}

   if (LED_status2) {    // switch LED on
       digitalWrite(3, HIGH);
       // checkbox is checked
       cl.println("<input type=\"checkbox\" name=\"LED2\" value=\"3\" \
       onclick=\"submit();\" checked>On");
   }
   else {              // switch LED off
       digitalWrite(3, LOW);
       // checkbox is unchecked
       cl.println("<input type=\"checkbox\" name=\"LED2\" value=\"3\" \
       onclick=\"submit();\">Off");
   }
}

Z góry dziękuje za pomoc

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...