Stránka 2 z 2

Re: Odesílání hodnot po cca 10 minutách mimo zobrazovaní

Napsal: 26 kvě 2021, 22:01
od Kony
vyreseno

Kód: Vybrat vše

unsigned long aktualniMillis1; //aktualni cas
unsigned long predchoziMillis1; //cas poseldni akce
unsigned long aktualniMillis5; //aktualni cas
unsigned long predchoziMillis5; //cas poseldni akce
void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
Serial.println("Seriovy port aktivni");
}

void loop() {
  // put your main code here, to run repeatedly:
  aktualniMillis1 = millis(); //podivam se na hodinky
  aktualniMillis5 = millis(); //podivam se na hodinky
  Serial.println(aktualniMillis1);
  Serial.println(aktualniMillis5);
    if(aktualniMillis1 - predchoziMillis1 > 10000) { //pokud zhasnout ubehlu uz 500ms od posledni akce?
            predchoziMillis1 = aktualniMillis1; //v tento cas jsem provedl posledni akci
             Serial.println("Po 10000"); //zhasni led
    }
        else if(aktualniMillis5 - predchoziMillis5 > 50000) { //pokud zhasnout ubehlu uz 500ms od posledni akce?
            predchoziMillis5 = aktualniMillis5; //v tento cas jsem provedl posledni akci
             Serial.println("Po 50000"); //zhasni led
    }
  delay(1000);

}

Re: Odesílání hodnot po cca 10 minutách mimo zobrazovaní

Napsal: 26 kvě 2021, 22:19
od KamilV
:o
Jako rozhodně to neřeší původní dotaz, ale asi ses dostal tam, kam jsi potřeboval.

Re: Odesílání hodnot po cca 10 minutách mimo zobrazovaní

Napsal: 26 kvě 2021, 22:44
od Kony

Re: Odesílání hodnot po cca 10 minutách mimo zobrazovaní

Napsal: 27 kvě 2021, 17:10
od kiRRow
Ano. Přesně tak se programuje. Nejprve si řekneš co přesně chceš a kdy chceš aby se dělo, pak teprve začneš psát kód, nebo vkopírovávat funkční bloky a podprogramy na své místo v programu. Já si třeba složitější programy i kreslím na papír ve formě vývojového diagramu.

PS: zbav se delay, neskutečný nešvár tahle věc ... použít se dá snad jedině v momentě, kdy úmyslně chci zablokovat celý program

Re: Odesílání hodnot po cca 10 minutách mimo zobrazovaní

Napsal: 27 kvě 2021, 19:57
od KamilV
Ještě pár bodů k zamyšlení, kdybys to chtěl posunout ještě dál:
K čemu si definuješ char server, když to stejně nikde nepoužíváš a vkládáš URL natvrdo?

Jakou výhodu přináší

Kód: Vybrat vše

#define typDHT22 DHT22   // DHT 22 (AM2302)
DHT mojeDHT(pinDHT, typDHT22);
místo

Kód: Vybrat vše

DHT mojeDHT(pinDHT, DHT22);
Někdy si říkám, že je lepší žádný komentář, než mylný.

Kód: Vybrat vše

if(aktualniMillis1 - predchoziMillis1 > 60000) { //pokud zhasnout ubehlu uz 500ms od posledni akce?

Re: Odesílání hodnot po cca 10 minutách mimo zobrazovaní

Napsal: 02 čer 2021, 04:52
od Arthur
Myslím, že použití delay.( ) pro zpoždění je v pořádku.

Re: Odesílání hodnot po cca 10 minutách mimo zobrazovaní

Napsal: 02 čer 2021, 05:12
od gilhad
@Artur: IMHO pouze pokud program má dělat jednu jedinou věc, přerušení nepřichází v úvahu, nikdy nebude vylepšován a nebude veřejně dostupný, protože jinak ho někdo použije jako základ něčeho, co předchozí nesplňuje.
A ani potom neprináší žádnou zvláštní výhodu.

Re: Odesílání hodnot po cca 10 minutách mimo zobrazovaní

Napsal: 02 čer 2021, 11:39
od jankop
V případě, že se jedná o ESP8266, jako v tomto případě, tak je delay() doporučováno v situaci, kdy volaná funkce trvá déle než 50ms. Je to proto, aby se umožnilo uvolnil čas pro TCP/IP a WiFi stack. Ve svých programech používám delay() pouze při připojování k WiFi a pak pouze ve výjimečných případech, kdy je například třeba vyčkat pouze 1ms na reset externího obvodu. Souhlasím tedy s názorem, že delay() v dobrém programu nemá místo. Základem je smyčka loop(), ve které jsou časově závisle podmínky, které volají požadované funkce.
Pak to vypadá nějak takto:

Kód: Vybrat vše

void loop(void) {
  server.handleClient();
  MDNS.update();
  // periodic sensor reading
  if ((((millis() - SensorReadPeriod) > TimeSensorTemp) && (millis() > SensorReadPeriod)) || TimeSensorTemp == 0) {
    TimeSensorTemp = millis();
    // reading valid data from sensor
    GetSensor();
  }
  // periodic sending of data to the host
  if (((((millis() - SendPeriod) > TimeSendTemp) && (millis() > SendPeriod)) || TimeSendTemp == 0) && SendToTmep) {
    TimeSendTemp = millis();
    // Send valid data to host
    SendData();
  }
}
Ty testy proměných na nulu jsou proto, aby se požadované funkce provedly okamžitě po restartu obvodu a například zobrazení požadovaných hodnot bylo ihned a nečekalo se třeba minuty na první výsledek.

Re: Odesílání hodnot po cca 10 minutách mimo zobrazovaní

Napsal: 02 čer 2021, 12:25
od Caster
Není na to nic složitého. Na ATtiny202 používám interní RTC. Každou hodinu generuji přerušení, kdy změřím hodnoty a odešlu je přes SigFox vysílač do sítě. Napájení je z 12V zásuvky auta. Skoro 2 roky to běží bez nejmenších problémů.