Raadi Koodka

Casharka 14/31-3: Arduino coding millis() tusaale 3 oo leh push button

Casharka 14/31-3: Arduino coding millis() tusaale 3 oo leh push button

Ma walig doonba u baahnaatay in Arduino-kaagu uu xusuusto goorta ay wax dhaceen—sida riixitaanka badhanka—ka dibna uu tallaabo qaado wakhti sax ah ka dib, inta aad sii wadayso in barnaamijkaagu si habsami leh u shaqeeyo? Tani waa caqabad caadi ah oo ku saabsan barnaamijyada Arduino, xalkuna waa shaqada millis(). Casharkan, oo qayb ka mid ah koorsada Arduino ee Robojax, wuxuu muujinayaa tusaale wax ku ool ah: ogaanshaha haddii badhan la riixo marka labaad ka dib 5 ilbiriqsi oo dib u dhac ah oo laga bilaabo riixitaankii koowaad. Farsamadani waxay aasaas u tahay abuurista mashaariic jawaab celin leh, oo aan xannibayn, halkaas oo wakhtigu muhiim u yahay.

Baabuurka Sunfounder oo la isku daray

Qaabkan isticmaalka millis() si loo raad raaco wakhtiga iyada oo aan la joojin barnaamijka, ayaa muhiim u ah codsiyo kala duwan oo dhab ah. Halkan waxaa ah fikrado kooban oo kugu dhiirigelin kara mashaariicdaada:

  • Isku-xirnaanta Badhannada (Debounced Button Interfaces): Hirgeli nidaam halkaas oo badhan lagu hayo muddo gaar ah (tusaale, 3 ilbiriqsi) si loo shido qalab, taasoo ka hortagaysa riixitaanno shil ah.
  • Falalka Isku-xigga (Sequential Actions): Abuur nidaam halkaas oo hal dhacdo, sida kicinta dareemaha dhaqdhaqaaqa, ay diyaariso tallaabo labaad oo dhacda oo keliya haddii dhacdo kale dhacdo gudaha wakhti go'an.
  • Wakhtiyada Isdhexgalka Isticmaalaha (User Interaction Timers): Dhis mashruuc u baahan gelin "xaqiijin" (sida riixitaan badhan oo labaad) gudaha wakhti go'an si loo fuliyo shaqo muhiim ah, sida dirista amar ama bilowga matoorka.
  • Xakamaynta Dareemaha (Sensor Gating): Isticmaal calaamad koowaad oo ka timid dareeme si aad u bilowdo wakhti, inta lagu jiro kaas oo akhrinta dareeme labaad oo kala duwan loo tixgeliyo inay sax tahay ama la iska indho tiro.

Qalabka Loo Baahan Yahay

Mashruucani wuxuu isticmaalaa qaybo ka mid ah xirmada Arduino ee SunFounder 3-in-1, taas oo ah il khayr leh oo lagu baranayo. Waxaad u baahan doontaa:

  • Guddiga Arduino (Uno, Nano, iwm.)
  • Badhan riixitaan oo ku meel gaar ah
  • Fiilooyinka isku xirka (jumper wires)

Hagaha Xiritaanka

Xiritaanka tusaalahan aad ayuu u fudud yahay, mahadsantahay resistors-ka gudaha ee Arduino ee kor u jiidaya (pull-up), taasoo baabi'ineysa baahida resistor dibadeed. (Fiidiyowga 08:29)

  • Ku xir hal lug oo ka mid ah badhanka riixitaanka ee GND pin-ka Arduino.
  • Ku xir lugta kale ee badhanka riixitaanka ee pin-ka dhijitaalka ah ee 2 ee Arduino.

Adigoo isticmaalaya INPUT_PULLUP, pin-ka waxaa gudaha loogu xiraa 5V, sidaas darteed wuxuu akhriyaa HIGH si caadi ah. Marka badhanka la riixo, wuxuu ku xiraa pin-ka GND, taasoo keeneysa inuu akhriyo LOW. Tani waa caqliga aan ku isticmaali doonno koodhka.

Sharaxaadda Koodhka

Xudunta mashruucan waa caqliga raad raaca riixitaanka badhanka koowaad ka dibna hubiya riixitaan labaad ka dib muddo gaar ah. Koodhku waxaa loo qaabeeyey inuu noqdo mid aan xannibayn, taasoo la macno ah inuusan joojinayn fulinta hawlo kale oo ku jira loop()-kaaga.

Dusha qoraalka (sketch), waxaad ka heli doontaa doorsoomayaasha muhiimka ah ee isticmaaluhu beddeli karo, kuwaas oo xakameynaya habdhaqanka wakhtiga:

unsigned long event = 5000;// 5 ilbiriqsi
unsigned long buttonPushed =0;
  • event: Kani waa doorsoome wakhti oo muhiim ah. Wuxuu dejiyaa muddada dib u dhaca ee milliseken. Tusaalahan, waxaa loo dejiyay 5000, taas oo u dhiganta 5 ilbiriqsi. Waxaad beddeli kartaa qiimahan si loo waafajiyo baahida mashruucaaga.
  • buttonPushed: Doorsoomahan waxaa loo isticmaalaa calaamad iyo wakhti la xusuusto. Wuxuu ka bilaabmaa 0 waxaana loo cusboonaysiiyaa qiimaha millis() markii ugu horreysay ee badhanka la riixo. Wakhtigan kaydsan ayaa markaas loo isticmaalaa in lagu xisaabiyo farqiga hubinta riixitaanka labaad.

Caqliga ku jira shaqada loop() wuxuu u shaqeeyaa laba heerar. Marka hore, wuxuu akhriyaa xaaladda badhanka, haddii la riixo markii ugu horreysay (pb == LOW && buttonPushed == 0), wuxuu duubaa wakhtiga hadda jira iyada oo loo marayo millis() gudaha doorsoomaha buttonPushed. Heerka labaad wuxuu hubiyaa haddii badhanka wali la riixayo iyo haddii riixitaan koowaad la duubay. Haddii ay sidaas tahay, wuxuu xisaabiyaa farqiga wakhtiga ee u dhexeeya wakhtiga hadda iyo wakhtiga riixitaanka koowaad. Haddii farqigani uu ka weyn yahay ama la mid yahay wakhtigaaga event, wuxuu fuliyaa tallaabada—kiiskan, daabacaadda farriin ku saabsan Kormeerka Taxanaha (Serial Monitor).

Muuujinta Mashruuca Tooska ah

Fiidiyowga, koodhka waxaa lagu shubaa Arduino, waxaana la furayaa Kormeerka Taxanaha si loo arko habdhaqanka. (Fiidiyowga 16:03) Waxaad arki doontaa qiimaha millis() oo si joogto ah u daabacanaya, isagoo muujinaya wakhtiga tan iyo markii barnaamijku bilaabmay. Markaad riixdo badhanka markii ugu horreysay, farriin sida Riixitaankii koowaad wuxuu ahaa:5019 ayaa la daabacaa. Haddii aad riixdo badhanka mar labaad oo aad hayso in ka badan 5 ilbiriqsi laga bilaabo riixitaankii koowaad, farriinta Tallaabo ka dib 5 ilbiriqsi ee riixitaanka koowaad ayaa la daabacaa. Tani waxay muujineysaa in tallaabada lagu kiciyo oo keliya marka riixitaanka labaad uu dhaco ka dib dib u dhaca go'an ee dhammaaday.

Awoodda habkan ayaa ah in xariiqda Serial.println(millis()) ee dusha loop-ka ay sii socoto iyada oo aan la joojin, taasoo caddaynaysa in caqliga wakhtigu uusan xannibin koodhka kale ee fulinaya. Tani waa faa'iidada aasaasiga ah ee isticmaalka millis() marka loo eego shaqada delay().

Mashaariic la xiriira oo ka yimid fiidiyowgan

Cutubyada

  • [00:00] Hordhaca millis() iyo koorsada
  • [01:19] Waa maxay millis() iyo sababta loo isticmaalo?
  • [03:06] Tusaalaha ugu horreeya ee la taaban karo: daabacaadda millis()
  • [05:46] Isticmaalka millis() si loo kiciyo dhacdo ka dib 5 ilbiriqsi
  • [08:29] Tusaale 2: Ficil badhanka riix oo leh daahin 5 ilbiriqsi ah
  • [12:14] Tusaale 3: Ogaanshaha riixista badhanka labaad ka dib daahin
  • [17:20] Hordhaca shaqada map()
  • [19:47] Tusaale la taaban karo oo ku saabsan qiyaasidda boqolleyda iftiinka LED

Sawirro

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
Luqadda: 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");
      }
  }
  
}

Kheyraadka & Tixraacyada

Faylasha📁

Buugga Isticmaalaha