Somo la 14/31-3: Mfano wa 3 wa coding ya Arduino millis() na kitufe cha kushinikiza
Je, umewahi kuhitaji Arduino yako ikumbuke lini kitu kilitokea—kama vile kubonyeza kitufe—na kisha kuchukua hatua kwa muda sahihi baadaye, huku programu yako yote ikiendelea kufanya kazi vizuri? Hii ni changamoto ya kawaida katika programu za Arduino, na suluhisho ni kazi ya millis(). Mafunzo haya, sehemu ya kozi ya Robojax ya Arduino, yanaonyesha mfano wa vitendo: kugundua kama kitufe cha kushinikiza kimebonyezwa mara ya pili baada ya muda wa sekunde 5 kupita tangu kubonyeza kwa mara ya kwanza. Mbinu hii ni msingi wa kuunda miradi inayoitikia vizuri na isiyozuia, ambapo muda ni muhimu sana.
Mfumo huu wa kutumia millis() kufuatilia muda bila kusimamisha programu ni muhimu kwa matumizi mengi ya ulimwengu halisi. Hapa kuna mawazo machache ya kuhamasisha miradi yako mwenyewe:
- Violesura vya Kitufe Vilivyopunguza Kelele: Tekeleza mfumo ambapo kitufe lazima kibonyezwe kwa muda maalum (kwa mfano, sekunde 3) ili kuwasha kifaa, kuzuia kubonyeza kwa bahati mbaya.
- Vitendo Vinavyofuatana: Unda mfumo ambapo tukio moja, kama vile kichocheo cha sensor ya mwendo, huwezesha kitendo cha pili kinachotokea tu ikiwa tukio lingine litatokea ndani ya muda fulani.
- Vipima Muda vya Mwingiliano wa Mtumiaji: Jenga mradi unaohitaji ingizo la "uthibitisho" (kama vile kubonyeza kitufe mara ya pili) ndani ya muda uliowekwa ili kutekeleza kazi muhimu, kama vile kutuma amri au kuanzisha motor.
- Kuweka Mlango wa Sensor: Tumia ishara ya kwanza kutoka kwa sensor kuanza dirisha la muda, ambapo usomaji wa sensor ya pili tofauti unachukuliwa kuwa halali au unapuuzwa.
Vifaa Vinavyohitajika
Mradi huu unatumia vipengele kutoka kwa kit cha SunFounder 3-in-1 cha Arduino, ambacho ni rasilimali nzuri ya kujifunza. Utahitaji:
- Bodi ya Arduino (Uno, Nano, n.k.)
- Kitufe cha kushinikiza cha muda mfupi
- Waya za kurukia
Mwongozo wa Uunganishaji
Uunganishaji wa mfano huu ni rahisi sana, kutokana na resistors za ndani za kuvuta-juu za Arduino, ambazo huondoa hitaji la resistor ya nje. (Katika video kwenye dakika ya 08:29)
- Unganisha mguu mmoja wa kitufe cha kushinikiza kwenye pini ya GND ya Arduino.
- Unganisha mguu mwingine wa kitufe cha kushinikiza kwenye pini ya digital 2 ya Arduino.
Kwa kutumia INPUT_PULLUP, pini inaunganishwa ndani na 5V, kwa hiyo inasoma HIGH kwa kawaida. Wakati kitufe kinapobonyezwa, kinaunganisha pini na GND, na kusababisha kusoma LOW. Hii ni mantiki tutakayotumia katika msimbo.
Maelezo ya Msimbo
Kiini cha mradi huu ni mantiki inayofuatilia kubonyeza kwa kwanza kwa kitufe na kisha kuangalia kubonyeza kwa pili baada ya muda maalum. Msimbo umeundwa kuwa usiozuia, kumaanisha hautasimamisha utekelezaji wa kazi nyingine katika loop() yako.
Juu ya mchoro, utapata vigezo muhimu vinavyoweza kubadilishwa na mtumiaji vinavyodhibiti tabia ya muda:
unsigned long event = 5000;// sekunde 5
unsigned long buttonPushed =0;
event: Hiki ni kigezo muhimu cha muda. Kinaweka muda wa kuchelewa kwa millisecond. Katika mfano huu, kimewekwa kuwa5000, ambayo ni sawa na sekunde 5. Unaweza kubadilisha thamani hii kwa muda mwingine wowote ili kufaa mahitaji ya mradi wako.buttonPushed: Kigezo hiki kinatumika kama bendera na muda uliorekodiwa. Huanza kwa0na kinasasishwa kuwa thamani yamillis()mara ya kwanza kitufe kinapobonyezwa. Muda huu uliohifadhiwa unatumika kuhesabu tofauti kwa kuangalia kubonyeza kwa pili.
Mantiki katika kazi ya loop() inafanya kazi katika hatua mbili. Kwanza, inasoma hali ya kitufe na, ikiwa imebonyezwa kwa mara ya kwanza (pb == LOW && buttonPushed == 0), inarekodi muda wa sasa kupitia millis() kwenye kigezo cha buttonPushed. Hatua ya pili inaangalia ikiwa kitufe bado kimebonyezwa na ikiwa kubonyeza kwa kwanza kumerekodiwa. Ikiwa ndivyo, inahesabu tofauti ya muda kati ya muda wa sasa na muda wa kubonyeza kwa kwanza. Ikiwa tofauti hii ni kubwa au sawa na muda wako wa event, inatekeleza kitendo—katika kesi hii, kuchapisha ujumbe kwenye Serial Monitor.
Maonyesho ya Moja kwa Moja ya Mradi
Katika video, msimbo unapakiwa kwenye Arduino, na Serial Monitor inafunguliwa kuona tabia. (Katika video kwenye dakika ya 16:03) Utaona thamani ya millis() ikichapishwa kila wakati, ikionyesha muda tangu programu ilipoanza. Unapobonyeza kitufe kwa mara ya kwanza, ujumbe kama First push at:5019 unachapishwa. Ukibonyeza kitufe tena na kukishikilia kwa zaidi ya sekunde 5 tangu kubonyeza kwa kwanza, ujumbe Action after 5 seconds of first push unachapishwa. Hii inaonyesha kwamba kitendo kinachochelewa tu wakati kubonyeza kwa pili kunatokea baada ya muda maalum kupita.
Nguvu ya mbinu hii ni kwamba mstari wa Serial.println(millis()) juu ya loop unaendelea kufanya kazi bila kukatizwa, ikithibitisha kwamba mantiki ya muda haizuii msimbo mwingine kutekelezwa. Hii ni faida ya msingi ya kutumia millis() badala ya kazi ya delay().
Miradi inayohusiana kutoka kwenye video hii
- Somo la 14/31-1: Arduino Millis (bila kuchelewesha) na kazi za map | SunFounder Robojax
- Somo la 14/31-2: Mfano wa 2 wa usimbaji wa Arduino millis() na tukio
- Somo la 14/31-4: Mfano wa 1 wa usimbaji wa Arduino map()
- Somo la 14/31-5: Mfano wa 2 wa usimbaji wa Arduino map()
Sura
- [00:00] Utangulizi wa millis() na kozi
- [01:19] millis() ni nini na kwa nini uitumie?
- [03:06] Mfano wa kwanza wa vitendo: kuchapisha millis()
- [05:46] Kutumia millis() kuanzisha tukio baada ya sekunde 5
- [08:29] Mfano wa 2: Kitendo cha kitufe cha kushinikiza na kucheleweshwa kwa sekunde 5
- [12:14] Mfano wa 3: Kugundua kubonyeza kitufe cha pili baada ya kucheleweshwa
- [17:20] Utangulizi wa kazi ya map()
- [19:47] Mfano wa vitendo wa kupanga asilimia za mwangaza wa LED
/*
Lesson 14/31: Arduino coding millis() example 3 with push button
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
unsigned long buttonPushed =0;
void setup() {
Serial.begin(9600);//initialize serial monitor
Serial.println("Introduction to millis");
pinMode(2,INPUT_PULLUP);
}
void loop() {
// ilmoFan.com example-2 millis()
Serial.println(millis());
int pb = digitalRead(2);// read pin 2
if(pb ==LOW && buttonPushed ==0)
{
buttonPushed =millis();
Serial.print("First push at:");
Serial.println(buttonPushed);
}
if( pb ==LOW && buttonPushed >0 )
{
unsigned long difference = millis()- buttonPushed;
if( difference >= event)
{
Serial.println("Action after 5 seconds of first push");
}
}
}
Tänker att du kanske behöver
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Resurser och referenser
-
DokumentationDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
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