Funkce Arduino Delay a proč byste ji neměli používat

  • Brian Curtis
  • 12
  • 5381
  • 1521
reklama

Když jste se poprvé začali učit, jak rozvíjet Začínáme s Arduino: Průvodce pro začátečníky Začínáme s Arduino: Průvodce pro začátečníky Arduino je platforma s otevřeným zdrojovým kódem elektroniky založená na flexibilním, snadno použitelném hardwaru a softwaru. Je určen pro umělce, designéry, fandy a kohokoli, kdo má zájem o vytváření interaktivních objektů nebo prostředí. pro Arduino Co je Arduino a co s tím můžete dělat? Co je Arduino a co s ním můžete dělat? Arduino je pozoruhodné malé elektronické zařízení, ale pokud jste ho nikdy předtím nepoužívali, jaké jsou přesně a co s ním můžete dělat? , pravděpodobně jste vytvořili produkt, který funguje trochu takto:

Ke svému Arduinu by bylo připojeno jediné LED světlo. To by se asi každou sekundu vypnulo a vypnulo a bude pokračovat, dokud se Arduino nevypne. To je “Ahoj světe” program Arduino, a dokonale ilustruje, jak jen pár řádků kódu může vytvořit něco hmatatelného.

Jsem také ochoten se vsadit, že jste použili zpoždění() funkce pro definování intervalů mezi zapínáním a vypínáním světla. Ale tady je ta věc: zatímco zpoždění je užitečné pro základní demonstrace toho, jak Arduino funguje, neměli byste ho opravdu používat ve skutečném světě. Zde je proč - a co byste měli místo toho použít.

Jak Delay () funguje

Způsob, jakým zpoždění() funkční práce je docela jednoduchá. Přijímá jediné celé číslo Základy počítačového programování 101 - Proměnné a typy dat Základy počítačového programování 101 - Proměnné a typy dat Po představení a mluvení o objektově orientovaném programování dříve a odkud pochází jeho jmenovec, jsem si myslel, že je čas, abychom prošli absolutní základy programování jiným způsobem než jazykem. Tento argument… (nebo číslo). Toto číslo představuje čas (měřený v milisekundách), který by měl program počkat, až přejde na další řádek kódu.

Ale problém je, že zpoždění() funkce není dobrý způsob, jak přimět váš program čekat, protože se jedná o tzv “blokování” funkce.

Rozdíl mezi blokujícími a neblokujícími funkcemi

Abychom ilustrovali, proč jsou funkce blokování špatné, chci si představit dva různé kuchaře v kuchyni: Henry Blocking, a Eduardo NonBlocking. Oba dělají stejnou práci, ale odlišně.

Když Henry připraví snídani, naloží do toustovače dvě kola chleba. Když konečně ping, a chléb vyskočí na zlatohnědou, Henry ho položí na talíř a praskne dvě vejce do pánve. Opět stojí, jakmile se olej objeví, a bílé začnou ztvrdnout. Až budou hotoví, nakloní je a začne smažit dvě rýže slaniny. Jakmile jsou dostatečně křupavé, sundá je z pánve, položí je na talíř a začne jíst.

Eduardo pracuje trochu jinak. Zatímco jeho chléb opéká, už začal smažit vejce a slaninu. Namísto čekání na dokončení jedné položky před přesunem na další položku připravuje více položek současně. Konečným výsledkem je, že Eduardo potřebuje snídani méně času než Henry - a v době, kdy Henry Blocking skončí, toast a vejce vychladnou.

Je to hloupá analogie, ale ukazuje to.

Blokování Funkce zabraňují programu v tom, aby dělal cokoli jiného, ​​dokud nebude tento konkrétní úkol dokončen. Pokud chcete více akce aby se to stalo současně, jednoduše nemůžete použít zpoždění().

Zejména pokud vaše aplikace vyžaduje, abyste neustále získávali data z připojených senzorů, měli byste se vyhnout používání zpoždění() funkce, protože se absolutně zastaví všechno.

naštěstí, zpoždění() není jediný způsob, jak nechat program čekat na kódování Arduina.

Seznamte se s Millis ()

millis () funkce provádí jeden úkol. Při volání se vrátí (jako dlouho datatype) počet milisekund, které uplynuly od prvního spuštění programu. Tak proč je to užitečné?

Protože pomocí trochu jednoduché matematiky, můžete snadno “čas” aspekty vašeho programu, aniž by to mělo dopad na jeho fungování. Následuje základní ukázka toho, jak millis () funguje. Jak uvidíte, program rozsvítí LED diodu po dobu 1000 milisekund (jednu sekundu) a poté ji vypne. Ale zásadně to dělá způsobem, který neblokuje.

Nyní se podívejme, jak to funguje s Arduino.

Tento program, který je silně založen na jednom z oficiální dokumentace Arduino, pracuje tak, že od aktuálního času odečte předchozí zaznamenaný čas. Pokud je zbytek (tj. Čas, který uplynul od posledního záznamu času) větší než interval (v tomto případě 1000 milisekund), program aktualizuje previousTime proměnná podle aktuálního času a buď zapíná nebo vypíná LED.

A protože je to neblokující, jakýkoli kód, který je umístěn mimo první pokud prohlášení by měl fungovat normálně.

Jednoduché, že? Všimněte si, jak jsme proměnnou vytvořili aktuální čas jako nepodepsaný dlouho. An nepodepsaný hodnota jednoduše znamená, že nikdy nemůže být záporná; děláme to tak, že maximální počet, který můžeme uložit, je větší. Ve výchozím nastavení jsou číselné proměnné podepsány, což znamená jedna “bit” paměti pro tuto proměnnou se používá k uložení, zda je hodnota kladná nebo záporná. Pokud uvedete, že to bude pouze pozitivní, budeme si hrát ještě jeden kousek navíc.

Přerušení

Zatím jsme se v našem programu Arduino dozvěděli o jednom způsobu, jak přiblížit časování, což je lepší než zpoždění(). Ale je tu další, mnohem lepší způsob, ale složitější: přeruší se. Tyto mají výhodu, že vám umožňují přesně načasovat váš program Arduino a rychle reagovat na externí vstup, ale v režimu asynchronní způsob.

To znamená, že běží ve spojení s hlavním programem, neustále čeká na událost, aniž by přerušil tok kódu. To vám pomůže efektivně reagovat na události, aniž by to mělo dopad na výkon procesoru Arduino.

Při spuštění přerušení buď zastaví program, nebo zavolá funkci, obecně známou jako Obsluha přerušení nebo Rutina přerušení služby. Jakmile to bude ukončeno, program se vrátí k tomu, co se děje.

Čip AVR napájející Arduino podporuje pouze hardwarová přerušení. K tomu dochází, když vstupní pin přechází z vysokého na nízký, nebo když je spuštěn vestavěnými časovači Arduino.

Zní to krypticky. Matoucí. Ale není to tak. Chcete-li vidět, jak fungují, a vidět některé příklady, jak se používají v reálném světě, klikněte na dokumentaci Arduino.

Nenechte se blokovat

Použitím millis () Je pravda, že v porovnání s používáním vyžaduje trochu více práce zpoždění(). Ale věřte mi, vaše programy vám za to děkují a bez Arduina nemůžete dělat multitasking.

Pokud chcete vidět příklad millis () používá se v reálném světě Arduino projektu, podívejte se na Arduino Night Light a Sunrise Alarm od Jamese Bruce. Projekt Arduino Night Light and Sunrise Alarm Project Projekt Arduino Night Light and Sunrise Alarm Today Budeme vyrábět budík s východem slunce, který vás jemně a pomalu probudí, aniž byste se uchýlili k útočnému zařízení pro vytváření hluku.

Našli jste nějaké další blokovací funkce, které bychom měli mít na pozoru? Dejte mi vědět v komentářích níže a my si povídáme.

Foto Kredity: Arduino (Daniel Spiess), šéfkuchař (Ollie Svenson)




yirbqmpkhe ([email protected])
23.07.23 18:11
UneDose | Funkce Arduino Delay a proč byste ji neměli používat [url=http://www.gx6s1by8x85s3picwk8121lai004w340s.org/]uyirbqmpkhe[/url] <a href="http://www.gx6s1by8x85s3picwk8121lai004w340s.org/">ayirbqmpkhe</a> yirbqmpkhe http://www.gx6s1by8x85s3picwk8121lai004w340s.org/
prbvijwcb ([email protected])
28.05.23 17:30
UneDose | Funkce Arduino Delay a proč byste ji neměli používat [url=http://www.gti2713cn874hrx15u63wky66wgu851is.org/]uprbvijwcb[/url] <a href="http://www.gti2713cn874hrx15u63wky66wgu851is.org/">aprbvijwcb</a> prbvijwcb http://www.gti2713cn874hrx15u63wky66wgu851is.org/
ekipohevet ([email protected])
22.10.22 02:24
http://slkjfdf.net/ - Oqeyuxeji <a href="http://slkjfdf.net/">Owbonhegi</a> lqj.lhxt.cs.unedose.fr.kzr.vd http://slkjfdf.net/
icosofoluwe ([email protected])
22.10.22 01:58
http://slkjfdf.net/ - Uixucayip <a href="http://slkjfdf.net/">Iyeenxade</a> vxv.eatc.cs.unedose.fr.ksa.ly http://slkjfdf.net/
22.10.22 01:55
http://slkjfdf.net/ - Ekoaveac <a href="http://slkjfdf.net/">Acomol</a> yqj.yvsk.cs.unedose.fr.nkc.bl http://slkjfdf.net/
O moderní technologii, jednoduché a cenově dostupné.
Váš průvodce ve světě moderních technologií. Naučte se, jak používat technologie a pomůcky, které nás každý den obklopují, a naučte se, jak objevovat na internetu zajímavé věci.