Arduino funkcija odgode i zašto je ne biste trebali koristiti

  • Brian Curtis
  • 14
  • 2859
  • 460
Oglas

Kad ste prvi put započeli s učenjem kako započeti s Arduinom: Vodič za početnike Početak rada s Arduinom: Vodič za početnike Arduino je platforma za prototiranje elektronike otvorenog koda koja se temelji na fleksibilnom hardveru i softveru koji se lako koristi. Namijenjen je umjetnicima, dizajnerima, hobistima i svima koji su zainteresirani za stvaranje interaktivnih objekata ili okruženja. za Arduino Što je Arduino i što možete učiniti s njim? Što je Arduino i što možete učiniti s tim? Arduino je izvanredan mali elektronički uređaj, ali ako ga nikada prije niste koristili, samo što su točno i što možete učiniti s jednim? , vjerojatno ste napravili proizvod koji djeluje pomalo ovako:

Spojen na vaš Arduino bio bi jedno LED svjetlo. To bi se isključivalo i isključivalo svake sekunde ili slično, i nastavit će se dok se Arduino ne isključi. Ovo je “Pozdrav svijete” program Arduino, a savršeno ilustrira kako samo nekoliko redaka koda može stvoriti nešto opipljivo.

Također se volim kladiti da ste to iskoristili odgoditi() funkcija za definiranje intervala između uključivanja i isključivanja svjetla. Ali tu je stvar: iako je kašnjenje prikladno za osnovne demonstracije kako Arduino djeluje, zapravo ga ne biste trebali koristiti u stvarnom svijetu. Evo zašto - i što biste umjesto toga trebali koristiti.

Kako odgađa () djeluje

Način na koji odgoditi() funkcija djeluje prilično je jednostavno. Prihvaća jedan cijeli broj Osnove računalnog programiranja 101 - Promjenjive i podatkovne tipove Osnove računalnog programiranja 101 - Promjenjive i podatkovne vrste Nakon uvođenja i razgovora o objektno orijentiranom programiranju prije i odakle dolazi njegov imenjak, mislio sam da je vrijeme da prođemo apsolutne osnove programiranja na nejezički specifičan način. Ovaj… (ili broj) argument. Taj broj predstavlja vrijeme (mjereno u milisekundama) kako bi program trebao pričekati dok prijeđe na sljedeći redak koda.

Ali problem je u tome odgoditi() funkcija nije dobar način da natjerate svoj program na čekanje, jer je ono što je poznato kao “blokiranje” funkcija.

Razlika između funkcija blokiranja i neblokiranja

Da ilustriram zašto su funkcije blokiranja loše, želim da zamislite dva različita kuhara u kuhinji: Henry Blocking, i Eduardo NonBlocking. Oboje rade isti posao, ali na divlje drugačiji način.

Kad Henry pravi doručak, započinje s stavljanjem dvije runde kruha u toster. Kad napokon pingovi, a kruh iskače zlatno smeđu boju, Henry ga stavlja na tanjur i razvaljuje dva jaja u tavi. Opet mu stoji dok ulje poskoči, a bjelice se počnu stvrdnjavati. Kad su gotove, položio ih je plohom i počeo pržiti dva raška slanine. Jednom kad postanu dovoljno hrskavi, skida ih sa tave, stavlja ih na tanjur i započinju jesti.

Eduardo djeluje na malo drugačiji način. Dok se kruh peče, već je počeo pržiti jaja i slaninu. Umjesto da čeka da jedan predmet završi s kuhanjem prije nego što prijeđete na sljedeći, on kuha više predmeta istovremeno. Krajnji rezultat je da Eduardo treba manje vremena za doručak nego Henry - a do kraja kada je Henry Blocking završio, tost i jaja su zahladnili.

To je blesava analogija, ali ilustrira poantu.

Blokiranje funkcije sprečavaju program da radi bilo što drugo dok taj određeni zadatak ne bude završen. Ako želite višestruko akcije da se dogodi u isto vrijeme, jednostavno ne možete koristiti odgoditi().

Konkretno, ako vaš zahtjev zahtijeva stalno prikupljanje podataka s priključenih senzora, trebali biste paziti da izbjegavate upotrebu odgoditi() funkciju, jer apsolutno pauzira sve.

srećom, odgoditi() To nije jedini način na koji vaš program čeka da kodira Arduino.

Upoznajte Millis ()

millis () funkcija obavlja jedan zadatak. Kada je pozvan, vraća se (kao a dugo datatype) broj milisekundi koji su protekli od prvog pokretanja programa. Pa, zašto je to korisno?

Jer, koristeći malo jednostavne matematike, možete lako “vrijeme” aspekte vašeg programa bez utjecaja na njegov rad. Slijedi osnovna demonstracija kako millis () djeluje. Kao što ćete vidjeti, program će uključiti LED svjetlo u trajanju od 1000 milisekundi (jednu sekundu), a zatim ga isključiti. Ali presudno je da to čini na način koji ne blokira.

Pogledajmo sada kako to funkcionira s Arduinom.

Ovaj program - koji se u velikoj mjeri temelji na jednom iz službene Arduino dokumentacije - djeluje oduzimajući prethodno snimljeno vrijeme od trenutnog vremena. Ako je ostatak (tj. Vrijeme proteklo od posljednjeg snimanja vremena) veće od intervala (u ovom slučaju 1000 milisekundi), program ažurira previousTime promjenljivo u trenutno vrijeme i uključuje ili isključuje LED.

A zato što je ne blokira, bilo koji kôd koji se nalazi izvan tog prvog ako izjava treba raditi normalno.

Jednostavno, zar ne? Primjetite kako smo stvorili varijablu Trenutno vrijeme kao an nepotpisan dugo. nepotpisan vrijednost jednostavno znači da nikad ne može biti negativna; to radimo tako da je maksimalni broj koji možemo pohraniti veći. Prema zadanom su numeričke varijable potpisane, što znači jednu “bit” memorije za tu varijablu koristi se za spremanje je li vrijednost pozitivna ili negativna. Specificirajući da će biti samo pozitivno, imamo još jedan dodatni zalogaj za igru.

prekida

Do sada smo naučili o jednom od načina kako pristupiti vremenu u našem Arduino programu koji je bolji od odgoditi(). Ali postoji još jedan, mnogo bolji način, ali složeniji: prekida. Prednost im je što vam omogućuju precizno određivanje vremena vašeg Arduino programa i brzo reagiranje na vanjski ulaz, ali u an asinhron držanje.

To znači da se pokreće s glavnim programom, neprestano čekajući da se događaj dogodi, ne prekidajući tok koda. To vam pomaže efikasno reagirati na događaje, a da ne utječete na performanse Arduino procesora.

Kad se aktivira prekid, zaustavlja program ili poziva funkciju, obično poznatu kao an Prekidač za rukovanje ili an Rutina servisa prekida. Nakon što se ovo zaključi, program se vraća onome što je išao.

AVR čip koji napaja Arduino podržava samo hardverske prekide. Do njih dolazi kada ulazni pin prelazi s visokog na niski ili kad ga pokreću Arduino ugrađeni tajmeri.

Zvuči zagonetno. Zbunjujuće, čak. Ali nije. Da biste vidjeli kako djeluju i vidjeli primjere upotrebe u stvarnom svijetu, pogledajte Arduino dokumentaciju.

Ne blokirajte

koristeći millis () doduše uzima malo dodatnog rada u odnosu na upotrebu odgoditi(). Ali vjerujte mi, vaši programi će vam zahvaliti na tome, a bez njega ne možete napraviti više zadataka na Arduinu.

Ako želite vidjeti primjer millis () koristi u stvarnom Arduino projektu, provjerite noćno svjetlo Arduino Jamesa Brucea i Alarm Sunrise. Projekt alarma za noćno svjetlo i izlazak sunca Arduino noćno svjetlo i projekt alarma za izlazak sunca Danas ćemo napraviti budilicu za izlazak sunca, koja će vas lagano i polako probuditi bez pribjegavanja uvredljivom stroju za stvaranje buke.

Jeste li pronašli neku drugu funkciju blokiranja na koju bismo trebali biti oprezni? Javite mi u komentarima u nastavku, i razgovarat ćemo.

Fotografski popisi: Arduino (Daniel Spiess), kuhar (Ollie Svenson)




18.09.21 21:25
http://slkjfdf.net/ - Oeaoziam <a href="http://slkjfdf.net/">Azqopex</a> tvn.nrtu.hr.unedose.fr.llb.pb http://slkjfdf.net/
18.09.21 21:03
http://slkjfdf.net/ - Cbuwewog <a href="http://slkjfdf.net/">Etuvupix</a> aun.zlag.hr.unedose.fr.vus.to http://slkjfdf.net/
oraragegiler ([email protected])
18.09.21 20:39
http://slkjfdf.net/ - Ovirogiro <a href="http://slkjfdf.net/">Agoybelap</a> uqa.brxw.hr.unedose.fr.cud.mq http://slkjfdf.net/
18.09.21 20:15
http://slkjfdf.net/ - Ewuxihido <a href="http://slkjfdf.net/">Wuoona</a> zhs.tokm.hr.unedose.fr.wey.ha http://slkjfdf.net/
18.09.21 19:54
http://slkjfdf.net/ - Ilpewupun <a href="http://slkjfdf.net/">Hoqaawu</a> kti.sdde.hr.unedose.fr.loo.xd http://slkjfdf.net/
O modernoj tehnologiji, jednostavnoj i pristupačnoj.
Vaš vodič u svijetu moderne tehnologije. Naučite kako koristiti tehnologije i uređaje koji nas okružuju svaki dan i naučite kako otkriti zanimljivosti na Internetu.