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
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
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ů.