Generování času na www

Odpovědět
daton
Příspěvky: 668
Registrován: 16 bře 2013, 15:12

Generování času na www

Příspěvek od daton »

Dobrý den
Tak abych nebyl off-topic navazuji na svoje úvahy z vlákna "Zatížení arduina a generování času" a zakládám toto vlákno kde by se mělo řešit generování času na stránkách vytvořených pomoci modulu W5100. Funkci millis jsem pochopil a napsal tento prográmek:

Kód: Vybrat vše

#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // zde si upravte podle sebe
IPAddress ip(192,168,20,150); // IP adresa
EthernetServer server(80);  // port

 int vterin =0;
 int minut =0;
 int hodin =0;
 int dni = 0;
 long cas = 0;
 
void setup()
{

  // nastavíme digitální piny na výstup
  pinMode(0, OUTPUT);
  pinMode(1, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, INPUT);
  pinMode(7, INPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}

//Hlavní smyčka 
void loop()
{
{ if (millis()>(1000 + cas)){
      vterin ++;
     cas = millis();
     }
    if (vterin == 60) // pokud je vteřin 60
    {  
      vterin = 0;   // vynulujem vteřiny
      minut ++;     // přičtem minutu     
    }
    if (digitalRead(6) == 1 ) {
      minut= minut + 1;    // spínačem přidáme minutu
     delay(250);
    }   
    if (minut == 60) // pokud je minut 60
    { 
      minut = 0;  // vynulujem minuty
      hodin ++;   // přičtem hodinu
    }
    if (digitalRead(7) == 1 ) {
      hodin= hodin + 1;
      delay(250);
      }
    if (hodin == 24) // pokud je hodin 24
    { 
      hodin = 0; // vynulujem hodiny
      dni ++;    // prictem den
       }  
    } 
    EthernetClient client = server.available(); // když je připojen klient, zjistíme, zda jsou odeslána data
       
     // začátek HTML stránky nejprve hlavička
         { 
        client.println("HTTP/1.1 200 OK");
        client.println("Content-Type: text/html");
        client.println("Connection: close");
        client.println();
        client.println("<!DOCTYPE HTML>");                // zde již klasická html data
        client.println("<html>");
        client.println("<head>");                
        client.println("<META HTTP-EQUIV=REFRESH CONTENT=1 URL=>"); // refreš stránek po 1 sekundách
        client.println ("<meta charset=utf-8>");
        client.println("</head>");
        client.println("<body>");                       // vygeneruje formulář

        //Zobrazující se informace na stránce   
        client.print F("<center><p><h2> ");
        client.print F(" Interní čas:&nbsp;&nbsp; ");  //čtou se hodiny generované v interuptu
        client.print(dni);
        client.print F("&nbsp; dní &nbsp;");
        client.print(hodin);
        client.print F(":");
        client.print(minut);
        client.print F(":");
        client.print(vterin);
        client.print F("</h2></p><center><hr>");
        client.println F("</body>");
        client.println F("</html>");                           
        client.stop();     //ukončí přenos
       }      
    }  

Program generuje čas bez dní v měsíci pouze dní od spuštění zařízení což je i žádoucí aby bylo vidět jak dlouho už je aktivní. Refreš stránek je po 1s ale třeba já mám na serveru nastavenou refreš na 5s protože hodnoty ze solárního systému se zase tam rychle nemění a i by nebylo dobré takto rychle hodnoty na stránce měnit.
Udělal jsem tam na dvou digitálních vstupech (6a7) možnost nastavování minut a hodin, vstupy musí mít odpor na zem alespoň 2kohmy a blokované kondenzátorem 4,7uF.
Tento program chodí dobře až na to že se po několika sekundách sekne web a musí se stránky na pc obnovit a potom opět chvíli pracují a zase dojde k záseku. A to je právě otázka proč se to seká když je to relativně jednoduchá stránka. Čím víc názorů a připomínek tím líp :-) .
daton
Příspěvky: 668
Registrován: 16 bře 2013, 15:12

Re: Generování času na www

Příspěvek od daton »

Tak ne pokud na stránce není žádný text a arduino nenačítá další vstupy tak to jede bez sekání ale pokud se tam přidá načítání vstupů tak už se to seká. Vycházel jsem z celé stránky co se mi generuje a pro tento případ jsem zjednodušil jen hodiny a ty jednou bez záseků.
Ale stejně se zeptám jestli vás nenapadá proč by se to mohlo sekat.
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 08:18

Re: Generování času na www

Příspěvek od AlesH »

Mám dojem, že ten zdrojový kód asi není kompletní, protože mi tam chybí takové věci jako client.connected(), client.available() nebo client.read(). Bez nich mi ten program nedává smysl. Také nevím, co znamená zápis "client.print F(...)" nebo "client.println F(...)".

Obecně se obávám, že sekundový automatický refresh může být pro Arduino moc častý a Arduino může přestat stíhat. Praktické zkušenosti s tím ale nemám.
daton
Příspěvky: 668
Registrován: 16 bře 2013, 15:12

Re: Generování času na www

Příspěvek od daton »

To F znamená že příkaz či text je uložen do flash paměti do ram bych celý text stranky nenacpal a ty utility co uvadite jsem nikdy nepoužíval a vše chodilo bez problemů nejsem si tedy jist zda by to vyřešilo zasekávání. Vyzkoušet je ale mohu.
Odpovědět