ትምህርት 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() የመጠቀም መሰረታዊ ጥቅም ነው።
ከዚህ ቪዲዮ ጋር የተያያዙ ፕሮጀክቶች
- ትምህርት 14/31-1: Arduino Millis (ያለ መዘግየት) እና map ተግባራት | SunFounder Robojax
- ትምህርት 14/31-2: Arduino coding millis() ምሳሌ 2 ከክስተት ጋር
- ትምህርት 14/31-4: Arduino coding map() ምሳሌ 1
- ትምህርት 14/31-5: Arduino coding map() ምሳሌ 2
ምዕራፎች
- [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 ብሩህነት መቶኛዎችን የመቀየር ተግባራዊ ምሳሌ
/*
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");
}
}
}
እንደሚያስፈልግዎት ይችላል
-
አማዞንSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
አማዞን
-
አማዞን
-
አማዞን
ምንጮች እና ምንጮች
-
ሰነዶችDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
ውስጥPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
ፋይሎች📁
ተጠቃሚ መመሪያ
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB