Sisukord:

Arduino ajastusmeetodid millidega (): 4 sammu
Arduino ajastusmeetodid millidega (): 4 sammu

Video: Arduino ajastusmeetodid millidega (): 4 sammu

Video: Arduino ajastusmeetodid millidega (): 4 sammu
Video: Programmeerimine täiesti algajatele 1: Pythoni install 2024, Juuli
Anonim
Arduino ajastusmeetodid Millisega ()
Arduino ajastusmeetodid Millisega ()

Selles artiklis tutvustame millis (); funktsiooni ja kasuta seda erinevate ajastamisnäidete loomiseks.

Millis? Mitte midagi pistmist huulepulgadega … loodetavasti tundsite milli kui tuhandiku kümnendiku numbrilist eesliidet; see on mõõtühiku korrutamine 0,001 -ga (või kümnega negatiivse 3 astmeni).

Huvitav on see, et meie Arduino süsteemid loevad millisekundeid (tuhandeid sekundeid) jooksva visandi algusest kuni loenduse maksimaalse arvuni, mida saab salvestada muutujatüüpi allkirjata pikkusega (32-bitine [nelja baidi] täisarv -mis jääb vahemikku null kuni (2^32) -1. (2^32) -1 ehk 4294967295 millisekundit teisendatakse 49.71027 paaritu päevaks.

Loendur lähtestatakse, kui Arduino lähtestatakse, see saavutab maksimaalse väärtuse või laaditakse üles uus visand. Loenduri väärtuse saamiseks konkreetsel hetkel helistage lihtsalt funktsioonile, näiteks:

algus = millis ();

Kus algus on allkirjastamata pikk muutuja. Siin on väga lihtne näide, mis näitab millis () toimimist:

/ * millis () demonstratsioon */

allkirjata pikk algus, lõpetatud, möödunud;

tühine seadistus ()

{Serial.begin (9600); }

tühine tsükkel ()

{Serial.println ("Alusta…"); algus = millis (); viivitus (1000); valmis = millis (); Serial.println ("Valmis"); möödunud = lõpetatud-algus; Serial.print (möödunud); Serial.println ("millisekundit möödas"); Serial.println (); viivitus (500); }

Visand salvestab alguses praeguse millisekundi, seejärel ootab sekundi, seejärel salvestab uuesti millisektsiooni väärtuse. Lõpuks arvutab see viivituse aja. Järgmisel jadamonitori ekraanipildil näete, et kestus ei olnud alati täpselt 1000 millisekundit, nagu on näidatud pildil.

Samm 1:

Pilt
Pilt

Lihtsamalt öeldes kasutab millisfunktsioon teie Arduino südames ATmega mikrokontrolleri sisemist loendurit. See loendur suurendab iga taktsüklit - mis juhtub (tavalises Arduino ja ühilduvates seadmetes) taktsagedusel 16 Mhz. Seda kiirust kontrollib kristall Arduino tahvlil (hõbedane asi, millele on tembeldatud T16.000).

2. samm:

Pilt
Pilt

Kristalli täpsus võib varieeruda sõltuvalt välistemperatuurist ja kristalli enda taluvusest. See omakorda mõjutab millimeetritulemuse täpsust. Anekdootne kogemus on näidanud, et aja täpsuse nihkumine võib olla umbes kolm või neli sekundit kahekümne nelja tunni jooksul.

Kui kasutate tahvlit või oma versiooni, mis kasutab kristalli asemel keraamilist resonaatorit, pange tähele, et need pole nii täpsed ja toovad kaasa kõrgema triivitase. Kui vajate ajastuse täpsust palju kõrgemal tasemel, kaaluge konkreetseid taimeriga IC -sid, näiteks Maxim DS3231.

Nüüd saame milliseid kasutada erinevate ajastusfunktsioonide jaoks. Nagu eelmises visandis näidatud, saame kulunud aega arvutada. Selle idee edasiviimiseks teeme lihtsa stopperi. See võib olla nii lihtne või keeruline kui vajalik, kuid sel juhul läheme lihtsa poole.

Riistvara vaatenurgast on meil kaks nuppu-Start ja Stop-koos 10k oomiste allatõmmatavate takistitega, mis on ühendatud vastavalt digitaalsete kontaktidega 2 ja 3. Kui kasutaja vajutab käivitamist, märgib eskiis millisektsiooni väärtuse - siis pärast stopp -nupu vajutamist märgib visand uuesti millisektsiooni väärtuse, arvutab ja kuvab kulunud aja. Seejärel saab kasutaja protsessi kordamiseks vajutada nuppu Start või värskendatud andmete saamiseks peatada. Siin on visand:

/* Super-lihtne stopper, kasutades millis (); */

allkirjata pikk algus, lõpetatud, möödunud;

tühine seadistus ()

{Serial.begin (9600); pinMode (2, INPUT); // stardinupp pinMode (3, INPUT); // stopp -nupp Serial.println ("Start/reset jaoks vajutage 1, möödunud aega 2"); }

tühi kuvaResult ()

{ujuk h, m, s, ms; allkirjastamata kaua; möödunud = lõpetatud-algus; h = int (möödunud/3600000); üle = möödunud%3600000; m = int (üle/60000); üle = üle%60000; s = int (üle/1000); ms = üle%1000; Serial.print ("Toores kulunud aeg:"); Serial.println (möödunud); Serial.print ("Kulunud aeg:"); Seeriatrükk (h, 0); Serial.print ("h"); Seeriaprint (m, 0); Serial.print ("m"); Seeriatrükk (s, 0); Serial.print ("s"); Seeriatrükk (ms, 0); Serial.println ("ms"); Serial.println (); }

tühine tsükkel ()

{if (digitalRead (2) == HIGH) {start = millis (); viivitus (200); // debounce jaoks Serial.println ("Alustatud …"); } if (digitalRead (3) == HIGH) {valmis = millis (); viivitus (200); // debounce displayResult (); }}

Kõnesid viivitamiseks () kasutatakse lülitite väljalülitamiseks - need on valikulised ja nende kasutamine sõltub teie riistvarast. Pilt on näide visandi seeriamonitooriumi väljundist - stopper on käivitunud ja seejärel nuppu kaks vajutatakse kuue korra jooksul.

Samm: spidomeeter…

Image
Image

Kui teil oleks andur kindla vahemaa alguses ja lõpus, saaks kiirust arvutada: kiirus = vahemaa ÷ aeg.

Spidomeetri saate teha ka ratastega liikumisvormi jaoks, näiteks jalgratta jaoks. Praegu pole meil jalgratast, millega segi ajada, kuid selle protsessi kirjeldame siiski - see on üsna lihtne. (Vastutusest loobumine - tehke seda omal vastutusel jne.)

Kõigepealt vaatame läbi vajaliku matemaatika. Peate teadma ratta ümbermõõtu. Riistvara - vajate andurit. Näiteks - pilliroo lüliti ja magnet. Pidage pilliroo lülitit tavapäraselt avatavaks nupuks ja ühendage nagu tavaliselt 10k oomise tõmbetakistiga.

Teised võivad kasutada saaliefekti andurit-igaüks ise). Meenutage matemaatikaklassist ümbermõõdu arvutamiseks - kasutage valemit: ümbermõõt = 2πr, kus r on ringi raadius.

Nüüd, kui teil on ratta ümbermõõt, saab seda väärtust pidada meie fikseeritud vahemaaks ja seetõttu saab kiirust arvutada täispöörde vahel kulunud aja mõõtmisega.

Teie andur-kui see on paigaldatud-peaks toimima samal viisil nagu tavaliselt avatud nupp, mida vajutatakse iga pöörlemise ajal. Meie visand mõõdab iga andurilt saadud impulsi vahel kulunud aega.

Selleks on meie näites anduri väljund ühendatud digitaalse tihvtiga 2 - see käivitab kiiruse arvutamiseks katkestuse. Joonisel kuvatakse kiirus tavalisel I2C-liidese LCD-moodulil. Soovitatav on I2C liides, kuna selleks on vaja ainult 4 juhtmest Arduino plaadilt LCD -ekraanile - mida vähem juhtmeid, seda parem.

Siin on teie tutvumiseks visand:

/*Põhikiirusmõõtur milliste abil (); */

#include "Wire.h" // I2C siinide LCD jaoks

#include "LiquidCrystal_I2C.h" // I2C siinide LCD -mooduli jaoks - https://bit.ly/m7K5wt LiquidCrystal_I2C lcd (0x27, 16, 2); // määrake 16 -märgilise ja kaherealise ekraani jaoks LCD -aadressiks 0x27

ujuk start, lõpetatud;

ujuk möödas, aeg; float circMetric = 1,2; // ratta ümbermõõt anduri asendi suhtes (meetrites) float circImperial; // kasutades 1 kilomeetrit = 0,621371192 miili ujuk speedk, speedm; // hoiab arvutatud kiirusväärtusi meetermõõdustikus ja keiserlikus

tühine seadistus ()

{attachInterrupt (0, speedCalc, RISING); // katkestus kutsutud, kui andurid saadavad digitaalse 2 kõrge (iga ratta pöörlemine) start = millis (); // LCD seadistamine lcd.init (); // initsialiseeri lcd lcd.backlight (); // LCD taustvalgustuse sisselülitamine lcd.clear (); lcd.println ("Kanna kiivrit!"); viivitus (3000); lcd.clear (); Seriaalne algus (115200); circImperial = circMetric*.62137; // teisendage mõõdik MPH arvutuste jaoks imperiaalseks}

tühine kiirusCalc ()

{möödunud = millis ()-algus; algus = millis (); speedk = (3600*circMetric)/möödas; // km/h speedm = (3600*circImperial)/möödunud; // Miili tunnis }

tühine tsükkel ()

{lcd.setCursor (0, 0); lcd.print (int (speedk)); lcd.print ("km/h"); lcd.print (int (kiirusm)); lcd.print ("MPH"); lcd.setCursor (0, 1); lcd.print (int (möödunud)); lcd.print ("ms/rev"); viivitus (1000); // kohandage oma eelistuste järgi värelemise minimeerimiseks}

Ei toimu nii palju - iga kord, kui ratas lõpetab ühe pöörde, läheb anduri signaal madalalt kõrgele - vallandab katkestuse, mis kutsub funktsiooni speedCalc ().

See võtab lugemise millis (float circMetric = 1,2;

ja seda mõõdetakse meetrites). Lõpuks arvutab see kiiruse km/h ja MPH. Katkestuste vahel kuvab visand LCD -ekraanil värskendatud kiiruse andmed ja iga pöörde töötlemata aja väärtuse. Reaalses elus ei usu ma, et keegi paigaldaks jalgrattale LCD -ekraani, võib -olla oleks LED -ekraan asjakohasem.

Vahepeal näete selle näite toimimist järgmises lühikeses videoklipis. Jalgrattaratta ja pilliroo lüliti/magneti kombinatsiooni asemel olen ühendanud funktsioonigeneraatori ruutlaine väljundi katkestusnõelaga, et simuleerida anduri impulsse, nii et saate aimu selle toimimisest.

4. samm:

See võtab peaaegu millise () kasutamise esialgu kokku. Seal on ka micros (); funktsioon, mis loeb mikrosekundeid.

Nii et teil on see - veel üks praktiline funktsioon, mis võimaldab Arduino maailma kaudu lahendada rohkem probleeme. Nagu alati, on nüüd teie ja teie kujutlusvõime otsustada leida midagi, mida kontrollida või teiste häbipostide juurde asuda.

Selle postituse tõi teile pmdway.com - kõik tegijatele ja elektroonikahuvilistele, tasuta kohaletoimetamine kogu maailmas.

Soovitan: