ARDUINO webszerver cache,reset ?

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
dckillman
Biztosítékgyilkos
Hozzászólások: 61
Csatlakozott: 2013. október 7. hétfő, 11:23

ARDUINO webszerver cache,reset ?

Hozzászólás Szerző: dckillman »

Sziasztok

Csináltam egy webszervert ami ARDUINO+WIZNET shield(w5100) párossal funkcionál.

Szóval a kérdéseim

Az Arduionak van valami cache memóriája ebben az esetben ahogy használom?
Mert néha 2 kérés "eltárolódik" azaz ha 2szer nyomom meg akkor 2 végrehajtás megy végbe.Vagy valami programozási hiba lehet?
Esetleg ha javítható akkor hogyan?

Itt a kód amivel használom.
Annyit mondok még hogy az utolsó if-ben van végrehajtás ha a kód közepén beállításra kerül

Kód: Egész kijelölése


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


    // Enter a MAC address and IP address for your controller below.
    // The IP address will be dependent on your local network:
    byte mac[] = {
      0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    IPAddress ip(192,168,1,177);

    // Initialize the Ethernet server library
    // with the IP address and port you want to use
    // (port 80 is default for HTTP):
    EthernetServer server(80);
    String HTTP_req;
    int web=0;
    String puffer_req;
    int refresh=0;

    void setup() {
     
      Serial.begin(9600);   //Soros port definiálás
      Serial.println("Serial.println teszt"); //Soros port teszt
      // Open serial communications and wait for port to open:
      Serial.begin(9600);
      pinMode(7,OUTPUT);
     
      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());
    }

    void loop() {
      // listen for incoming clients
      EthernetClient client = server.available();
      if (client) {
        Serial.println("new client");
        webinput=0;
        // an http request ends with a blank line
        boolean currentLineIsBlank = true;
        while (client.connected()) {
          if (client.available()) {
            char c = client.read();
            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) {
              String HTTP_req ="";
               while(client.available())
              {
                c = client.read();
                // save the variables somewhere
                HTTP_req += c;
              }
              // send a standard http response header

              if(HTTP_req != "")
              {
                if(HTTP_req == "on=1"){

                  Serial.println("on");
                 
                  digitalWrite7,HIGH);
                  delay(200);
                  digitalWrite(7,LOW);
                  int web=1;
                 
                }
              }
              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();
              refresh=refresh+1;
              client.println("<!DOCTYPE HTML>");
              client.println("<html>");
              client.println("<form method=post>");

             
              // client.println("<p>HELLO VILÁG</p>");
              client.println("<button name=\"on\"value=\"1\" onclick=\"this.form.submit()\"> BEKAPCSOL </button>");



              client.println("</form>");
              // onclick=\"this.form.submit();\" checked>LED2");
              client.println("</html>");
              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 disonnected");
      }
if(web==1){
//valamit végrehajttok :-)
//majd
web=0;

}

      }
     


A vezérlőt néha érmes újraindítani szoftveresen elindítva a resetet? vagy nem szükséges?

Üdvözlettel
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: ARDUINO webszerver cache,reset ?

Hozzászólás Szerző: Robert »

A Wiznetnek van 8K memóriája. És a TCP csomag abban lehet benne, mert még nem dolgoztad fel..
dckillman
Biztosítékgyilkos
Hozzászólások: 61
Csatlakozott: 2013. október 7. hétfő, 11:23

Re: ARDUINO webszerver cache,reset ?

Hozzászólás Szerző: dckillman »

Valahogy üríthető ez a 8K ami miatt a hiba fenn áll?
Mikor lenne célszerű nullázni hogy ne zavarjon bele a dologba?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: ARDUINO webszerver cache,reset ?

Hozzászólás Szerző: Robert »

Van rá softreset. De korrektebb a szoftverből a dupla kérést lekezelni (okozhatja ezt a router hibája is).
Válasz küldése