Somo la 14/31-2: Mfano wa 2 wa usimbaji wa Arduino millis() na tukio
Katika mafunzo haya, utajifunza jinsi ya kutumia kazi ya Arduino millis() kuanzisha kitendo tu baada ya muda maalum kupita, bila kuzuia sehemu nyingine ya programu yako. Hii ni mbinu ya msingi ya kuunda miradi ya Arduino inayoitikia vizuri ambapo kazi nyingi zinahitaji kuendeshwa kwa wakati mmoja, kama vile kumulika LED wakati unasoma sensorer au kufuatilia mibonyezo ya vitufe. Mfano huu mahususi unazingatia kuanzisha tukio baada ya sekunde tano, lakini mantiki hiyo inaweza kutumika katika hali nyingi za ulimwengu wa kweli.
Hapa kuna mifano michache ya vitendo ya jinsi unavyoweza kutumia muundo huu katika miradi yako mwenyewe:
- Uanzishaji wa kuchelewa: Washa feni au pampu tu baada ya mfumo kuendesha kwa muda uliowekwa.
- Vifungo vya usalama: Hitaji kitufe kibonyezwe na kishikiliwe kwa muda kabla ya kufanya kitendo cha hatari, kama kuwasha motor.
- Tahadhari za muda: Anzisha kengele au arifa ikiwa usomaji wa sensa haujabadilika ndani ya muda fulani.
- Vipima muda visivyozuia: Unda kipima muda cha "watchdog" kinachoweka upya kifaa ikiwa hakijibu.
Tatizo kuu ambalo hili linatatua ni kikomo cha kazi ya delay(). Unapotumia delay(5000), Arduino huacha kutekeleza msimbo mwingine wowote kwa sekunde hizo tano. Hii ni sawa kwa michoro rahisi, lakini inakuwa tatizo kubwa katika miradi ngumu zaidi ambapo unahitaji kusoma sensorer, kusasisha maonyesho, au kusikiliza mibonyezo ya vitufe wakati unasubiri. Kazi ya millis(), ambayo huhesabu millisecondi tangu bodi iwashwe, inakuwezesha kuangalia muda bila kusimamisha programu.
Vifaa Vinavyohitajika
- Bodi ya Arduino (Uno, Nano, Mega, n.k.)
- Kitufe cha kushinikiza
- Waya za kurukia
Mwongozo wa Uunganishaji
Uunganishaji wa mfano huu ni rahisi sana. Unatumia resistor ya ndani ya kuvuta-juu, kwa hivyo hakuna resistor ya nje inayohitajika kwa kitufe.
- Unganisha mguu mmoja wa kitufe cha kushinikiza kwenye pini ya GND kwenye Arduino.
- Unganisha mguu mwingine wa kitufe cha kushinikiza kwenye pini ya dijiti 2 kwenye Arduino.
Kwa sababu tunatumia INPUT_PULLUP katika msimbo, pini itasoma HIGH wakati kitufe hakijabonyezwa na LOW wakati kimebonyezwa, ikiunganisha pini na ardhi. (katika video saa 08:29)
Kuelewa Msimbo
Msimbo huu unaonyesha kipima muda rahisi cha tukio. Programu inaendelea kuchapisha thamani ya sasa ya millis() kwenye Serial Monitor. Wakati kitufe cha kushinikiza kimebonyezwa na kushikiliwa, na Arduino imekuwa ikiendesha kwa angalau sekunde 5, itachapisha "Take action" kwenye Serial Monitor. Jambo muhimu ni kwamba ukaguzi wa millis() hauzuii uchapishaji unaoendelea wa muda.
Hebu tuchambue sehemu zinazoweza kusanidiwa na mtumiaji za msimbo:
unsigned long event = 5000;// 5 seconds
Hii ndiyo kigezo muhimu zaidi cha kusanidi. Inafafanua muda wa "tukio" lako katika millisecondi. Katika mfano huu, imewekwa kuwa 5000, ambayo ni sawa na sekunde 5. Kubadilisha kuchelewa, badilisha nambari hii tu. Kwa mfano, kuiweka kuwa 10000 kungefanya kitendo kianze baada ya sekunde 10. Ni muhimu kutumia aina ya data ya unsigned long, kwani thamani ya millis() inaweza kukua kubwa sana na hatimaye itazidi thamani ya juu ya kigezo cha kawaida cha int, na kusababisha makosa katika ulinganisho. (katika video saa 05:46)
pinMode(2,INPUT_PULLUP);
Mstari huu unasanidi pini ya dijiti 2 kama ingizo na kuamsha resistor yake ya ndani ya kuvuta-juu. Hii ni hatua muhimu ya usanidi inayokuwezesha kuunganisha kitufe bila resistor ya nje. Pini itasoma HIGH kwa chaguo-msingi na itaenda LOW wakati kitufe kimebonyezwa, ikiunganisha na ardhi. Ikiwa unataka kutumia pini tofauti, badilisha nambari 2 hapa na katika mstari wa digitalRead(2) ndani ya kitanzi. (katika video saa 08:46)
Mantiki ndani ya loop() ni rahisi. Inasoma hali ya kitufe. Ikiwa kitufe kimebonyezwa (pb == LOW), basi inaangalia ikiwa muda wa sasa (millis()) ni mkubwa kuliko au sawa na muda wako wa event uliofafanuliwa. Ikiwa masharti yote mawili ni kweli, inachapisha ujumbe wa kitendo. Sehemu nyingine ya kitanzi, inayochapisha muda, inaendelea kuendesha bila kukatizwa, ikionyesha nguvu ya millis() kuliko delay().
Mfano huu unaangalia muda tangu Arduino ianze. Mfano wa tatu katika mfululizo wa video unajenga juu ya hili kwa kurekodi muda wa kubonyeza kwa kwanza kwa kitufe na kuanzisha kitendo tu ikiwa kubonyeza kwa pili kunatokea angalau sekunde 5 baadaye. Mantiki hiyo imefunikwa katika Somo la 14/31-3: Arduino coding millis() mfano 3 na kitufe cha kushinikiza.
Maonyesho ya Mradi wa Moja kwa Moja
Mara tu unapopakia msimbo na kufungua Serial Monitor (kwa 9600 baud), utaona mkondo unaoendelea wa nambari, unaowakilisha millisecondi tangu bodi iwashwe. Ikiwa utabonyeza na kushikilia kitufe cha kushinikiza kabla ya sekunde 5 kupita, hakuna kitakachotokea. Hata hivyo, ikiwa utabonyeza na kushikilia kitufe baada ya alama ya sekunde 5, utaona ujumbe "Take action" ukichapishwa kwenye Serial Monitor. Kitendo kitaendelea kuchapishwa mradi tu kitufe kimeshikiliwa. Hii inaonyesha kipima muda kisichozuia kinachoruhusu msimbo mwingine (uchapishaji) kuendesha vizuri. (katika video saa 10:52)
Miradi yanayohusiana na video hii
Video hii ni sehemu ya mfululizo wa sehemu nyingi kuhusu kazi za muda na ramani za Arduino. Chunguza mafunzo mengine yaliyoundwa kutoka kwenye nyenzo hii hii ya chanzo:
- Somo la 14/31-1: Arduino Millis (hakuna kuchelewesha) na kazi za ramani | SunFounder Robojax
- Somo la 14/31-3: Mfano wa 3 wa kuandika millis() ya Arduino na kitufe cha kushinikiza
- Somo la 14/31-4: Mfano wa 1 wa kuandika map() ya Arduino
- Somo la 14/31-5: Mfano wa 2 wa kuandika map() ya Arduino
Sura
- [00:00] Utangulizi wa millis() na Kifurushi cha SunFounder
- [01:19] millis() ni nini na kwa nini kitumie badala ya delay()?
- [03:06] Maonyesho ya vitendo: kuchapisha thamani ya millis()
- [05:46] Kuunda tukio na millis() na unsigned long
- [08:29] Kuunganisha na kuandika kitufe cha kushinikiza na INPUT_PULLUP
- [10:52] Kuendesha mfano wa tukio na kitufe cha kushinikiza
- [12:14] Muhtasari wa mfano wa 3: kugundua kubonyeza kitufe cha pili
- [17:20] Utangulizi wa kazi ya map()
- [19:47] Kuandika na kuonyesha kazi ya map() na LED
/*
Lesson 14/31: Arduino coding millis() example 2 with event
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
unsigned long event = 5000;// 5 seconds
void setup() {
Serial.begin(9600);//initialize serial monitor
Serial.println("Introduction to millis");
pinMode(2,INPUT_PULLUP);
}
void loop() {
// Robojax.com millis() example 1
Serial.println(millis());
int pb = digitalRead(2);// read pin 2
if(pb ==LOW)
{
if(millis() >= event)
{
Serial.println("Take action");
}// if end
}// if end
}// loop end
Tänker att du kanske behöver
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
-
Annat
Resurser och referenser
-
Extern.Purchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Filer📁
Användarhandbok
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB