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: "); //čtou se hodiny generované v interuptu
client.print(dni);
client.print F(" dní ");
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
}
}
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
