ኮድ ይፈልጉ

ትምህርት 14/31-3፡ አርዱኖ ኮዲንግ millis() ምሳሌ 3 በፑሽ ቁልፍ

ትምህርት 14/31-3፡ አርዱኖ ኮዲንግ millis() ምሳሌ 3 በፑሽ ቁልፍ

መቼ አርዱኖዎ የሆነ ነገር እንደተከሰተ እንዲያስታውስ እና ከዚያ በኋላ በትክክለኛ ጊዜ እርምጃ እንዲወስድ ፈልገው ያውቃሉ—እንደ ቁልፍ መጫን—ሁሉም የፕሮግራምዎ ቀሪ ክፍል በተቀላጠፈ ሁኔታ እየሰራ ሳለ? ይህ በአርዱኖ ፕሮግራሚንግ ውስጥ የታወቀ ፈተና ነው፣ እና መፍትሄው የmillis() ተግባር ነው። ይህ መማሪያ፣ የሮቦጃክስ አርዱኖ ኮርስ አካል፣ ተግባራዊ ምሳሌ ያሳያል፡ የግፊት ቁልፍ ከመጀመሪያው ጫና በኋላ የ5 ሰከንድ መዘግየት ካለፈ በኋላ ለሁለተኛ ጊዜ መጫኑን መለየት። ይህ ዘዴ ጊዜ ወሳኝ ለሆነባቸው ምላሽ ሰጪ፣ የማያግዱ ፕሮጀክቶችን ለመፍጠር መሰረታዊ ነው።

የሰንፋውንደር መኪና ተሰብስቧል

ይህ ፕሮግራሙን ሳያቆም ጊዜን ለመከታተል millis() የመጠቀም ዘዴ ለብዙ ተግባራዊ አፕሊኬሽኖች አስፈላጊ ነው። የራስዎን ፕሮጀክቶች ለማነሳሳት ጥቂት ሀሳቦች እነሆ፡

  • የተረጋገጡ የቁልፍ በይነገጾች፡ መሳሪያን ለማብራት ቁልፍ ለተወሰነ ጊዜ (ለምሳሌ 3 ሰከንድ) መያዝ የሚጠበቅበትን ስርዓት ይተግብሩ፣ ይህም ድንገተኛ ጫናዎችን ይከላከላል።
  • ተከታታይ እርምጃዎች፡ እንደ እንቅስቃሴ ዳሳሽ ቀስቅሴ ያለ አንድ ክስተት፣ በተወሰነ የጊዜ ክፍት ውስጥ ሌላ ክስተት ከተከሰተ ብቻ የሚከሰት ሁለተኛ እርምጃ የሚያስታጥቅበትን ስርዓት ይፍጠሩ።
  • የተጠቃሚ መስተጋብር ጊዜ ቆጣሪዎች፡ እንደ መልእክት መላክ ወይም ሞተር ማስጀመር ያሉ ወሳኝ ተግባራትን ለማከናወን በተወሰነ ጊዜ ውስጥ "ማረጋገጫ" ግብዓት (እንደ ሁለተኛ የቁልፍ ጫና) የሚፈልግ ፕሮጀክት ይገንቡ።
  • የዳሳሽ መከለያ፡ የጊዜ መስኮት ለመጀመር ከአንድ ዳሳሽ የመጀመሪያ ምልክት ይጠቀሙ፣ በዚህ ጊዜ ውስጥ የሁለተኛው የተለየ ዳሳሽ ንባብ ትክክለኛ ተደርጎ ወይም ችላ ይባላል።

የሚያስፈልጉ ሃርድዌሮች

ይህ ፕሮጀክት ከሰንፋውንደር 3-በ-1 አርዱኖ ኪት የተውጣጡ ክፍሎችን ይጠቀማል፣ ይህም ለመማር ጥሩ ምንጭ ነው። የሚከተሉትን ያስፈልግዎታል፡

  • የአርዱኖ ቦርድ (Uno፣ Nano፣ ወዘተ)
  • ጊዜያዊ የግፊት ቁልፍ
  • የመዝለያ ሽቦዎች

የሽቦ አገናኝ መመሪያ

የዚህ ምሳሌ ሽቦ አገናኝ በጣም ቀላል ነው፣ ምክንያቱም የአርዱኖ ውስጣዊ የመጎተት-ወደላይ ተከላካዮች ስለሆኑ ውጫዊ ተከላካይ አያስፈልግም። (በቪዲዮው በ08:29)

  • የግፊት ቁልፉን አንድ እግር ከአርዱኖው GND ፒን ጋር ያገናኙ።
  • የግፊት ቁልፉን ሌላኛው እግር ከአርዱኖው ዲጂታል ፒን 2 ጋር ያገናኙ።

INPUT_PULLUP በመጠቀም፣ ፒኑ በውስጥ ከ5V ጋር ይገናኛል፣ ስለዚህ በተለምዶ HIGH ያነባል። ቁልፉ ሲጫን፣ ፒኑን ከGND ጋር ያገናኛል፣ ይህም LOW እንዲያነብ ያደርጋል። ይህ በኮዱ ውስጥ የምንጠቀምበት አመክንዮ ነው።

የኮድ ማብራሪያ

የዚህ ፕሮጀክት ዋና ክፍል የመጀመሪያውን የቁልፍ ጫና የሚከታተል እና ከዚያ በኋላ በተወሰነ የጊዜ ክፍት ውስጥ ለሁለተኛ ጫና የሚፈትሽ አመክንዮ ነው። ኮዱ የማያግድ እንዲሆን የተነደፈ ነው፣ ይህም ማለት በloop()ዎ ውስጥ የሌሎች ተግባራትን አፈጻጸም አያቆምም።

በስኬቹ አናት ላይ፣ የጊዜ ባህሪን የሚቆጣጠሩትን ቁልፍ በተጠቃሚ የሚዋቀሩ ተለዋዋጮችን ያገኛሉ፡

unsigned long event = 5000;// 5 ሰከንድ
unsigned long buttonPushed =0;
  • event፡ ይህ ወሳኙ የጊዜ ተለዋዋጭ ነው። የመዘግየቱን ቆይታ በሚሊሰከንድ ያዘጋጃል። በዚህ ምሳሌ፣ ወደ 5000 ተዋቅሯል፣ ይህም ከ5 ሰከንድ ጋር እኩል ነው። ይህን እሴት እንደ ፕሮጀክትዎ ፍላጎት ወደ ሌላ ቆይታ መቀየር ይችላሉ።
  • buttonPushed፡ ይህ ተለዋዋጭ እንደ ባንዲራ እና የጊዜ ማህተም ያገለግላል። በ0 ይጀምራል እና ቁልፉ ለመጀመሪያ ጊዜ ሲጫን ወደ millis() እሴት ይዘመናል። ይህ የተከማቸ ጊዜ ለሁለተኛው ጫና ምርመራ ልዩነቱን ለማስላት ይጠቅማል።

loop() ተግባር ውስጥ ያለው አመክንዮ በሁለት ደረጃዎች ይሰራል። በመጀመሪያ፣ የቁልፉን ሁኔታ ያነባል እና ለመጀመሪያ ጊዜ ከተጫነ (pb == LOW && buttonPushed == 0)፣ የአሁኑን ጊዜ በmillis() ወደ buttonPushed ተለዋዋጭ ይመዘግባል። ሁለተኛው ደረጃ ቁልፉ አሁንም የተጫነ እንደሆነ እና የመጀመሪያ ጫና መመዝገቡን ያረጋግጣል። ከሆነ፣ በአሁኑ ጊዜ እና በመጀመሪያው ጫና ጊዜ መካከል ያለውን የጊዜ ልዩነት ያሰላል። ይህ ልዩነት ከevent ጊዜዎ የበለጠ ወይም እኩል ከሆነ፣ እርምጃውን ያከናውናል—በዚህ ሁኔታ፣ ወደ ሴሪያል ሞኒተር መልእክት ማተም።

የቀጥታ ፕሮጀክት ማሳያ

በቪዲዮው ውስጥ፣ ኮዱ ወደ አርዱኖው ይሰቀላል፣ እና ሴሪያል ሞኒተሩ ባህሪውን ለመመልከት ይከፈታል። (በቪዲዮው በ16:03) የmillis() እሴት ያለማቋረጥ ሲታተም ያያሉ፣ ፕሮግራሙ ከተጀመረበት ጊዜ ጀምሮ ያለውን ጊዜ ያሳያል። ቁልፉን ለመጀመሪያ ጊዜ ሲጫኑ፣ እንደ First push at:5019 ያለ መልእክት ይታተማል። ቁልፉን እንደገና ከጫኑ እና ከመጀመሪያው ጫና ከ5 ሰከንድ በላይ ከያዙት፣ Action after 5 seconds of first push የሚለው መልእክት ይታተማል። ይህ የሚያሳየው እርምጃው የሚቀሰቀሰው ሁለተኛው ጫና የተወሰነው መዘግየት ካለፈ በኋላ ሲከሰት ብቻ መሆኑን ነው።

የዚህ አቀራረብ ጥንካሬ በloop() አናት ላይ ያለው Serial.println(millis()) መስመር ያለማቋረጥ መስራቱን መቀጠሉ ነው፣ ይህም የጊዜ አመክንዮ ሌሎች ኮዶች እንዳይሰሩ እንደማያግድ ያረጋግጣል። ይህ ከdelay() ተግባር ይልቅ millis() የመጠቀም መሰረታዊ ጥቅም ነው።

ከዚህ ቪዲዮ ጋር የተያያዙ ፕሮጀክቶች

ምዕራፎች

  • [00:00] ወደ millis() እና ወደ ኮርሱ መግቢያ
  • [01:19] millis() ምንድን ነው እና ለምን እንጠቀምበታለን?
  • [03:06] የመጀመሪያ ተግባራዊ ምሳሌ፡ millis()ን ማተም
  • [05:46] ከ5 ሰከንድ በኋላ ክስተት ለማስነሳት millis()ን መጠቀም
  • [08:29] ምሳሌ 2፡ የገፋ ቁልፍ ተግባር ከ5 ሰከንድ መዘግየት ጋር
  • [12:14] ምሳሌ 3፡ ከመዘግየት በኋላ ሁለተኛ የቁልፍ ጭነትን መለየት
  • [17:20] ወደ map() ተግባር መግቢያ
  • [19:47] የLED ብሩህነት መቶኛዎችን የመቀየር ተግባራዊ ምሳሌ

ምስሎች

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

እንደሚያስፈልግዎት ይችላል

ምንጮች እና ምንጮች

ፋይሎች📁

ተጠቃሚ መመሪያ