Diskuze: Funkce millis

Hardware PC Mikrokontroléry Funkce millis

Avatar
Lukas
Člen
Avatar
Lukas:

Ahoj, snažím se nastavit Arduino UNO tak, aby po stisku tlačítka se sepnulo relé do stavu ON a po uběhnutí 5min zase vypnulo. Je možné pro tuto funkci použít millis? Nemůžu použít delay, potřebuji ještě číst ze senzorů.
Nikde se o tom nic nepíše, tak nevím jsetli je to možné.
Děkuji za radu, případně za návrhy.

Více zde: http://arduino8.webnode.cz/diskuze/

 
Odpovědět 7. února 20:20
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Lukas
Adam Ježek:

Při stisknutí si do nějaké proměnné typu long uložíš číslo, co ti vrátí funkce millis. Na začátku loopu jenom zkontroluješ, jestli to co vrací millis teď není o pět minut větší než to co máš uložené a a pokud ano, uběhlo 5 minut a vypneš si to.

Nahoru Odpovědět  +1 7. února 20:28
Programátor dělá co může. Počítač co chce. | Pokud mi dáš mínus, tak prosim, napiš proč!
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na Lukas
Martin Dráb:

Podle dokumentace mi přijde, že by v tom neměl být problém. Ta funkce ti řekne, kolik milisekund aktuálně uplynulo od počátku vesmíru (startu aktuálního programu), takže ji můžeš využít ke měření "relativního" času.

https://www.arduino.cc/…rence/Millis

Nahoru Odpovědět 7. února 20:30
2 + 2 = 5 for extremely large values of 2
Avatar
Lukas
Člen
Avatar
Lukas:

Prosím, mohli by jste mi pomoct?
Pořád řeším to zpoždění relé, a nedaří se mi nastavit to zpoždění vypnutí.
Předem děkuji.

#include <IRremoteInt.h>
#include <IRremote.h>

int recv_pin = 11;
IRrecv irrecv(recv_pin);
decode_results results;

int led_pin_1 = 13;
int rele_pin_1 = 10;

unsigned long otvira = 2000;
unsigned long cas_akce = 0;
unsigned long aktualni_cas = 0;


void setup()
{
  pinMode(led_pin_1, OUTPUT);
  pinMode(rele_pin_1, OUTPUT);
  irrecv.enableIRIn(); // Start the receiver
}

void loop()
{
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    if (results.value == 16580863) {
      digitalWrite(led_pin_1, HIGH);
      digitalWrite(rele_pin_1, HIGH);
      cas_akce = millis();
    }
    if (millis() > cas_akce - otvira) {
      digitalWrite(rele_pin_1, LOW);
    }

    irrecv.resume();
  }
}
 
Nahoru Odpovědět 9. února 19:26
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Lukas
ostrozan:

neměl bys tam mít

if (millis() > cas_akce + otvira)

??

 
Nahoru Odpovědět 10. února 21:06
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.