Webserver frissités

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
Bali12
Újonc
Újonc
Hozzászólások: 12
Csatlakozott: 2015. február 7. szombat, 17:00

Webserver frissités

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

Sziasztok, segitséget, kiindulási alapot szeretnék kérni.
Van egy olyan problémám hogy csináltam egy webszervert ahol 4 kimenetet tudok kapcsolni külön-külön (bekapcsolás után bizonyos idő után kikapcsol)és időzitve egymás után (WHILE ciklussal)
De ha pl az eggyes kimenetet bekapcsolom akkor a weblap addig nem reagál amig az időzités le nem telt, a program ott áll.
Ilyenkor az lcd kijelzőn az órát sem frissiti.
Hogy tudom azt megoldani hogy az időzitett cikluson belül is le tudjam kapcsolni a kimenetet, illetve az órát is frissitse.
Mega alaplap, wiznet ethernet kártya..

részlet a programból:

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

 
void loop()
{
  
   char buff[BUFF_MAX];                
    unsigned long now = millis();
    struct ts t;

    
        DS3231_get(&t);

        
        snprintf(buff, BUFF_MAX, "%02d:%02d",  t.hour, t.min);         
        lcd.setCursor(8,0);
        lcd.print(buff);

        prev = now;
    

EthernetClient client = server.available();       
  {
    while (client.connected())
    {
      if (client.available())
      {
        char c = client.read();               
        if (readString.length() < 100)
        {
          readString = readString + c;        
        }
        if (c == '\n')
        {
          Serial.println(readString); 
         

          client.println(F("http/1.1 200 ok"));
          client.println(F("content-type: text/html"));
          client.println();
          client.println(F("<!doctype html><html>"));
          client.println(F("<body bgcolor='blue'>"));
          client.println(F("<center><head><title>Ontozorendszer</title></head>"));
          client.println(F("<h2>Ontozorendszer</h2>"));
         
         


          client.print(F("<input type=button value='1 KOR   BE' onmousedown=location.href='/?1_be'>"));                        
          client.println(F("<input type=button value='1 KOR   KI' onmousedown=location.href='/?1_ki'><br/><br/>"));
          client.print(F("<input type=button value='2 KOR   BE' onmousedown=location.href='/?2_be'>"));
          client.println(F("<input type=button value='2 KOR   KI' onmousedown=location.href='/?2_ki'><br/><br/>"));
          client.print(F("<input type=button value='3 KOR   BE' onmousedown=location.href='/?3_be'>"));
          client.println(F("<input type=button value='3 KOR   KI' onmousedown=location.href='/?3_ki'><br/><br/>"));
          client.print(F("<input type=button value='4 KOR   BE' onmousedown=location.href='/?4_be'>"));
          client.println(F("<input type=button value='4 KOR   KI' onmousedown=location.href='/?4_ki'><br/><br/>"));
          client.print(F("<input type=button value='Sorozat BE' onmousedown=location.href='/?S_be'>"));
          client.println(F("<input type=button value='Sorozat KI' onmousedown=location.href='/?S_ki'><br/><br/>"));

          client.println(F("<p>Mukodo korok:<p/>"));

         // if(readString.indexOf("/?1_be") > 0 && (digitalRead(kezi)==LOW) || (digitalRead(automata)==LOW))
          if(readString.indexOf("/?1_be") > 0 && digitalRead(kezi)==HIGH || digitalRead(automata)==HIGH) 
          {sw_secs.start();
                                                digitalWrite(elso_kimenet, LOW); 
                                                digitalWrite(otodik_kimenet, LOW);
                                                client.print("<br>  BEKAPCSOLVA  1 kor</br>");
                                                lcd.setCursor(0,2);
                                                lcd.print("Webes bekapcsolva   ");
                                                lcd.setCursor(0,3);
                                                lcd.print("        1 kor");
                                                while (sw_secs.elapsed() <= idozites) ;
                                                digitalWrite(elso_kimenet, HIGH);
                                                digitalWrite(otodik_kimenet, HIGH);
                                                lcd.setCursor(0,2);
                                                lcd.print("                     ");
                                                lcd.setCursor(0,3);
                                                lcd.print("                    ");}
                                                sw_secs.stop();
                                                sw_secs.reset();
                                                
          if(readString.indexOf("/?1_ki") > 0) {digitalWrite(elso_kimenet, HIGH);}
          
          if(readString.indexOf("/?2_be") > 0&& (digitalRead(kezi)==HIGH) || (digitalRead(automata)==HIGH))
          {sw_secs.start();
                                                digitalWrite(masodik_kimenet, LOW); 
                                                digitalWrite(otodik_kimenet, LOW);
                                                client.print("<br>  BEKAPCSOLVA  2 kor</br>");
                                                lcd.setCursor(0,2);
                                                lcd.print("Webes bekapcsolva");
                                                lcd.setCursor(0,3);
                                                lcd.print("        2 kor");
                                                while (sw_secs.elapsed() <= idozites);
                                                digitalWrite(masodik_kimenet, HIGH);
                                                digitalWrite(otodik_kimenet, HIGH);
                                                lcd.setCursor(0,2);
                                                lcd.print("                    ");
                                                lcd.setCursor(0,3);
                                                lcd.print("                    ");}  
                                                sw_secs.stop();
                                                sw_secs.reset(); 
                                                
          if(readString.indexOf("/?2_ki") > 0) {digitalWrite(masodik_kimenet, HIGH);}
          
          if(readString.indexOf("/?3_be") > 0&& (digitalRead(kezi)==HIGH) || (digitalRead(automata)==HIGH))
          {sw_secs.start();
                                                digitalWrite(harmadik_kimenet, LOW); 
                                                digitalWrite(otodik_kimenet, LOW);
                                                client.print("<br>  BEKAPCSOLVA  3 kor</br>");
                                                lcd.setCursor(0,2);
                                                lcd.print("Webes bekapcsolva");
                                                lcd.setCursor(0,3);
                                                lcd.print("        3 kor");
                                                while (sw_secs.elapsed() <= idozites);
                                                digitalWrite(harmadik_kimenet, HIGH);
                                                digitalWrite(otodik_kimenet, HIGH);
                                                lcd.setCursor(0,2);
                                                lcd.print("                    ");
                                                lcd.setCursor(0,3);
                                                lcd.print("                    ");}  
                                                sw_secs.stop();
                                                sw_secs.reset();
                                                
          if(readString.indexOf("/?3_ki") > 0) {digitalWrite(harmadik_kimenet, HIGH);}
          
          if(readString.indexOf("/?4_be") > 0&& (digitalRead(kezi)==HIGH) || (digitalRead(automata)==HIGH))
          {sw_secs.start();
                                                digitalWrite(negyedik_kimenet, LOW); 
                                                digitalWrite(otodik_kimenet, LOW);
                                                client.print("<br>  BEKAPCSOLVA  4 kor</br>");
                                                lcd.setCursor(0,2);
                                                lcd.print("Webes bekapcsolva");
                                                lcd.setCursor(0,3);
                                                lcd.print("        4 kor");
                                                while (sw_secs.elapsed() <= idozites);
                                                digitalWrite(negyedik_kimenet, HIGH);
                                                digitalWrite(otodik_kimenet, HIGH);
                                                lcd.setCursor(0,2);
                                                lcd.print("                    ");
                                                lcd.setCursor(0,3);
                                                lcd.print("                    ");}  
                                                sw_secs.stop();
                                                sw_secs.reset();
                                                
          if(readString.indexOf("/?4_ki") > 0) {digitalWrite(negyedik_kimenet, HIGH);}
  

          if(readString.indexOf("/?S_be") > 0&& (digitalRead(kezi)==HIGH) || (digitalRead(automata)==HIGH))
          { (sorozat_allapot = LOW);
          sw_secs.start();

      if (sorozat_allapot == LOW){
            digitalWrite(elso_kimenet, LOW); 
            digitalWrite(otodik_kimenet, LOW); 
            client.print("<br>SOROZAT  BEKAPCSOLVA  1 kor</br>");
            lcd.setCursor(5,0);
            lcd.print("                    ");
            lcd.setCursor(0,2);
            lcd.print(" Webes bekapcsolva   ");
            lcd.setCursor(0,3);
            lcd.print(" Sorozat     1 kor");
            {
              while (sw_secs.elapsed() <= idozites);
              digitalWrite(elso_kimenet, HIGH);
              digitalWrite(otodik_kimenet, HIGH);
              while (sw_secs.elapsed() <= idozites+szunet); 
            }
            digitalWrite(masodik_kimenet, LOW);
            digitalWrite(otodik_kimenet, LOW);
            client.print("<br>SOROZAT  BEKAPCSOLVA  2 kor</br>");
            lcd.setCursor(0,2);
            lcd.print(" Webes bekapcsolva ");
            lcd.setCursor(0,3);
            lcd.print(" Sorozat     2 kor");
            { 
              while (sw_secs.elapsed() <= (idozites*2));
              digitalWrite(masodik_kimenet, HIGH);
              digitalWrite(otodik_kimenet, HIGH);
              while (sw_secs.elapsed() <= idozites*2+szunet);
            }
            digitalWrite(harmadik_kimenet, LOW);
            digitalWrite(otodik_kimenet, LOW);
            client.print("<br>SOROZAT  BEKAPCSOLVA  3 kor</br>");
            lcd.setCursor(0,2);
            lcd.print(" Webes bekapcsolva ");
            lcd.setCursor(0,3);
            lcd.print(" Sorozat     3 kor");
            {
              while (sw_secs.elapsed() <= (idozites*3));
              digitalWrite(harmadik_kimenet, HIGH);
              digitalWrite(otodik_kimenet, HIGH);
              while (sw_secs.elapsed() <= idozites*3+szunet);
            }
            digitalWrite(negyedik_kimenet, LOW);
            digitalWrite(otodik_kimenet, LOW);
            client.print("<br>SOROZAT  BEKAPCSOLVA  4 kor</br>");
            lcd.setCursor(0,2);
            lcd.print(" Webes bekapcsolva ");
            lcd.setCursor(0,3);
            lcd.print(" Sorozat     4 kor");
            {
              while (sw_secs.elapsed() <= (idozites*4));
              digitalWrite(negyedik_kimenet, HIGH);
              digitalWrite(otodik_kimenet, HIGH);
              (sorozat_allapot=HIGH);
              lcd.setCursor(0,2);
            lcd.print("                    ");
            lcd.setCursor(0,3);
            lcd.print("                    ");
            }  

            //client.println("<meta http-equiv=\"refresh\" content=\"3\">");    // oldal frissites 3 mp ként     
            sw_secs.stop();
            sw_secs.reset();

          }
          }

        if(readString.indexOf("/?S_ki") > 0) {
            digitalWrite(elso_kimenet, HIGH);
            digitalWrite(masodik_kimenet, HIGH);
            digitalWrite(harmadik_kimenet, HIGH);
            digitalWrite(negyedik_kimenet, HIGH);
            digitalWrite(otodik_kimenet, HIGH);
            sorozat_allapot = HIGH;
          }


          if  ((digitalRead(elso_kimenet) == LOW) || (digitalRead(masodik_kimenet) == LOW) || (digitalRead(harmadik_kimenet) == LOW) || (digitalRead(negyedik_kimenet) == LOW) )
          {
            digitalWrite(otodik_kimenet, LOW); 
          }
          else
          {
            digitalWrite(otodik_kimenet, HIGH); 
          }
          
          


     /*     if (digitalRead(elso_kimenet) == LOW) {
            client.print(F("<br><input type=button  value='1 KOR   BEKAPCSOLVA' onmousedown=location.href='/?1_be'></br>"));
          }
          if (digitalRead(masodik_kimenet) == LOW) {
            client.print(F("<br><input type=button value='2 KOR   BEKAPCSOLVA' onmousedown=location.href='/?2_be'></br>"));
          }
          if (digitalRead(harmadik_kimenet) == LOW) {
            client.print(F("<br><input type=button value='3 KOR   BEKAPCSOLVA' onmousedown=location.href='/?3_be'></br>"));
          }
          if (digitalRead(negyedik_kimenet) == LOW) {
            client.print(F("<br><input type=button value='4 KOR   BEKAPCSOLVA' onmousedown=location.href='/?4_be'></br>"));
          }
*/
client.println(F("</body></html>"));
   delay(1);     
          client.stop();      // cliens megallitasa


          readString = "";
        }
      }
    }
  }
Mod: Admin (Code/Code blokk)
kukuri
Bitmanipulátor
Hozzászólások: 132
Csatlakozott: 2014. január 20. hétfő, 12:50

Re: Webserver frissités

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

Szia!
Valószínűleg rosszul adod meg a várakoztatást.Ezért nem fut tovább a kód ameddig le nem telik az idő. Csináld meg megváltoztatod úgy hogy minden körben csak egy kis időt várakoztatod. Mondjuk 1000ms . Ezek után számolod a ciklusokat. Ha megvan a megfelelő ciklus szám akkor megváltoztatod amit akarsz. Így az idő is szépen frissülni fog 1s onként.
A beérkezett parancsot szerintem szépen dolgozd fel.Ne erőből írj minden beérkező parancsra adatváltozásokat. pl a "4_be" parancsnál vágd szét a stringet. Innentől tudod hogy a 4 es elemről van szó és azt is hogy ki vagy be kell kapcsolni. Ezután elég egyszer megírni a kódot mert a változókból össze tudod állítani a parancsokat és a szövegeket. Valamint ha nem 4 hanem 8 vagy még több elemet akarsz kapcsolni akkor sokkal egyszerűbben tudod bővíteni a kódot.
Bali12
Újonc
Újonc
Hozzászólások: 12
Csatlakozott: 2015. február 7. szombat, 17:00

Re: Webserver frissités

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

Átszerkesztettem , az óra , számlálás működik de a weblap frissités még nem jó.
Tehát ha elinditok egy ' 1_be' idozitett ciklust akkor addig nem tudom leállitani vagy masikat elinditani amig ez le nem jár.
kukuri
Bitmanipulátor
Hozzászólások: 132
Csatlakozott: 2014. január 20. hétfő, 12:50

Re: Webserver frissités

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

Így van. Ha azt adod ki parancsba hogy várjon 1 percig akkor addig semmi nem fog történni ameddig ez az idő el nem telik. Még egy külön gombbal sem tudod továbbléptetni mert semmit nem figyel ez idő alatt. Ezért kell megoldanod úgy hogy a hosszú várakozáson belül bizonyos feltételekkel ki tudj lépni a várakozásból. Valamint így a várakozás alatt egyéb feladatokat is meg tudsz oldani.
Válasz küldése