ኮድ ይፈልጉ

ትምህርት 14/31-2፡ አርዱኖ ኮዲንግ millis() ምሳሌ 2 ከክስተት ጋር

ትምህርት 14/31-2፡ አርዱኖ ኮዲንግ millis() ምሳሌ 2 ከክስተት ጋር

በዚህ ትምህርት ውስጥ፣ የ Arduino millis() ተግባርን እንዴት መጠቀም እንደሚችሉ ይማራሉ፣ ይህም የተወሰነ ጊዜ ካለፈ በኋላ ብቻ እርምጃ ለመውሰድ ሲሆን፣ የፕሮግራምዎን ቀሪ ክፍል ሳያቆም። ይህ ብዙ ተግባራት በአንድ ጊዜ መስራት ለሚያስፈልጋቸው ምላሽ ሰጪ የ Arduino ፕሮጀክቶች መሰረታዊ ቴክኒክ ነው፣ ለምሳሌ ኤልኢዲዎችን በማብረቅ ሳይሆን ዳሳሾችን በማንበብ ወይም የአዝራር ተጫንን በመከታተል። ይህ የተለየ ምሳሌ ከአምስት ሰከንድ በኋላ ክስተት ለማስነሳት ላይ ያተኩራል፣ ነገር ግን አመክንዮው ለብዙ እውነተኛ ሁኔታዎች ሊተገበር ይችላል።

የ Sunfounder መኪና ተሰብስቧል

ይህን ንድፍ በራስዎ ፕሮጀክቶች ውስጥ እንዴት መጠቀም እንደሚችሉ ጥቂት ተግባራዊ ምሳሌዎች እነሆ፡

  • የዘገየ ማግበር፡ ስርዓቱ ለተወሰነ ጊዜ ከሰራ በኋላ ብቻ ማራገቢያ ወይም ፓምፕ ያብሩ።
  • የደህንነት መቆለፊያዎች፡ እንደ ሞተር ማስነሳት ያለ አደገኛ እርምጃ ከመውሰድ በፊት አንድ አዝራር ለተወሰነ ጊዜ ተጭኖ እንዲቆይ ይጠይቁ።
  • በጊዜ ላይ የተመሰረቱ ማንቂያዎች፡ የዳሳሽ ንባብ በተወሰነ ጊዜ ውስጥ ካልተለወጠ ማንቂያ ወይም ማሳወቂያ ያስነሱ።
  • የማያግዱ ቆጣሪዎች፡ መሳሪያው ምላሽ ካልሰጠ እንደገና የሚያስነሳውን "የጥበቃ ውሻ" ቆጣሪ ይፍጠሩ።

ይህ የሚፈታው ዋናው ችግር የdelay() ተግባር ውስንነት ነው። delay(5000) ሲጠቀሙ፣ Arduino በእነዚያ አምስት ሰከንዶች ውስጥ ሌላ ማንኛውንም ኮድ መፈጸም ያቆማል። ይህ ለቀላል ስኬቾች ጥሩ ነው፣ ነገር ግን በጥበቃ ጊዜ ዳሳሾችን ማንበብ፣ ማሳያዎችን ማዘመን ወይም የአዝራር ተጫንን ማዳመጥ በሚያስፈልግባቸው ውስብስብ ፕሮጀክቶች ውስጥ ትልቅ ችግር ይሆናል። የmillis() ተግባር፣ ቦርዱ ከተበራ ጀምሮ ሚሊሰከንዶችን የሚቆጥረው፣ ፕሮግራሙን ሳያቆም ጊዜውን እንዲፈትሹ ያስችልዎታል።

የሚያስፈልግ ሃርድዌር

  • የ Arduino ቦርድ (Uno፣ Nano፣ Mega፣ ወዘተ.)
  • የግፊት አዝራር
  • የመገጣጠሚያ ሽቦዎች

የሽቦ አገናኝ መመሪያ

ለዚህ ምሳሌ የሽቦ አገናኝ በጣም ቀላል ነው። የውስጥ መጎተት-ወደላይ ተከላካይ ይጠቀማል፣ ስለዚህ ለአዝራሩ ምንም ውጫዊ ተከላካይ አያስፈልግም።

  • የግፊት አዝራሩን አንድ እግር በ Arduino ላይ ካለው GND ፒን ጋር ያገናኙ።
  • የግፊት አዝራሩን ሌላኛውን እግር በ Arduino ላይ ካለው ዲጂታል ፒን 2 ጋር ያገናኙ።

በኮዱ ውስጥ INPUT_PULLUP ስለምንጠቀም፣ አዝራሩ በማይጫንበት ጊዜ ፒኑ HIGH ያነባል እና ሲጫን ደግሞ LOW ያነባል፣ ፒኑን ከመሬት ጋር ያገናኛል። (በቪዲዮ በ08:29)

ኮዱን መረዳት

ይህ ኮድ ቀላል በክስተት ላይ የተመሰረተ ቆጣሪን ያሳያል። ፕሮግራሙ የአሁኑን millis() እሴት ያለማቋረጥ ወደ Serial Monitor ያትማል። የግፊት አዝራሩ ተጭኖ ሲይዝ እና Arduino ቢያንስ ለ5 ሰከንድ ሲሰራ፣ "Take action" ወደ Serial Monitor ያትማል። ቁልፉ የmillis() ምርመራ የጊዜውን ቀጣይ ህትመት አለማቆሙ ነው።

በተጠቃሚ ሊዋቀሩ የሚችሉትን የኮዱን ክፍሎች እንከፋፍል፡

unsigned long event = 5000;// 5 ሰከንድ

ይህ ለማዋቀር በጣም አስፈላጊው ተለዋዋጭ ነው። የ"ክስተትዎን" ቆይታ በሚሊሰከንድ ይገልጻል። በዚህ ምሳሌ፣ ወደ 5000 ተዋቅሯል፣ ይህም ከ5 ሰከንድ ጋር እኩል ነው። መዘግየቱን ለመቀየር፣ ይህን ቁጥር በቀላሉ ያሻሽሉ። ለምሳሌ፣ ወደ 10000 ማዋቀር እርምጃው ከ10 ሰከንድ በኋላ እንዲነሳ ያደርገዋል። የunsigned long ዳታ አይነት መጠቀም ወሳኝ ነው፣ ምክንያቱም የmillis() እሴት በጣም ሊበዛ ስለሚችል እና በመጨረሻም የመደበኛ int ተለዋዋጭ ከፍተኛ እሴት ሊያልፍ ስለሚችል፣ በማነፃፀር ላይ ስህተቶችን ያስከትላል። (በቪዲዮ በ05:46)

pinMode(2,INPUT_PULLUP);

ይህ መስመር ዲጂታል ፒን 2ን እንደ ግብዓት ያዋቅረዋል እና የውስጥ መጎተት-ወደላይ ተከላካዩን ያነቃል። ይህ ያለ ውጫዊ ተከላካይ አዝራር ለማገናኘት የሚያስችል ቁልፍ የማዋቀር ደረጃ ነው። ፒኑ በነባሪ HIGH ያነባል እና አዝራሩ ሲጫን፣ ከመሬት ጋር በማገናኘት LOW ይሆናል። የተለየ ፒን መጠቀም ከፈለጉ፣ ቁጥሩን 2 እዚህ እና በ loop ውስጥ ባለው digitalRead(2) መስመር ላይ ይቀይሩ። (በቪዲዮ በ08:46)

loop() ውስጥ ያለው አመክንዮ ቀጥተኛ ነው። የአዝራሩን ሁኔታ ያነባል። አዝራሩ ከተጫነ (pb == LOW)፣ ከዚያ የአሁኑ ጊዜ (millis()) ከተገለጸው event ጊዜ የበለጠ ወይም እኩል መሆኑን ያረጋግጣል። ሁለቱም ሁኔታዎች እውነት ከሆኑ፣ የእርምጃ መልእክቱን ያትማል። የተቀረው loop፣ ጊዜውን የሚያትመው፣ ያለማቋረጥ መስራቱን ይቀጥላል፣ ይህም የmillis() ኃይል ከdelay() በላይ ያሳያል።

ይህ ምሳሌ ጊዜውን ከ Arduino ከሚነሳበት ጊዜ ጀምሮ ያረጋግጣል። በቪዲዮ ተከታታይ ውስጥ ሦስተኛው ምሳሌ የመጀመሪያውን የአዝራር ተጫን ጊዜ በመመዝገብ እና ሁለተኛ ተጫን ቢያንስ ከ5 ሰከንድ በኋላ ከተከሰተ ብቻ እርምጃ በማስነሳት በዚህ ላይ ይገነባል። ያ አመክንዮ በትምህርት 14/31-3፡ Arduino coding millis() ምሳሌ 3 በግፊት አዝራር ውስጥ ተሸፍኗል።

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

ኮዱን ከሰቅሉ እና Serial Monitor ን ከከፈቱ በኋላ (በ9600 baud)፣ ቦርዱ ከተበራ ጀምሮ ያሉትን ሚሊሰከንዶች የሚወክሉ ተከታታይ ቁጥሮች ያያሉ። የግፊት አዝራሩን ከ5 ሰከንድ በፊት ተጭነው ከያዙ፣ ምንም አይከሰትም። ነገር ግን፣ አዝራሩን ከ5 ሰከንድ ምልክት በኋላ ተጭነው ከያዙ፣ "Take action" የሚለውን መልእክት በ Serial Monitor ውስጥ ሲታተም ያያሉ። እርምጃው አዝራሩ እስከተያዘ ድረስ መታተሙን ይቀጥላል። ይህ ሌሎች ኮዶች (ህትመቱ) ያለችግር እንዲሰሩ የሚያስችል የማያግድ ቆጣሪን ያሳያል። (በቪዲዮ በ10:52)

ከዚህ ቪዲዮ ጋር የተዛመዱ ፕሮጀክቶች

ይህ ቪዲዮ በአርዱኖ ጊዜ እና ካርታ ተግባራት ላይ የተመሰረተ ባለብዙ ክፍል ተከታታይ አካል ነው። ከዚሁ ምንጭ ቁሳቁስ የተፈጠሩትን ሌሎች ትምህርቶችን ይመርምሩ፦

ምዕራፎች

  • [00:00] ወደ millis() እና SunFounder ኪት መግቢያ
  • [01:19] millis() ምንድን ነው እና በ delay() ፈንታ ለምን ይጠቀሙበታል?
  • [03:06] ተግባራዊ ማሳያ፡ የ millis() እሴትን ማተም
  • [05:46] ከ millis() እና unsigned long ጋር ክስተት መፍጠር
  • [08:29] ከ INPUT_PULLUP ጋር የግፊት ቁልፍን ማገናኘት እና ኮድ ማድረግ
  • [10:52] የክስተት ምሳሌን በግፊት ቁልፍ ማስኬድ
  • [12:14] የምሳሌ 3 ቅድመ እይታ፡ ሁለተኛ የቁልፍ ግፊትን መለየት
  • [17:20] ወደ map() ተግባር መግቢያ
  • [19:47] የ map() ተግባርን ከ LED ጋር ኮድ ማድረግ እና ማሳየት

ምስሎች

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
917-Lesson 14/31-2: Arduino coding millis() example 2 with event
ቋንቋ: 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

ምንጮች እና ምንጮች

ፋይሎች📁

ተጠቃሚ መመሪያ