Tafuta Msimbo

Somo la 14/31-2: Mfano wa 2 wa usimbaji wa Arduino millis() na tukio

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.

Gari la Sunfounder limekusanywa

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:

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

Bilder

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
917-Lesson 14/31-2: Arduino coding millis() example 2 with event
Språk: C++
/*
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

Resurser och referenser

Filer📁

Användarhandbok