millis

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
Le-Ze
Příspěvky: 218
Registrován: 24 črc 2017, 08:15

millis

Příspěvek od Le-Ze » 27 čer 2024, 09:55

Zdravím.
Poradite- pomužete?
Bych potřeboval ukladat do int čas, který uběhl (0 - 60000) ,abych ho moh vypisovat přes ser. port.
Děkuji.

Kód: Vybrat vše

unsigned long cas = millis();
int toggle = 1;
 
void setup() {
    Serial.begin(9600);
}
 
void loop() {
    if (millis() - cas > 60000)     
    {
        odesli();
        cas = millis();           
    }
}
 
void odesli()
{
    Serial.println("hups");
}


AstroMiK
Příspěvky: 639
Registrován: 08 pro 2017, 19:05

Re: millis

Příspěvek od AstroMiK » 27 čer 2024, 11:18

Do rozsahu "int" se tak velké číslo nevejde (rozsah je -32768 až +32767).
Je nutné použít rozsah "unsigned int" (rozsah 0 až 65535 ).

Třeba takhle:

Kód: Vybrat vše

unsigned long cas = millis();
int toggle = 1;
 
void setup() {
    Serial.begin(9600);
}
 
void loop() {
    unsigned int rozdil = millis() - cas;
    if (rozdil > 60000)     
    {
        odesli(rozdil);
        cas = millis();           
    }
}
 
void odesli(unsigned int hodnota)
{
    Serial.println(hodnota);
}

Le-Ze
Příspěvky: 218
Registrován: 24 črc 2017, 08:15

Re: millis

Příspěvek od Le-Ze » 27 čer 2024, 12:16

Abych upřesnil, o co mi jde.
Mam lineární motory z ali a chci ovladat arduinem.
Na jendom GPIO je tlačitko. Když ho zmačknu, tak chci, aby se motor spustil plnou ryclosti - PWM 255.
Ale potřebují, abych ho mohl posledních par vteřin přes PWM zpomalit.

Uživatelský avatar
kiRRow
Příspěvky: 1306
Registrován: 07 kvě 2019, 07:03
Bydliště: Opava

Re: millis

Příspěvek od kiRRow » 27 čer 2024, 15:33

Jsem z toho volajakej zmaťenej ... ale chtěl bych podotknout, že není moc dobrý nápad spouštět jakékoliv motory okamžitě na max ...

Le-Ze
Příspěvky: 218
Registrován: 24 črc 2017, 08:15

Re: millis

Příspěvek od Le-Ze » 27 čer 2024, 17:59

kiRRow píše:
27 čer 2024, 15:33
Jsem z toho volajakej zmaťenej
Tak ještě jinak.
unsigned long cas = 0;

void setup() {
Serial.begin(19200);
}

void loop() {
if (millis() >= cas + 10000) {
cas = millis();
Serial.println(cas);
}

}
Da se docilit toho, aby se mi přes ser. port vypisoval uplynulý čas?
0,1,2,3,4 ----- 9999, 10000.

Uživatelský avatar
kiRRow
Příspěvky: 1306
Registrován: 07 kvě 2019, 07:03
Bydliště: Opava

Re: millis

Příspěvek od kiRRow » 27 čer 2024, 18:02

Serial.println(cas/1000);

Uživatelský avatar
gilhad
Příspěvky: 843
Registrován: 07 bře 2018, 11:22

Re: millis

Příspěvek od gilhad » 27 čer 2024, 22:30

U toho vypisování bych to nedělal v každém průběhu, ony ty výpisy nejsou zase tak rychlé.

Uživatelský avatar
kiRRow
Příspěvky: 1306
Registrován: 07 kvě 2019, 07:03
Bydliště: Opava

Re: millis

Příspěvek od kiRRow » 28 čer 2024, 16:32

gilhad píše:
27 čer 2024, 22:30
U toho vypisování bych to nedělal v každém průběhu, ony ty výpisy nejsou zase tak rychlé.
tady bych to ještě viděl, že jsme někde na úrovni : "poznejme arduino" ... zatím se zjišťují jeho možnosti a limity ... a možnosti a limity uživatele :-)

Uživatelský avatar
gilhad
Příspěvky: 843
Registrován: 07 bře 2018, 11:22

Re: millis

Příspěvek od gilhad » 28 čer 2024, 17:53

Ano, ale je dobré vědět, že když to v té řadě 0,1,2.3,4.... začne mít mezery, že to není nutně nějaká záhadná chyba :)

Uživatelský avatar
kiRRow
Příspěvky: 1306
Registrován: 07 kvě 2019, 07:03
Bydliště: Opava

Re: millis

Příspěvek od kiRRow » 28 čer 2024, 20:18

Máte štěstí že jedu kolem, dovolíte ... technická závada ....... pamatuje, chybami se člověk učí ! :D

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 0 hostů