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 = "";
}
}
}
}