Tafuta Msimbo

Somo la 14/31-3: Mfano wa 3 wa coding ya Arduino millis() na kitufe cha kushinikiza

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.

Gari la Sunfounder limekusanywa

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 kuwa 5000, 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 kwa 0 na kinasasishwa kuwa thamani ya millis() 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

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

Bilder

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
918-Lesson 14/31-3: Arduino coding millis() example 3 with push button
Språk: C++
/*
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");
      }
  }
  
}

Resurser och referenser

Filer📁

Användarhandbok