በማይክሮፕሮሰሰር ቴክኖሎጂ ውስጥ በትይዩ የሚሰሩ ሥራዎች ክር ይባላሉ ፡፡ ይህ በጣም ምቹ ነው ፣ ምክንያቱም ብዙ ጊዜ በተመሳሳይ ጊዜ ብዙ ክዋኔዎችን ማከናወን አስፈላጊ ነው ፡፡ እንደ እውነተኛው አንጎለ ኮምፒውተር አርዱኢኖ ማይክሮ መቆጣጠሪያ በአንድ ጊዜ በርካታ ሥራዎችን እንዲያከናውን ማድረግ ይቻላልን? እናያለን.
አስፈላጊ ነው
- - አርዱዲኖ;
- - 1 LED;
- - 1 የፓይዞ ጫጫታ ፡፡
መመሪያዎች
ደረጃ 1
በአጠቃላይ ሲናገር አርዱduኖ እውነተኛ ትይዩነትን ወይም ሁለገብ ንባብን አይደግፍም ፡፡
ነገር ግን በእያንዳንዱ የ “loop ()” ዑደት ድግግሞሽ አንዳንድ ተጨማሪ እና የጀርባ ተግባሮችን ለማከናወን ጊዜው እንደደረሰ ለማጣራት ለማይክሮ መቆጣጠሪያው መንገር ይችላሉ ፡፡ በዚህ ጊዜ በርካታ ተግባራት በአንድ ጊዜ እየተከናወኑ እንደሆነ ለተጠቃሚው ይመስላል ፡፡
ለምሳሌ ፣ በተጠቀሰው ድግግሞሽ ላይ ኤ.ዲ.ኤልን እናንፀባርቅ እና ፣ በትይዩ ፣ ከፓይኦኤሌክትሪክ ኃይል አመንጪው እንደ ሳይረን የሚነሱ እና የሚወድቁ ድምፆችን እናወጣ ፡፡
ሁለቱን ኤልዲ እና የፓይዞ አመንጪን ከአንድ ጊዜ በላይ ከአርዱduኖ ጋር አገናኘን ፡፡ በስዕሉ ላይ እንደሚታየው ወረዳውን እንሰብሰብ ፡፡ ኤ.ዲ.ኤልን ከ "13" ውጭ ወደ ዲጂታል ፒን እያገናኙ ከሆነ የአሁኑን የሚገደብ ተከላካይ ወደ 220 ohms እንዲኖርዎ ያስታውሱ ፡፡
ደረጃ 2
እስቲ ይህን የመሰለ ንድፍ እንጻፍ እና ወደ አርዱinoኖ እንሰቅለው።
ቦርዱን ከጫኑ በኋላ ንድፉ እኛ እንደፈለግነው በትክክል እንዳልተፈፀመ ማየት ይችላሉ-ሲሪኑ ሙሉ በሙሉ ሥራውን እስኪያከናውን ድረስ ኤሌዲው አይበራም ፣ እና ኤንዲው በሲሪን ድምፅ በሚሰማበት ጊዜ እንዲንፀባረቅ እንፈልጋለን ፡፡ እዚህ ችግሩ ምንድነው?
እውነታው ይህ ችግር በተለመደው መንገድ ሊፈታ እንደማይችል ነው ፡፡ ሥራዎቹ የሚከናወኑት በማይክሮ መቆጣጠሪያው በጥብቅ በቅደም ተከተል ነው ፡፡ የ “መዘግየቱ ()” ኦፕሬተር የፕሮግራሙን አፈፃፀም ለተወሰነ ጊዜ ያዘገየዋል ፣ እና እስከዚህ ጊዜ እስኪያበቃ ድረስ የሚከተሉት የፕሮግራም ትዕዛዞች አይተገበሩም ፡፡ በዚህ ምክንያት በፕሮግራሙ “loop ()” ውስጥ ለእያንዳንዱ ሥራ የተለየ የማስፈጸሚያ ጊዜ መወሰን አንችልም ፡፡
ስለዚህ ፣ እንደምንም ሁለገብ ሥራን ማስመሰል ያስፈልግዎታል።
ደረጃ 3
አርዱinoኖ በሐሰተኛ ትይዩ ውስጥ ተግባሮችን የሚያከናውንበት አማራጭ በአርዱዲኖ ገንቢዎች በአንቀጽ https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay ነው ፡፡
ዘዴው ዋናው ነገር በእያንዳንዱ የ "loop ()" loop ድግግሞሽ ፣ የ LED ን የማብራት (የጀርባ ተግባርን ለማከናወን) ጊዜው አሁን መሆን አለመሆኑን እንፈትሻለን ፡፡ እና እሱ ከሆነ ፣ ከዚያ የኤልዲውን ሁኔታ እናዞረዋለን። ይህ የ "መዘግየት ()" ኦፕሬተርን የማለፍ አንድ ዓይነት ነው።
የዚህ ዘዴ ጉልህ ጉዳት በ ‹LED› መቆጣጠሪያ አሃድ ፊት ለፊት ያለው የኮድ ክፍል ከ ‹ledInterval› ኤል.ዲ.ኤል ብልጭታ የጊዜ ክፍተት በበለጠ ፍጥነት መከናወን መቻሉ ነው ፡፡ አለበለዚያ ብልጭ ድርግም የሚለው አስፈላጊ ከሆነው ያነሰ በተደጋጋሚ ይከሰታል ፣ እናም ትይዩ ተግባሮችን የማስፈፀም ውጤት አናገኝም። በተለይም በእኛ ረቂቅ ንድፍ ውስጥ የሲረን ድምፅ መለዋወጥ የሚቆይበት ጊዜ 200 + 200 + 200 + 200 = 800 msec ነው ፣ እና የ LED ብልጭታ ክፍተቱን ወደ 200 ሜሴ ሴኮንድ አደረግን ፡፡ ግን ኤሌዲው ከ 800 ሜ / ሰከንድ ጊዜ ጋር ብልጭ ድርግም ይላል ፣ ይህም እኛ ካዘጋጀነው 4 እጥፍ የተለየ ነው። በአጠቃላይ ፣ የ “መዘግየቱ ()” ኦፕሬተር በኮዱ ውስጥ ጥቅም ላይ ከዋለ ፣ የውሸት-ትይዩአዊነትን ለማስመሰል አስቸጋሪ ነው ፣ ስለሆነም እሱን ለማስወገድ ይመከራል።
በዚህ ጊዜ ለሲረን ድምፅ መቆጣጠሪያ ክፍል ጊዜው ደርሶም አልደረሰም መፈተሽ እና “መዘግየት ()” ን ላለመጠቀም አስፈላጊ ይሆናል ፡፡ ግን ይህ የኮዱን መጠን ከፍ ያደርገዋል እና የፕሮግራሙን ተነባቢነት ያባብሰዋል ፡፡
ደረጃ 4
ይህንን ችግር ለመፍታት የውሸት-ትይዩ አሠራሮችን በቀላሉ እንዲፈጥሩ የሚያስችልዎትን አስደናቂውን የ ArduinoThread ቤተ-መጽሐፍት እንጠቀማለን። እሱ በተመሳሳይ መንገድ ይሠራል ፣ ግን ጊዜውን ለመፈተሽ ኮድ ላለመጻፍ ያስችልዎታል - በዚህ ዑደት ውስጥ ሥራውን ማከናወን ይፈልጉ ወይም አይፈልጉ። ይህ የኮዱን መጠን ይቀንሰዋል እና የንድፍ ንድፍ ንባብን ያሻሽላል። በተግባር ላይብረሪውን እንፈትሽ ፡፡
በመጀመሪያ ፣ የላይብረሪውን መዝገብ ቤት ከኦፊሴላዊው ጣቢያ https://github.com/ivanseidel/ArduinoThread/archive/master.zip ያውርዱ እና በአርዱዲኖ አይዲኢ ወደ “ቤተ-መጻሕፍት” ማውጫ ይክፈቱ ፡፡ ከዚያ የ "ArduinoThread-master" አቃፊን ወደ "ArduinoThread" እንደገና ይሰይሙ።
ደረጃ 5
የግንኙነት ዲያግራም ተመሳሳይ ሆኖ ይቆያል። የሚቀየረው የፕሮግራሙ ኮድ ብቻ ነው ፡፡ አሁን ከጎን አሞሌው ጋር ተመሳሳይ ይሆናል።
በፕሮግራሙ ውስጥ ሁለት ዥረቶችን እንፈጥራለን ፣ እያንዳንዱ የራሱ የሆነ ሥራ ይሠራል-አንደኛው በኤልዲ መብራት ፣ ሁለተኛው የሲሪን ድምፅ ይቆጣጠራል ፡፡ በእያንዳንዱ የሉፍ ድግግሞሽ ፣ ለእያንዳንዱ ክር ፣ የማስፈጸሚያ ጊዜው እንደደረሰ ወይም እንዳልሆነ እንፈትሻለን ፡፡ ከመጣ የ “ሩጫ ()” ዘዴን ለማስፈፀም ተጀምሯል ፡፡ ዋናው ነገር የ “መዘግየት ()” ኦፕሬተርን አለመጠቀም ነው ፡፡
የበለጠ ዝርዝር ማብራሪያዎች በኮዱ ውስጥ ተሰጥተዋል ፡፡
ኮዱን በአርዱዲኖ ማህደረ ትውስታ ውስጥ እንጫን ፣ እናሂደው ፡፡ አሁን ሁሉም ነገር እንደ ሁኔታው በትክክል ይሠራል!