NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Pavel.H
Člen
Avatar
Pavel.H:27.6.2024 10:45

Dobrý den.
https://github.com/…tensen/Timer
Třeba takto.

#include "Timer.h"

Timer t;

void setup()
{
  Serial.begin(9600);
  digitalWrite(8, HIGH); // pin 8 na 1
  pinMode(8,OUTPUT);     // nastavení pinu  8 na výstup

  pinMode(7, INPUT_PULLUP);
}

void vratPinNaHigh()
{
  digitalWrite(8, HIGH);
}

void loop()
{
  if (digitalRead(7)== LOW)
    {
     digitalWrite(8, LOW);
     t.after(30*1000, vratPinNaHigh);
    }
  t.update();
}

Chci docílit: Jak ukladat třeba do int čas, krerý uběhl (0 - 30000), aby si ho moh vypisovat přes ser. port?
Děkují.

Editováno 27.6.2024 10:48
 
Odpovědět
27.6.2024 10:45
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Pavel.H
DarkCoder:27.6.2024 11:37

Pro určení a vypsání uplynulého času budeš potřebovat určit časový interval, tedy začátek a konec měření. Pro určení mezí intervalu pouziješ funkci millis().

Funkce millis() vrací hodnotu typu unsigned long, což je počet milisekund od spuštění programu.

Měření času mezi dvěma událostmi:

Uložením dvou hodnot millis() do proměnných a jejich následným odečtením zjistíš, kolik času uplynulo mezi těmito dvěma body.

Nahoru Odpovědět
27.6.2024 11:37
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Pavel.H
Člen
Avatar
Odpovídá na DarkCoder
Pavel.H:27.6.2024 12:45

No nevím, jisti jsem to dobře napal.

Zmačknu tlačítko a nastaví se GPIO8 na LOW a spustí se motor na plný výkon PWM 255.
Po určitém čase se zavolá funkce vratPinNaHigh a motor se vypne.

Takže nastavím 10 * 1000 10 sekud
Tedy motor pojede 10 sekund a ja potřebují, aby se třeba po 8 sekundách zpomalil.

 
Nahoru Odpovědět
27.6.2024 12:45
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Pavel.H
DarkCoder:27.6.2024 13:22

K tomu potřebuješ 2 časovače, jeden Ti bude hlídat zpomalení a druhý vypnutí motoru.

unsigned long startTime = 0;
unsigned long elapsedTime = 0;
bool timingStarted = false;
bool speedReduced = false;

void setup()
{
  Serial.begin(9600);
  pinMode(8, OUTPUT);       // Nastavit pin 8 jako výstup
  pinMode(7, INPUT_PULLUP); // Nastavit pin 7 jako vstup s pull-up rezistorem
}

void loop()
{
  // Když je tlačítko stisknuto a časovač nebyl spuštěn
  if (digitalRead(7) == LOW && !timingStarted)
  {
    analogWrite(8, 255);  // Spustit motor na plný výkon (PWM 255)
    startTime = millis(); // Uložit počáteční čas
    timingStarted = true; // Nastavit flag, že časovač byl spuštěn
    speedReduced = false; // Resetovat flag pro snížení rychlosti
  }

  // Pokud časovač běží
  if (timingStarted)
  {
    elapsedTime = millis() - startTime; // Vypočítat uplynulý čas

    // Po 8 sekundách snížit rychlost motoru, pokud ještě nebyla snížena
    if (elapsedTime >= 8000 && !speedReduced)
    {
      analogWrite(8, 128); // Snížit rychlost motoru (např. PWM 128)
      speedReduced = true; // Nastavit flag, že rychlost byla snížena
    }

    // Po 10 sekundách vypnout motor
    if (elapsedTime >= 10000)
    {
      analogWrite(8, 0);   // Vypnout motor
      timingStarted = false; // Resetovat flag pro měření času
    }

    // Vypsat uplynulý čas pro ladění
    Serial.println(elapsedTime);
  }
}
Nahoru Odpovědět
27.6.2024 13:22
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
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 4 zpráv z 4.