|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
programming Član
Pridružen-a: Sre 09 Jan 2013 19:58 Prispevkov: 33 Aktiv.: 0.24
|
Objavljeno: Tor Jan 26, 2021 10:06 pm Naslov sporočila: Zakasnitev brez delay |
|
|
Zdravo, lepo bi prosil za malo pomoči in sicer s katerim ukazom bi lahko zamenjal funkcijo delay(1000), da bi program čakal 1s brez da bi se izklopil kot to stori pri ukazu delay. Ostali procesi pa bi se med čakanjem izvajali nemoteno (želim merit čas brez prekinitve). Hvala |
|
Nazaj na vrh |
|
|
tlogar Član
Pridružen-a: Pon 23 Mar 2015 16:57 Prispevkov: 186 Aktiv.: 1.69
|
Objavljeno: Tor Jan 26, 2021 10:56 pm Naslov sporočila: |
|
|
Lahko si zabeležiš čas nekega dogodka preko sistemske ure (čas od zagona krmilnika) in nato v vsakem ciklu programa preveriš, če je že minil nek določen čas. Pri arduinu uporabiš ukaz millis(). Drugače pa še malo pogooglaj in boš hitro dobil kak primer. |
|
Nazaj na vrh |
|
|
tlogar Član
Pridružen-a: Pon 23 Mar 2015 16:57 Prispevkov: 186 Aktiv.: 1.69
|
Objavljeno: Tor Jan 26, 2021 10:57 pm Naslov sporočila: |
|
|
Lahko si zabeležiš čas nekega dogodka preko sistemske ure (čas od zagona krmilnika) in nato v vsakem ciklu programa preveriš, če je že minil nek določen čas. Pri arduinu uporabiš ukaz millis(). Drugače pa še malo pogooglaj in boš hitro dobil kak primer. |
|
Nazaj na vrh |
|
|
lojzek Član
Pridružen-a: Pet 25 Jan 2008 8:00 Prispevkov: 3352 Aktiv.: 17.02
|
Objavljeno: Sre Jan 27, 2021 7:13 am Naslov sporočila: |
|
|
Uporabiš prekinitve. In sicer časovno prekinitev TCNT1. Ta je pri arduinu lahko dolga tudi čez 4s. |
|
Nazaj na vrh |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5766 Aktiv.: 25.96 Kraj: Grosuplje
|
Objavljeno: Sre Jan 27, 2021 9:58 am Naslov sporočila: |
|
|
Tole si poglej. _________________ Lp, Jaka |
|
Nazaj na vrh |
|
|
rplink3r Član
Pridružen-a: Tor 06 Feb 2007 20:02 Prispevkov: 480 Aktiv.: 2.30 Kraj: Levec
|
Objavljeno: Sre Jan 27, 2021 12:38 pm Naslov sporočila: |
|
|
Arduino že ima takšen primer, uporablja pa princip sistemskega časa, kateri se stalno posodablja, ter glede na razliko časa od zadnjega proženja sproži programsko rutino.
https://www.arduino.cc/en/Tutorial/BuiltInExamples/BlinkWithoutDelay _________________ "The statement below is false."
"The statement above is true." |
|
Nazaj na vrh |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5766 Aktiv.: 25.96 Kraj: Grosuplje
|
Objavljeno: Sre Jan 27, 2021 2:15 pm Naslov sporočila: |
|
|
rplink3r je napisal/a: |
Arduino že ima takšen primer, ........[/url] |
Pri tem pride do problema, če želiš nekaj vkljapljat na točno določen čas, pri čemer program počne še marsikaj drugega. Ne vem, če boš ujel točno določen millis().
Pri daljših časovnih intervalih niti ni tak problem, pri kratkih in kompleksnem programu pa sigurno! _________________ Lp, Jaka |
|
Nazaj na vrh |
|
|
programming Član
Pridružen-a: Sre 09 Jan 2013 19:58 Prispevkov: 33 Aktiv.: 0.24
|
Objavljeno: Sre Jan 27, 2021 3:56 pm Naslov sporočila: |
|
|
Hvala za odgovore, zadeva je sledeča, izmerit želim reakcijski čas v milisekundah kar mi je sicer uspelo in deluje, problem pa nastane, ko želim dodati funkcijo, ki bo merila tudi prehitri pritisk TIPKE in čas prehitrega pritiska izpisala v milisekundah. Ob prehitrem pritisku bi mogel it čas v minus ampak se mi zdi, da to ni mogoče?
tukaj je koda:
Koda: |
int TIME_START = 0;
int TIME_X = 0;
int TIME_END = 0;
long randomNumber;
int pinButton = 7;
int pinLED = 12;
void setup()
{
Serial.begin(9600);
pinMode (pinLED, OUTPUT);
pinMode (pinButton, INPUT);
}
void loop()
{
if (digitalRead(pinButton) == HIGH) {
delay(3000);
TIME_START = millis();
randomNumber = random(1000, 4000);
delay(randomNumber);
digitalWrite(pinLED, HIGH);
TIME_X = millis();
while (digitalRead(pinButton) == LOW)
{
}
TIME_END = millis();
digitalWrite(pinLED, LOW);
int TIME = TIME_END - TIME_X;
int TIME2 = TIME_X - TIME_START;
if (totalTime2 <= randomNumber)
{
Serial.println ("PREHITRO");
}
}
else
{
Serial.println ("cas:");
Serial.println (TIME);
}
delay(1000);
}
|
|
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 49 dni
Powered by phpBB © 2001, 2005 phpBB Group
|