Arduino බහු කාර්යයන් සහ කාල කළමනාකරණය

මිලිස් සමඟ බහු කාර්යයන් සඳහා Arduino පරීක්ෂණය

මම Arduino විශේෂ .යෙක් නොවේ, දීර් plate කාලයක් තිස්සේ තහඩුව තිබියදීත් මම විමර්ශනය කර නැත. මා එය භාවිතා කළ කාලය එය දැනටමත් නිර්මාණය කර ඇති කේත පිටපත් කිරීමේ හා ඇලවීමේ මෙවලමක් ලෙස පැවතුන නමුත් එය ක්‍රියා කරන ආකාරය ඉගෙන ගැනීමට වැඩි උනන්දුවක් නොමැතිව නමුත් එය ක්‍රියාත්මක කර මට ප්‍රයෝජනවත් වනු ඇතැයි යන අදහසින්. මෙම නත්තල් සමයේදී මම LED දර්ශන කිහිපයක් සහ HC-SR04 අල්ට්රා සවුන්ඩ් සංවේදකයක් සමඟ උපත් දර්ශනය සුසර කළෙමි. කළ යුතු දේ නිරීක්ෂණය කිරීම මම නැවැත්තුවා.

එකම සං .ාවෙන් LED දෙකක් සමඟ විවිධ දේ කිරීමට මට අවශ්‍ය විය. අපොයි. මම හිතන දේට මම ඉක්මනින්ම පැකිලුණා ඔබ Arduino සමඟ අවුල් වීමට පටන් ගන්නා විට ඔබට හමු වන පළමු සීමාවන්ගෙන් එකක්. ඔබට එය ඉතා සංකීර්ණ කිරීමට අවශ්‍ය නැත. මම මේ කතා කරන්නේ සමහර LED ගැන, ඔබට අවශ්‍ය දේ නිවැරදිව කළ නොහැකි බව ඔබට වැටහේ.

මුල සිටම එය පැහැදිලි කරමු Arduino හි බහු කාර්යයන් නොමැත, රැකියා දෙකක් සමාන්තරව සැකසිය නොහැක. නමුත් එකවරම ඇමතුම් ලබා ගැනීම සඳහා ශිල්පීය ක්‍රම තිබේ.

මම නඩුව වඩාත් විස්තරාත්මකව කියමි. නත්තල් දවසේදී මම උපත දර්ශනයක් සකස් කළ අතර මගේ දියණියන් ළඟට එන විට සමහර උපත් විදුලි පහන් දැල්වීමට අවශ්‍ය විය. කිසිවක් සංකීර්ණ නොවේ. මට අවශ්‍ය වූයේ ඊයම් ලයිට් වල ශාඛා දෙකක් සමීප සංවේදකයේ අගයන්ට වඩා වෙනස් ලෙස ක්‍රියා කිරීමයි.

කවුරුහරි සෙන්ටිමීටර 10 ට වඩා ළං වූ විට මට අවශ්‍ය විය

අපගේ තැපැල් ලැයිස්තුවට දායක වන්න

  • තාරකාවලට යන විදුලි පහන් අතු වලින් එකක් තත්පර 10 ක් පවතිනු ඇත
  • ගෙවල් ඇතුළට යන අනෙක් එක තත්පර 10 ක් පවතිනු ඇති නමුත් ඔවුන් උපතින්ම වෙන් වූ බැවින්.

සරල නැත? මෙය ඔබට විශාල ගැටළු ඇති කළ හැකි බැවිනි. Arduino හට බහු කාර්යයන් කිරීමට හැකියාවක් නොමැති නිසා, එය එක් විධානයක් එකින් එක ක්‍රියාත්මක කරයි.

 

පරිපථ සවිකිරීමේ LED දැල්වීම සහ අතිධ්වනික බහු කාර්යයන්

මම කළා HC-SR04 අතිධ්වනික සංවේදකය සමඟ සවි කිරීම සහ LED 2 ක්, සෑම එකක්ම බෙත්ලෙහෙමේ ශාඛාවකට සමාන වේ. LOOP හි අල්ට්රා සවුන්ඩ් සංවේදකයේ සැකසුම සහ ක්රියාකාරිත්වය වින්යාස කිරීම නිසා පළමු කොටස එතරම් විහිළුවක් නොවේ, නමුත් ඔබට මෙය ස්ථාන දහස් ගණනකින් සොයාගත හැකිය. තවත් දවසක් මෙන් මම තවත් විමසීමක් කළහොත් මම විශේෂ දෙයක් කරමි, දැන් ඔබ මෙහි සිටී (බැර නොකිරීමට කණගාටුයි, නමුත් මම එය ලබාගත්තේ කොහෙන්දැයි මට මතක නැත)

Arduino හි HC-SR04 කේතය

int ledPin1 = 8; int ledPin2 = 7; දිගු දුර; දිගු කාලය; දිගු කාලීන කාලය; දිගු කාල සීමාව; void setup () {// ප්‍රතිදානය ලෙස ඩිජිටල් පින් LED_BUILTIN ආරම්භ කරන්න. pinMode (ledPin1, OUTPUT); pinMode (ledPin2, OUTPUT); Serial.begin (9600); pinMode (3, OUTPUT); / * පින් 9 ප්‍රතිදානය ලෙස සක්‍රීය කිරීම: අතිධ්වනික ස්පන්දනය සඳහා * / pinMode (2, INPUT); / * පින් 8 ආදානය ලෙස සක්‍රිය කිරීම: අල්ට්රා සවුන්ඩ් පිම්බීමේ කාලය * /} // ලූප් ශ්‍රිතය නැවත නැවතත් සදහටම ක්‍රියාත්මක වේ අවලංගු ලූපය () {ඩිජිටල් වයිට් (3, අඩු); / * සංවේදක ස්ථායීකරණය හේතුවෙන් * / delayMicroseconds (5); ඩිජිටල් වයිට් (3, ඉහළ); / * අතිධ්වනික ස්පන්දනය යැවීම * / delayMicroseconds (10); time = ස්පන්දන (2, ඉහළ); / * එන ස්පන්දනයේ දිග මැනීමේ කාර්යය. අතිධ්වනික ස්පන්දනය යැවීම සහ සංවේදකයට තල්ලුව ලැබෙන විට ගතවන කාලය මනිනු ලැබේ, එනම්: පින් 12 පිම්බීම ලැබීමට පටන් ගත් දා සිට, ඉහළ, එය නතර කරන තුරු, අඩු, එන ස්පන්දනයේ දිග * / දුර = int (0.017 * වේලාව); / * පූර්ණ සංඛ්‍යාවක් ලබා ගන්නා දුර ගණනය කිරීමේ සූත්‍රය * / / * අනුක්‍රමික මොනිටරය මගින් සෙන්ටිමීටර වලින් අධීක්ෂණය කිරීම * / Serial.println ("දුර"); Serial.println (දුර); Serial.println ("cm"); ප්‍රමාදය (1000);

මේ සමඟ අල්ට්රා සවුන්ඩ් සංවේදකය මගින් මනිනු ලබන දුර සමාලෝචනය කර ගබඩා කරනු ලැබේ

LEDS මෙහෙයුම් විසඳුම

මතකයට එන පළමු දෙය නම් ප්‍රමාද වීම ආරම්භ කිරීමයි. ඇයිදැයි මම නොදනිමි, නමුත් සියලු ආරම්භකයින් ප්‍රමාදය () ගැන සිතන අතර එය විකල්පයන් බෙහෙවින් සීමා කරයි. මන්දයත් ප්‍රමාදය භාවිතා කරන අතරතුර මණ්ඩලය දිගටම වැඩ නොකරන අතර එම අත්හිටුවීමේ කාලය තුළ ඔබට වෙනත් කිසිවක් කළ නොහැකි බැවිනි. විසඳුම මිලි () භාවිතා කිරීමයි

මෙන්න මම සහ කවුන්ටර මත පදනම්ව සරල විසඳුමක් සොයා ගතිමි. මගේ ගුරුවරයෙකු පැවසූ පරිදි, ඕනෑම දෙයක් පේළි ගණනාවකින් වැඩසටහන්ගත කළ හැකිය. නමුත් ඇත්ත වශයෙන්ම සත්‍යය එතරම් අලංකාර නැත.

// දුර 10 ට වඩා අඩු නම්, අපි LED හෝ අතු දෙක සක්‍රිය කර මිලි () නම් (දුර <10) {ඩිජිටල් වයිට් (ledPin1, HIGH) සමඟ කාලය ගණනය කිරීම ආරම්භ කරමු; ඩිජිටල් වයිට් (ledPin2, HIGH); currenttime = මිලි (); } // දුර 10 ට වඩා වැඩි නම් එය සක්‍රිය වූ දින සිට අප විසින් පරීක්ෂා කරනු ලබන අතර එය සඳහන් කළ කාලයට වඩා වැඩි නම් අපි LED1 ක්‍රියා විරහිත කරන්නේ නම් (දුර> 10) {timepast = මිලිස් () - වත්මන් කාලය ; ඩිජිටල් වයිට් (ledPin1, LOW); // දුර 10000 ට වඩා වැඩි නම් අපි LED2 ක්‍රියා විරහිත කරන්නේ නම් (කාලරාමුව> 10000) {ඩිජිටල් වයිට් (ledPin2, LOW); }}}

මෙම කේතය අදහස් කරන දෙය නම්, ආර්ඩුයිනෝ නිරන්තරයෙන් එම අයිඑෆ් තුන ක්‍රියාවට නංවන අතර එමඟින් ඒවා ඉක්මණින් ගමන් කරනු ඇති අතර එය එකවර දේවල් කිහිපයක් කරන බව පෙනේ. නමුත් අප දැනටමත් දන්නා පරිදි, එය එකින් එක වාක්‍ය ක්‍රියාත්මක කරයි.

දුර මැනීමෙන් පසු විචල්යයේ ගබඩා වේ දුරක්, ifs ඇගයීමට ලක් කරනු ඇත:

  • පළමුවෙන් පරීක්ෂා කරන්නේ දුර අපේක්ෂිත 10 සෙ.මී. එසේ නම්, අපි LED දෙක සක්‍රිය කර කාලය මිලි () සමඟ ගණන් කිරීම ආරම්භ කරමු
  • සෙන්ටිමීටර 10 ට වඩා වැඩි දුරක් ඇත්නම් අපි දෙවැන්න වෙත යන්නෙමු. එය අනුකූල වන්නේ නම්, අප ගෙවී ගිය කාලය ගණනය කර ඊයම් 1 අක්‍රිය කර ඇති අතර එය රඳා පවතින්නේ දුර මත පමණි.
  • කවුන්ටරය සක්‍රිය කර තත්පර 10 කට වඩා ගතවී ඇත්දැයි පරීක්ෂා කරන්නේ නම් අපි තුන්වන ස්ථානයට යමු, එසේ නම්, පින් 2 අක්‍රිය කරන්න
  • ඉතින් ලූපය දිගටම යනවා. නැවතත්.

අවසානයේදී, සහ විසඳුම ක්‍රියාත්මක වුවද, මෙම ගැටළුව නිසැකවම බොහෝ අය අත්විඳ ඇති බවත්, ඊට වඩා සාම්ප්‍රදායික විසඳුමක් තිබිය යුතු බවත් මට පැහැදිලි විය. මම බැලීමට පටන් ගත් අතර පිරිමි ළමයින්ගෙන් හොඳ එකක් (එය නිසැකවම එකම නොවේ) මට හමු විය ඇඩැෆ්රූට් සහ වස්තු-නැඹුරු වැඩසටහන්කරණය. ඉක්මන් ඇමතුම් ලබා ගැනීම සඳහා නිර්වචනය කරන ලද පන්ති සමඟ වස්තු නිර්මාණය කිරීම සහ අපගේ වැඩසටහනේ කේතය සිය ගණනක් පුනරාවර්තනය කිරීම අවශ්‍ය නොවේ.

අවසානයේ + if + කවුන්ටර සමඟ මගේ විසඳුම “සමාන” නමුත් වඩා අලංකාර වන අතර එය වඩා කියවිය හැකි හා වඩා කාර්යක්ෂම කේතයක් සපයයි.

බහු කාර්යයන් කළමනාකරණය කිරීම අනිවාර්යයෙන්ම Arduino හි කාල කළමනාකරණයට මග පාදයි. මුලදී මෙය ලිපියට ඇතුළත් නොකළ නමුත් එය ඉතා රසවත් යැයි මම සිතමි.

Arduino සහ කාල කාර්යයන්

මම දැනටමත් අදහස් දක්වා ඇති පරිදි ප්‍රමාදය () සමඟ විශාල යැපීමක් ඇතැයි මම සිතමි , සමහර විට ආරම්භ වන පුද්ගලයින් මෙම ක්‍රියාව සාමාන්‍යයෙන් ආලෝකයේ සිට ඕනෑම මාර්ග තදබදයක් දක්වා හෝ LEDS හැසිරවීම සහ අක්‍රිය කර ඇති සියලුම උදාහරණ වල දැකිය හැකිය.

ප්‍රමාදයට ඉතා විශාල ගැටළුවක් ඇති අතර එය අප ඇමතුමක් ගන්නා විටදීය ප්‍රමාදය () යම් කාලයක් සඳහා සියල්ල නතර වේ. මණ්ඩලය කිසිදු සංවේදකයක් කියවන්නේ නැත, එය දිගටම වාක්‍ය ක්‍රියාත්මක නොකරයි, නැතහොත් කිසිවක් නොකරයි, අප එය පවසා ඇති කාලය එනතෙක් බලා සිටින්න. ඇත්ත වශයෙන්ම අපට එකකට වඩා වැඩි ගණනක් සඳහා පුවරුව භාවිතා කිරීමට අවශ්‍ය නම් ඒ සමගම මෙය ශක්‍ය නොවේ.

අපි බැලීමට සිදුවේ මිලි () පවා delayMicroseconds () ඒ වගේම අපිටත් තියෙනවා මයික්‍රෝ () වැඩසටහන ක්‍රියාත්මක කිරීමට පටන් ගත් දින සිට මයික්‍රෝ තත්පර ගණන නැවත ලබා දෙයි

ප්‍රමාදයකින් තොරව අන්ධ කරන්න

එය ක්‍රියාත්මක වන ආකාරය බැලීමට හොඳ උදාහරණයක් මිථ්‍යා දෘෂ්ටිය ධාවනය කරන්න, නමුත් ප්‍රමාදයකින් තොරව. ප්රධාන වෙනස වන්නේ ප්රමාදය () ක්රියාකාරිත්වය අමතක කිරීම සහ මෙහෙයුම් අතර ගත වූ කාලය ගණනය කිරීමට හැකි වන පරිදි මිලි () භාවිතා කිරීමයි.

"Arduino බහු කාර්යයන් සහ කාල කළමනාකරණය" පිළිබඳ අදහස් 2 ක්

  1. Arduino හි බාධා කිරීම් වල පැවැත්ම පිළිබඳව දැන ගැනීම ඔබට යම් ප්‍රමාණයක බහු කාර්යයන් සහිත වැඩසටහන් ක්‍රියාත්මක කිරීමට උපකාරී වේ.

    පිළිතුර

අදහස අත්හැර