Arduino гогцоонууд. Arduino дахь FOR болон WHILE гогцоонууд Arduino дахь Nested гогцоонууд

Өнөөдөр бид гогцоо гэх мэт програмчлалын хэлний нэгэн адил чухал хэсгийг судлах болно. Тэд юунд хэрэгтэй вэ. Жишээ нь, өөрсөддөө зорилго тавья. Та зургаан LED-ийг 50 мс-ийн хугацаанд ээлжлэн асааж, дараа нь ижил интервалтайгаар ээлжлэн унтраах хэрэгтэй. За, юу илүү энгийн байж болох вэ? Бид дараах кодыг бичнэ.
хүчингүй тохиргоо() ( pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); ) хүчингүй давталт () ( digitalWrite(2, HIGH); саатал(50); digitalWrite(3, HIGH); саатал(50); digitalWrite(4, HIGH); саатал(50); digitalWrite(5, HIGH); саатал(50) ; digitalWrite(6, HIGH); саатал(50); digitalWrite(7, HIGH); саатал(50); digitalWrite(2, БАГА); саатал(50); digitalWrite(3, БАГА); саатал(50); digitalWrite (4, БАГА); саатал(50); дижитал бичих(5, БАГА); саатал(50); дижитал бичих(6, БАГА); саатал(50); digitalWrite(7, БАГА); саатал(50); ) Эхлээд бид Бид хоёроос долоо дахь хүртэлх зургаан дижитал тээглүүрийг гаралт болгон эхлүүлсэн бөгөөд үндсэн хөтөлбөрт бид ээлжлэн LED асаах, саатал гэх мэт зургаан удаа бичсэн. Дараа нь ижил зүйл, гэхдээ тэр бүрт LED унтардаг. Одоо бид үүнийг Arduino-д байршуулж, ажилдаа дуртай. Гэсэн хэдий ч энд ямар нэг зүйл буруу байна. Хэрэв та програмын кодыг анхааралтай ажиглавал програмын туршид давтагдсан кодын хэсгүүд байгааг анзаарах болно. Жишээлбэл, түр зогсолтыг давтах нь таны нүдийг нэн даруй татах ёстой. Мөн зүүг эхлүүлэх үед зөвхөн дугаар нь өөрчлөгддөг. Үүнийг асааж унтраахад зөвхөн дугаар л өөрчлөгддөг. Ийм жижиг программын хувьд мэдээжийн хэрэг, та үүнийг ингээд орхиж болно, хянагч нь үүнийг идэж, багалзуурахгүй, гэхдээ хэрэв та давтан кодыг гүйцэтгэх шаардлагатай бол жишээлбэл, 1000 удаа. Би үүнийг дүүргэх хангалттай тэвчээртэй гэж бодож байна, гэхдээ MK хангалттай санах ойтой юу? Мэдээжийн хэрэг, та яагаад бидэнд 1000 ижил үйл ажиллагаа хэрэгтэй байна вэ гэж асууж болно. Тийм ээ, төсөөлөхөд хэцүү.) Гэхдээ энэ нь асуудал биш, гэхдээ бид 1000 эсийн массивтай бол. Энэ нь ихэвчлэн тохиолддог, жишээлбэл, хэд хэдэн мэдрэгч нь массивын параметрүүдийг бичиж, энэ эмх замбараагүй байдлыг хэрхэн яаж шийдвэрлэх вэ. Үүнийг зарим параметрийн дагуу ямар нэгэн байдлаар задлах шаардлагатай болно. Ийм тохиолдлуудад зориулж циклийг зохион бүтээсэн. Гогцоо гэдэг нь тодорхой тооны удаа биелэгдэх кодын хэсэг юм. Програмын нэг давталт дахь гүйцэтгэсэн хэсгийг давталт гэж нэрлэдэг. Давталтын тоо 0-ээс хязгааргүй хүртэл байж болно. Програмчлалын хэл дээр давталтыг гүйцэтгэхийн тулд гурван давталтын сонголт байдаг. Надад итгээрэй, энэ нь ямар ч нарийн кодчилол хийхэд хангалттай. Энэ бүгдийг илүү нарийвчлан авч үзье.
  • байхад (нөхцөл) ()
  • do() while(нөхцөл);
  • for(тоолох хувьсагч; нөхцөл; тоолох хувьсагчийг нэмэгдүүлэх) ()
Эхний мөчлөг байхад (нөхцөл) (). Тэр яаж ажилладаг вэ. Үгний дараа байхадхаалтанд нөхцөл байх ёстой. Нөхцөл нь үнэн бол юу ч байж болно. Нөхцөл худал болмогц давталт ажиллахаа больж, програм давталтын дараах дараагийн мөрөөс үргэлжлүүлэн ажиллана. Нэг жишээ татъя.
char i = 0; байхад(iҮнэндээ энд юу бичсэн байна. Эхлээд бид count хувьсагчийг эхлүүлнэ бимөн дахин тохируулна уу. Дараа нь бид гогцоонд орж, хаалтанд байгаа нөхцөл байдлыг шалгаж эхэлнэ. Хэрэв үнэ цэнэ би 10-аас бага бол давталтын биеийг гүйцэтгэнэ. Давталтын биед бид тоолох хувьсагчийн утгыг нэгээр нэмэгдүүлж, нөхцөлийг дахин шалгана. Манай тохиолдолд гогцоо 10 удаа гүйцэтгэгдэх болно. Энэ нь эхлээд утга учир юм битэгтэй тэнцүү. Тэг нь арав хүрэхгүй. Дараа нь бид хувьсагчийг нэгээр нэмэгдүүлж, харьцуулсан, нэг нь арав хүрэхгүй гэх мэт. Тоолох хувьсагч аравтай тэнцүү болмогц бид шалгана, арав арваас бага байна уу? Мэдээжийн хэрэг биш, шалгасны дараа цикл ажиллахаа болино. Энэ мөчлөг ингэж ажилладаг. Нөхцөл хангаагүй байсан ч давталтын бие дэх кодыг ганцхан удаа гүйцэтгэх шаардлагатай бол та яах ёстой вэ? Үүнийг өөр нэг мөчлөг гэж нэрлэдэг хийх() while(нөхцөл). Энэ нь нэг зүйлийг эс тооцвол өмнөх мөчлөгтэй яг адилхан ажилладаг. Энэ гогцоонд эхлээд гогцооны биеийг гүйцэтгэх ба дараа нь туршилт хийгдэнэ. Код дээр ямар харагдахыг харцгаая.
char i = 0; do ( i++; ) while((i > 0) & (iЭнэ нь ямар сонирхолтой болохыг хараарай. Эхлээд бид өмнөх шигээ тоолох хувьсагчийг тэг болгож эхлүүлдэг, гэхдээ бид үүнийг бичих нөхцөлд битэгээс их, араваас бага байсан. Өөрөөр хэлбэл, хувьсагчийн утга нэгээс ес хүртэлх мужид байх ёстой. Хэрэв бид өмнөх гогцоог ашиглан ингэж бичсэн бол хэзээ ч биелэгдэхгүй байсан. Гэхдээ бидэнд шидэт үг бий хийх. Энэ нь юу болох вэ гэсэн үг юм. Нэгдүгээрт, давталтын биед тоолох хувьсагчийн утга нэмэгдэж, нэг болох ба энэ нь тэгээс их байвал нөхцөл үнэн болно. Үүний дагуу тоолох хувьсагч аравтай тэнцэх хүртэл гогцоо үргэлжлүүлэн ажиллана. Эцэст нь, мөчлөгийн гурав дахь хувилбар. Тэр хэрхэн ажилладаг вэ:
char i; for(i = 0; iХэрхэн ажилладаг. Эхлээд бид тоолох хувьсагчийг дахин эхлүүлдэг, гэхдээ тодорхой утгагүйгээр. Дараа нь бид үгийг бичнэ төлөө, гэхдээ хаалтанд бид эхлээд тоолох хувьсагчаа бичиж түүнд анхны утгыг өгнө. Дараа нь бид нөхцөлийг шалгаж, хэрэв энэ нь үнэн бол давталтын биеийг гүйцэтгэж, тоолох хувьсагчийн утгыг нэмэгдүүлнэ. Үндсэндээ энэ нь адилхан юм байхад()()тиймээс аль циклийг ашиглах нь танаас хамаарна. Зарим цэгүүдийн талаар хэдэн үг хэлье. Жишээлбэл, хэрэв та бичвэл while(1);, дараа нь гогцоо үүрд үргэлжлэх болно. Эсвэл хамт байвал төлөө, дараа нь иймэрхүү харагдах болно төлөө(;;);. Болгоомжтой байгаарай. Заримдаа циклийг гүйцэтгэхдээ та бүх зүйлийг хаяж, түүнээс гарахыг үнэхээр хүсч байгаа ч нөхцөл байдал үүнийг зөвшөөрдөггүй. Би юу хийх хэрэгтэй вэ? Үүний тулд өөр нэг тушаал бий завсарлага;. MK энэ командтай давталтын үндсэн хэсэгт таарсан даруйд давтахаас шууд гарч, давталтын дараах дараагийн мөрөөс програмыг үргэлжлүүлэн гүйцэтгэх болно. Гэхдээ гогцоог ажиллуулах явцад нөхцөлийг хангахгүй нөхцөл байдал үүсвэл, эсвэл жишээлбэл, давталтын биеийн төгсгөлийг үргэлжлүүлэн гүйцэтгэх шаардлагагүй бол яах вэ? Энд багийнхан бидэнд туслах болно үргэлжлүүлэх;. MK энэ тушаалтай тулгармагц бүх зүйлийг хаяж, давталтын дараагийн давталт руу шилждэг. Би бүх зүйлийг тодорхой тайлбарласан гэж найдаж байна. Одоо энэ мэдлэгийг хүлээн авсны дараа гогцоо ашиглан програмаа дахин бичье.
хүчингүй тохиргоо() (байт i = 2; // Хувьсагчийг тоолж байна while(i // Хэрэв i нь 8-аас бага бол давталтын биеийг гүйцэтгэнэ ( pinMode(i, OUTPUT); // 2-оос эхлэн зүүг эхлүүлнэ i++; //Тоолох хувьсагчийг нэгээр нэмэгдүүлнэ) ) хүчингүй давталт() ( байт i = 2; while(iИлүү дэлгэрэнгүй харцгаая. Эхлээд бид тоолох хувьсагчийг эхлүүлсэн бимөн түүнд хоёр гэсэн утгыг өгсөн. Яагаад хоёр гэж? Гэхдээ би анхны утга нь огт хамаагүй гэдгийг батлахын тулд хоёроос долоо дахь зүүг тусгайлан сонгосон учраас. Энэ нь нэг төрлийн тоглоом болж хувирсан) За, мэдээжийн хэрэг, тийм ээ. Дараа нь бид давталтын нөхцөлийг бичнэ. Бид зургаан LED-тэй тул зургаан давталт хийх хэрэгтэй. Гайхалтай, бид хоёрыг зургаа нэмэх нь наймтай тэнцүү гэж боддог. Тиймээ, бид тоолох хувьсагчийг наймаас бага болтол нь шалгах хэрэгтэй. Тэд ингэж бичжээ while(i . Одоо манай давталт зургаан удаа ажиллах болно. Бид давталтын бие дотор юу хийх хэрэгтэй вэ? Ямар ч төвөгтэй зүйл байхгүй, гаралт дээр гаралтыг эхлүүлэх функцийг оруулаад, гаралтын дугаарын оронд тоолох хувьсагчийг орлуулна уу. Юу вэ? заль мэх.MK биеийн гогцоонд ормогц гаралтыг эхлүүлэх функцийг гүйцэтгэхийн өмнө дамжуулж буй аргументуудыг харцгаая.Тэдгээрийн аль нэг нь гаралтын дугаарыг авч явах ёстой ба тэнд тоолох хувьсагч байгаа.Бид юу хийх ёстой вэ хийхгүй юу?Гэхдээ ухаалаг MK ямар хувьсагч байгааг хараад бахархалтайгаар тоогоо гаргана.Тэгээд тэнд хоёр байна.За сайн байна,хоёр дахь гаралтыг эхлүүлье.Үүний дараа бид утгыг нэмэгдүүлнэ. тоолох хувьсагчийг өөр нэгээр хийгээд нөхцөлийг шалгана уу. Тиймээ, гурав нь наймаас бага, бүгдийг дахин хийцгээе, зөвхөн хувьсагчид гурав байна. Энэ нь бид гурав дахь удаагаа гаралтыг эхлүүлж, дараа нь тооллогыг нэмэгдүүлнэ гэсэн үг юм. хувьсагчийг нэгээр авна.Ийм байдлаар давталтаар дамжих замаар бид шаардлагатай бүх гаралтыг тохируулах болно.Түүнээс гадна тоолох хувьсагчийг нэгээр нэмэгдүүлэх нь хатуу нөхцөл биш юм. Хэн ч чамайг ийм зүйл бичихэд саад болохгүй. i = ((127*i)/31) & 0xF4;Хэрэв нөхцөл байдал гүйцэтгэсний дараа үнэн бол энэ нь бас ажиллах болно. Гогцооны хувьд биед юу тохиолдох нь хамаагүй, нөхцөл байдал үнэн эсэхээс үл хамааран сонирхдог. Тэгээд л болоо. Дараагийн хичээл дээр бид функцууд, яагаад хэрэгтэй байгаа талаар судалж, өөрсдөө бичихийг хичээх болно.

Програмчлалын хэл болгонд ижил кодыг дахин дахин гүйцэтгэх боломжийг олгодог хяналтын заавар (гогцоо), тохирох кодын хэсгийг сонгох (нөхцөл) болон одоогийн кодын хэсгээс гарах заавар байдаг.

Arduino IDE нь шаардлагатай хяналтын ихэнх хэсгийг C/C++-ээс авдаг. Тэдний синтакс нь C-тэй ижил байна. Доор бид тэдгээрийн синтаксийг товч тайлбарлах болно.

if мэдэгдэл

if команд нь тодорхой нөхцөлийг шалгасны үр дүнгээс хамааран програмын тодорхой фрагментийг гүйцэтгэх боломжийг олгодог. Хэрэв нөхцөл хангагдсан бол програмын кодыг гүйцэтгэх боловч нөхцөл хангагдаагүй бол програмын кодыг алгасах болно. if командын синтакс дараах байдалтай байна.

Хэрэв (нөхцөл) (заавар1; заавар2; )

Нөхцөл нь хувьсагч эсвэл функцээр буцаасан утгын харьцуулалт байж болно. If нөхцөлийн гол шалгуур бол хариулт нь үргэлж үнэн эсвэл худал байх ёстой. if мэдэгдлийн нөхцлийн жишээ:

If(a!=2) ( ) if(x<10) { } if(znak==’B’) { }

Нөхцөл дотор бичигдсэн хаалт дотор та кодыг ажиллуулж болно.

Програмчлалд суралцаж эхэлсэн хүмүүс тодорхой хувьсагчийн утгыг ганц "=" тэмдэг ашиглан тэнцүүлэх алдаа гаргадаг. Ийм тэмдэглэгээ нь хувьсагчийн утгыг тодорхой зааж өгдөг тул нөхцөл нь үргэлж "үнэн", өөрөөр хэлбэл хангагдсан байх болно. Хувьсагч нь тодорхой утгатай тэнцүү эсэхийг шалгах нь үргэлж давхар тэнцүү тэмдгээр (==) тэмдэглэгддэг.

Та функцийн төлөвийг нөхцөл болгон ашиглаж болно, жишээлбэл:

If(init()) ( Serial.print("ok"); )

Дээрх жишээг дараах байдлаар гүйцэтгэнэ: Эхний алхамд init() функц дуудагдана. Энэ функц нь "үнэн" эсвэл "худал" гэж тайлбарлах утгыг буцаана. Харьцуулалтын үр дүнгээс хамааран "ok" гэсэн мессеж илгээгдэх эсвэл юу ч илгээхгүй.

Хэрэв ... өөр мэдэгдэл

Өргөтгөсөн if хэллэг нь if….else хэллэг юм. Энэ нь нөхцөл үнэн (үнэн) үед нэг код, нөхцөл хангагдаагүй үед (худал) хоёр дахь кодыг гүйцэтгэхийг баталгаажуулдаг. f if….else хэллэгийн синтакс дараах байдалтай байна:

Хэрэв (нөхцөл) ( // команд А ) өөр ( // тушаал B )

"А" команд нь болзол хангагдсан үед л, "В" команд нь болзол хангагдаагүй үед л ажиллана. "А" ба "В" командыг нэгэн зэрэг гүйцэтгэх боломжгүй. Дараах жишээ нь if...else синтаксийг хэрхэн ашиглахыг харуулж байна:

Хэрэв (init()) ( Serial.print("ok"); ) else ( Serial.print("алдаа"); )

Ингэснээр та функцийн зөв гүйцэтгэлийг шалгаж, энэ талаар хэрэглэгчдэд мэдэгдэх боломжтой.

Нийтлэг практик бол нөхцөл байдлыг үгүйсгэх явдал юм. Энэ нь зөв гүйцэтгэсэн функц 0 утгыг, ямар нэг шалтгаанаар буруу гүйцэтгэсэн функц тэгээс өөр утгыг буцаадагтай холбоотой юм.

Энэхүү "амьдралын ээдрээ"-ийн тайлбар нь энгийн. Хэрэв функц зөв хийгдсэн бол энэ нь бидэнд хэрэгтэй цорын ганц мэдээлэл юм. Алдаа гарсан тохиолдолд заримдаа юу нь буруу болсон, яагаад функцийг зөв гүйцэтгээгүйг ойлгох нь зүйтэй. Энд тэгээс бусад тоонууд аврах ажилд ирдэг, өөрөөр хэлбэл дижитал кодыг ашиглан бид алдааны төрлийг тодорхойлж чадна. Жишээлбэл, 1 - зарим утгыг уншихтай холбоотой асуудал, 2 - санах ой эсвэл диск дээр зай байхгүй гэх мэт.

Хамгийн сүүлд өөрчилсөн жишээ нь зөв гүйцэтгэсэн тохиолдолд тэгийг буцаадаг функцийг хэрхэн дуудахыг харуулж байна:

Хэрэв (!init()) ( Serial.print("ok"); ) өөр ( Serial.print("алдаа"); )

Кейсийн мэдэгдлийг солих

if мэдэгдэл нь зөвхөн нэг нөхцөлийг шалгах боломжийг олгодог. Заримдаа буцаж ирсэн эсвэл уншсан утгаас хамааран үйлдлүүдийн аль нэгийг хийх шаардлагатай болдог. Олон сонголттой шилжүүлэгч нь үүнд тохиромжтой. Шилжүүлэгч командын синтаксийг доор харуулав.

Switch (var) ( тохиолдол 1: //var=1 завсарлах заавар; тохиолдол 2: //var=2 завсарлах заавар; анхдагч: //өгөгдмөл заавар (хэрэв var 1 ба 2-оос ялгаатай бол) )

Var хувьсагчийн утгаас хамааран тодорхой блокууд дахь зааварчилгааг гүйцэтгэдэг. Кейсийн шошго нь заасан утгын блокийн эхлэлийг заана. Жишээлбэл, 1-р тохиолдол: энэ блок нэгтэй тэнцүү var-ын утгыг гүйцэтгэнэ гэсэн үг.

Блок бүрийг завсарлах командаар дуусгах ёстой. Энэ нь шилжүүлгийн мэдэгдлийн цаашдын гүйцэтгэлийг тасалдуулдаг. Хэрэв завсарлага авах команд алгасвал завсарлах командын өмнө дараагийн блокуудад зааврыг гүйцэтгэнэ. Өгөгдмөл шошго нь if хэллэгийн бусадтай адил сонголттой. Анхдагч блокт байрлах зааврууд нь var хувьсагчийн утга ямар ч загварт тохирохгүй үед л гүйцэтгэгдэнэ.

Хэд хэдэн утгын аль нэгэнд ижил зааврыг гүйцэтгэх шаардлагатай болдог. Үүнд дараах байдлаар хүрч болно.

Шилжүүлэгч (x) ( тохиолдол 1: // x=1 завсарлах заавар; тохиолдол 2: тохиолдол 3: тохиолдол 5: // x=2 эсвэл 3 эсвэл 4 завсарлах заавар; тохиолдол 4: // x=4 завсарлах заавар ; тохиолдол 6: // x=6 завсарлах заавар; өгөгдмөл: // анхдагч заавар (хэрэв x нь 1,2,3,4,5,6-аас өөр бол) )

x хувьсагчийн утгаас хамааран зааврын харгалзах блокыг гүйцэтгэнэ. 2-р тохиолдол: 3-р тохиолдол: 5-р тохиолдол: хэрэв x хувьсагч 2 эсвэл 3 эсвэл 5 утгатай байвал ижил кодын хэсэг ажиллана гэдгийг хөрвүүлэгчид мэдэгдэнэ.

мэдэгдлийн төлөө

for хэллэг нь нэг кодыг дахин дахин гүйцэтгэхэд хэрэглэгддэг. Ихэнхдээ зарим нэг хувьсагчийн утгыг өөрчлөх замаар ижил зааврыг гүйцэтгэх шаардлагатай байдаг. For давталт нь үүнд тохиромжтой. Командын синтакс дараах байдалтай байна.

Int i; for(i=0;i<10;i++) { // инструкции для выполнения в цикле }

For мэдэгдэлд өгөгдсөн эхний параметр нь хувьсагчийн анхны утга юм. Өөр нэг элемент бол давталтын гүйцэтгэлийг үргэлжлүүлэх нөхцөлийг шалгах явдал юм. Нөхцөл хангагдсан тохиолдолд гогцоо ажиллана. Сүүлийн элемент нь хувьсагчийн утгын өөрчлөлт юм. Ихэнх тохиолдолд бид түүний үнэ цэнийг нэмэгдүүлэх эсвэл бууруулдаг (шаардлагатай бол). Энэ жишээнд гогцоонд агуулагдах заавар i=0...9-д биелэгдэх болно.

Ихэнхдээ гогцоонд хэрэглэгддэг хувьсагчийг тэнд зарладаг:

For(int i=0;i<10;i++) { // инструкции для выполнения в цикле }

Давталтын дараагийн алхмуудыг тоолоход ашигладаг хувьсагчийг тохирох параметртэй функцийг дуудахын тулд дотор нь ашиглаж болно.

For(int i=10;i>0;i—) ( Serial.print(i); // 10,9,8,7,6,5,4,3,2,1 дугааруудыг илгээнэ)

while мэдэгдэл

Бид тоолохыг хүссэн тохиолдолд for давталт тохиромжтой. Заавал урьдчилан таамаглах боломжгүй зарим үйл явдлын үр дүнд бид тодорхой үйлдлүүдийг хийх шаардлагатай болсон нөхцөлд (жишээлбэл, товчлуур дарахыг хүлээж байна) бид while хэллэгийг ашиглаж болох бөгөөд энэ нь мэдэгдлийн блокийг дараах байдлаар гүйцэтгэдэг. нөхцөл хангагдсан л бол. while хэллэгийн синтакс дараах байдалтай байна.

while(нөхцөл) ( // гүйцэтгэх зааврын блок)

Статусын шалгалт нь мөчлөгийн эхэнд явагдах нь чухал юм. while цикл доторх заавар хэзээ ч биелэгдэхгүй байж магадгүй. Мөн хязгааргүй гогцоо үүсгэх боломжтой. Хоёр жишээг харцгаая:

Int x=2; while(x>5) ( Serial.print(x); ) ——————————————- int y=5; while(y>0) ( Serial.print(y); )

while дотор байрлах мэдэгдлийн эхний блок хэзээ ч биелэгдэхгүй. x хувьсагч нь хоёр утгатай бөгөөд энэ нь 5-аас их болохгүй. Хоёр дахь жишээнд бид хязгааргүй давталттай харьцаж байна. "y" хувьсагч нь 5 гэсэн утгатай, өөрөөр хэлбэл тэгээс их байна. Давталтын доторх "y" хувьсагчд ямар ч өөрчлөлт байхгүй тул давталт хэзээ ч дуусахгүй.

Энэ нь давталтыг зогсооход хүргэдэг параметрийг өөрчлөхөө мартсан тохиолдолд нийтлэг алдаа юм. while давталтыг ашиглах хоёр зөв жишээг доор харуулав.

Int x=0; байхад(x<10) { //блок инструкций x++; } —————————————- while(true) { if(условие) break; // блок инструкций }

Эхний жишээнд бид нөхцөл байдалд шалгагдсан хувьсагчийн утгыг өөрчлөх талаар санаа тавьсан. Үүний үр дүнд мөчлөг эцэст нь дуусна. Хоёр дахь жишээнд хязгааргүй гогцоо зориудаар үүсгэгдсэн. Энэ гогцоо нь Arduino IDE дахь loop() функцтэй тэнцэнэ. Үүнээс гадна давталт дотор нөхцөл шалгах ажиллагааг нэвтрүүлсэн бөгөөд үүний дараа давталт завсарлах командаар төгсдөг.

мэдэгдэл хийх үед хийх

while давталтын нэг хувилбар нь do...while давталт юм. Синтаксаас гадна нөхцөлийг шалгаж байгаа газар нь ялгаатай. do... үед бол зааврын блокыг гүйцэтгэсний дараа нөхцөлийг шалгана. Энэ нь давталтын бие дэх зааврын блокыг дор хаяж нэг удаа гүйцэтгэнэ гэсэн үг юм. Do...while командын синтакс доор байна:

Do ( // зааврын блок ) while(нөхцөл)

while операторын тухай бичсэн бүхэн do...while-д мөн хамаарна. Do...while давталтыг ашиглах жишээг доор харуулав:

Int x=10; do ( // зааврын блок x—; ) while(x>0); ————————————- do ( // зааврын блок хэрэв (нөхцөл) эвдэрвэл; ) while(true);

break мэдэгдэл

break хэллэг нь давталтаас гарах (do...while, for, while) болон switch сонголтоос гарах боломжийг олгоно. Дараах жишээнд завсарлах командын гүйцэтгэлийг авч үзье.

For(i=0;i<10;i++) { if(i==5) break; Serial.print(i); }

0-ээс 9 хүртэлх тоонуудын хувьд давталт хийгдэх ёстой, харин 5-ын тооны хувьд break хэллэгийг өдөөх нөхцөл хангагдсан байна. Энэ нь гогцооноос гарах болно. Үүний үр дүнд цуваа порт руу (Serial.print) зөвхөн 0,1,2,3,4 тоонууд илгээгдэнэ.

Үргэлжлүүлэх оператор

Continue оператор нь давталтын заавруудыг (do...while, for, while) одоогийн утгыг гүйцэтгэхийг зогсоож, дараагийн давталтын алхам руу шилжихэд хүргэдэг. Дараах жишээ нь үргэлжлүүлэх мэдэгдэл хэрхэн ажилладагийг харуулж байна:

For(i=0;i<10;i++) { if(i==5) continue; Serial.print(i); }

Анхаарахад хэцүү биш тул 0-ээс 9 хүртэлх утгуудын хувьд давталт хийгдэх болно. 5 утгын хувьд үргэлжлүүлэх командыг гүйцэтгэх бөгөөд үүний үр дүнд энэ командын дараах заавар биелэгдэхгүй. Үүний үр дүнд 0,1,2,3,4,6,7,8,9 тоонууд цуваа порт руу (Serial.print) илгээгдэнэ.

буцаах мэдэгдэл

Буцаах мэдэгдэл нь дуудагдсан функцийн гүйцэтгэлийг дуусгаж, тодорхой төрлийн утгыг буцаана. Та тушаалын параметр болгон тоо, тэмдэг эсвэл тодорхой төрлийн хувьсагчийг зааж өгч болно. Буцах утга нь зарласан функцийн төрөлтэй тохирч байх нь чухал. Дараах жишээ нь буцах мэдэгдлийг хэрхэн ашиглахыг харуулж байна:

Int checkSensor())( if (analogRead(0) > 400) ( // аналог оролтыг уншвал 1 буцаана; // 400-аас их утгын хувьд 1-г буцаана (буцаа 0; // бусдын хувьд 0) буцаж ирсэн))

Таны харж байгаагаар та нэг функцэд олон буцах мэдэгдлийг ашиглаж болох боловч тэдгээрийн зөвхөн нэг нь үргэлж ажиллах болно. Буцаах операторыг параметргүйгээр ашиглахыг зөвшөөрнө. Энэ нь ямар ч утгыг буцаахгүй функцийг хугацаанаас нь өмнө зогсоох боломжийг танд олгоно.

Хүчингүй функц_нэр() ( заавар1; хэрэв(x==0) буцаах; заавар2; заавар3; )

Дээрх жишээнд функц дуудагдах бүрт заавар1 ажиллана. Заавар2 болон заавар3-ын гүйцэтгэл нь if командын үр дүнгээс хамаарна. Нөхцөл үнэн (үнэн) бол буцах командыг гүйцэтгэх ба функц гарах болно.

Нөхцөл хангагдаагүй тохиолдолд буцах команд мөн биелэгдэхгүй, харин зааврын заавар2, заавар3-ыг гүйцэтгэх ба үүний дараа функц ажлаа дуусгана.

Goto мэдэгдэл

Үзэл суртлын шалтгааны улмаас энэ тайлбарыг алгасах шаардлагатай байна... Goto хэллэг нь ердийн програмчлалд ашиглах ёсгүй команд юм. Энэ нь кодын нарийн төвөгтэй байдлыг үүсгэдэг бөгөөд програмчлалын буруу зуршил юм. Бид танд энэ командыг программдаа ашиглахгүй байхыг зөвлөж байна. Goto нь arduino.cc вэб сайтын албан ёсны баримт бичигт багтсан тул түүний товч тайлбарыг энд оруулав. goto командын синтакс:

…. тэмдэг рүү очих; // 'metka' гэсэн шошготой мөрөнд очно ..... .... …. metka: // програм үргэлжлүүлэн ажиллах шошго...

Энэ тушаал нь танд заасан тэмдэг рүү, өөрөөр хэлбэл програмын аль нэг газар руу очих боломжийг олгоно.

Үг хэллэг ашиглан гогцоо төлөөТэгээд байхаднь Arduino-ийн үндэс болсон С++ хэлний хамгийн чухал бүтээцүүдийн нэг юм. Тэдгээрийг та мэдэхгүй байсан ч бүх ноорог дээр олж болно. Энэ нийтлэлд бид гогцоонуудыг нарийвчлан авч үзэх, for, while хоёрын ялгаа нь юу вэ, тэдгээрийн тусламжтайгаар програм бичихийг хэрхэн хялбаршуулах, ямар алдаа гаргахаас зайлсхийх хэрэгтэйг олж мэдэх болно.

Хэрэв та шинэхэн програмист хэвээр байгаа бөгөөд гогцоо гэж юу болох, яагаад хэрэгтэй болохыг ойлгохыг хүсч байвал энэ нийтлэлийн дараагийн хэсгийг дэлгэрэнгүй тайлбартайгаар үзнэ үү.

WHILE оператор нь C++ болон Arduino хэл дээр ижил тушаалуудыг дурын хэдэн удаа давтахад ашиглагддаг. FOR гогцоотой харьцуулахад WHILE гогцоо нь илүү энгийн харагддаг бөгөөд энэ нь ихэвчлэн хувьсагчийн давталтын тоог тоолох шаардлагагүй, харин ямар нэг зүйл өөрчлөгдөх эсвэл ямар нэгэн үйл явдал гарах хүртэл кодыг давтахад л хэрэглэгддэг.

WHILE синтакс

байхад(<условие или список условий>)
{
<программный блок, который будет повторяться>
}

Булийн утгыг буцаадаг аливаа хэлний бүтцийг нөхцөл болгон ашиглаж болно. Нөхцөл нь харьцуулах үйлдэл, функц, тогтмол, хувьсагч байж болно. Arduino дахь бусад логик үйлдлүүдийн нэгэн адил тэгээс бусад утгыг үнэн, тэг - худал гэж хүлээн зөвшөөрөх болно.

// Төгсгөлгүй давталт while(true)( Serial.println("Хүлээж байна..."); ) // while(!checkSignal())( Serial.println checkSignal() функцын утга өөрчлөгдөх хүртэл ажиллах давталт. ("Хүлээж байна..."); )

while хэллэгийг буржгар хаалтаар блок хаахгүйгээр ашиглаж болох ба энэ тохиолдолд давталтын дараа тааралдсан эхний команд давтагдах болно гэдгийг анхаарна уу. Буржгар хаалтгүй үед хэрэглэхийг зөвлөдөггүй, учир нь Энэ тохиолдолд алдаа гаргахад маш хялбар байдаг. Жишээ:

While(true) Serial.print("Тасалдлыг хүлээж байна"); саатал(1000);

Энэ тохиолдолд delay(1000) тушаал давтагдахгүй тул бичээс нь зогсолтгүй төгсгөлгүй давталтаар харагдах болно. Ийм алдааг барихын тулд та маш их цаг зарцуулж болно - буржгар хаалт хэрэглэх нь илүү хялбар байдаг.

while давталт ашиглах жишээ

Ихэнхдээ while нь ямар нэгэн үйл явдлыг хүлээхэд ашиглагддаг. Жишээлбэл, Цуваа объектын ажилд бэлэн байдал.

Serial.begin(9600); while (!Цуваа) ( ; // Зарим Arduino хавтангууд цуваа портыг суллах хүртэл хүлээхийг шаарддаг)

UART-ээр дамжуулан гадаад төхөөрөмжөөс тэмдэгт ирэхийг хүлээх жишээ:

While(Serial.available())( int byteInput = Seria.read(); // Бусад үйлдэл)

Энэ тохиолдолд Serial.available() нь тэгээс өөр утгыг буцааж байх үед бид утгуудыг унших болно. Буфер дэх бүх өгөгдөл дуусмагц давталт зогсох болно.

Arduino дахь FOR гогцоо

FOR гогцоонд бид зөвхөн хилийн нөхцлийг тогтоохоос гадна тоолуурын хувьсагчийг нэн даруй тодорхойлж, давталт бүрт түүний утга хэрхэн өөрчлөгдөхийг зааж өгөх боломжтой.

FOR давталтын синтакс

Энд дизайн нь арай илүү төвөгтэй байх болно:
төлөө (<начальное значение счетчика>;<условие продолжения выполнения цикла>;<изменение значения счетчика на каждом шаге>){
<список_команд>
}

Хамгийн энгийн жишээ:

For(int i=5;i<10;i++){ // Конструкция «3 в одном» pinMode(i, OUTPUT); }

Бид нэн даруй хувьсагч үүсгэж, түүнийг эхлүүлж, мөчлөг бүрийн төгсгөлд тоолуурын утгыг нэгээр нэмэгдүүлэх шаардлагатайг зааж өгсөн. Ингээд л боллоо - одоо та гогцоонд байгаа хувьсагчийг ашиглаж болно.

Хувьсах алхам нь өөр байж болно. Энд жишээнүүд байна:

  • for(int i=0; i<10; i=i+2) // Шаг 2
  • for(int i=0; i<10; i+=2) // Аналогичен предыдущему
  • for(int i=10; i>0; i–) // Буцах – 10-аас 1 хүртэл

while давталт хийх

Зарим тохиолдолд бид блокийн зааврыг дор хаяж нэг удаа гүйцэтгэхийн тулд гогцоог зохион байгуулж, дараа нь шалгалтыг хийх хэрэгтэй. Ийм алгоритмын хувьд та do while construct-ийг ашиглаж болно. Жишээ:

Do ( Serial.println("Ажиллаж байна"); ) while (checkSomething());

Энэ давталтын хувилбар нь ямар ч хүндрэл учруулахгүй - бид зүгээр л блокыг нөхцөлтэй нь доош нь зөөсөн тул do операторын дараа буржгар хаалт доторх бүх агуулгыг эхний шалгалтын өмнө гүйцэтгэнэ.

Үргэлжлүүлэх ба таслах мэдэгдлүүд

Нөхцөл шалгах блок руу шилжихийг хүлээлгүйгээр давталтын блок доторх гогцооны гүйцэтгэлийг яаралтай таслах шаардлагатай нөхцөл байдал бий. Үүнийг хийхийн тулд та оператор ашиглаж болно завсарлага:

байхад (үнэн) (хэрэв (checkSomething()) ( завсарлага; ) )

Хэрэв бид зүгээр л одоогийн давталтын явцыг зогсоохыг хүсч байгаа ч давталтаас гарахгүй, харин нөхцөл шалгах блок руу очвол бид операторыг ашиглах ёстой. үргэлжлүүлэх:

байхад (үнэн) (хэрэв (checkSomething()) (үргэлжлүүлэх; ) )

Continue болон break хэллэгүүдийг FOR болон WHILE гогцоонуудын бүх хувилбарт ашиглаж болно.

Arduino дахь үүрлэсэн гогцоонууд

Гогцооны аль ч хувилбарыг бие биентэйгээ хялбархан нэгтгэж, үүрлэсэн бүтцийг бий болгодог. "Давхардсан" давталтын блокт тодорхойлсон хувьсагч нь дотор талд байх болно. Энэ төрлийн гогцооны хамгийн түгээмэл жишээ бол хоёр хэмжээст массивыг давах явдал юм. Дараах жишээнд бид давхар гогцоо ашигладаг: эхнийх нь мөрүүдийг давтах болно (i хувьсагч), хоёр дахь нь үүрлэсэн, arr хувьсагчаар тодорхойлсон массивын багана (j хувьсагч) дундуур давталт хийнэ.

Int arr; хүчингүй тохиргоо() (for (int i = 0; i).< 10; i++) { for (int j = 0; j < 3; j++) { arr[i][j] = i * j; Serial.println(arr[i][j]); } } }

Циклийн талаар дэлгэрэнгүй

Хэрэв та гогцоотой хэзээ ч ажиллаж байгаагүй бол онолын ертөнц рүү бага зэрэг орж, гогцоо гэж юу болох, яагаад бидэнд эдгээр нууцлаг хэлний бүтэц хэрэгтэйг олж мэдэцгээе.

Яагаад бидэнд гогцоо хэрэгтэй байна вэ?

Үнэн хэрэгтээ давталтын гол үүрэг бол ижил хэл дээрх бүтцийг хэд хэдэн удаа давтах явдал юм. Энэ хэрэгцээ бараг бүх программ дээр гарч ирдэг бөгөөд мэдээжийн хэрэг нэг ч Arduino ноорог гогцоогүйгээр хийж чадахгүй - loop() функцийг мөн хязгааргүй давталт гэж нэрлэдэг.

Дараах жишээг харцгаая. Та Arduino самбарт 5-аас 9 хүртэлх зүү холбогдсон 5 LED-д нэгэн зэрэг тэжээл өгөх шаардлагатай. Үүний хамгийн ойлгомжтой сонголт бол таван зааврыг дараалан байрлуулах явдал юм.

digitalWrite(5, HIGH);

digitalWrite(6, HIGH);

digitalWrite(7, HIGH);

digitalWrite(8, HIGH);

digitalWrite(9, HIGH);

Ийм олон тооны LED-ийг нэгэн зэрэг оруулах нь самбарын цахилгаан хэлхээнд их хэмжээний ачааллыг бий болгодог тул ийм үйлдлийн эрсдэлтэй байдлын асуудлыг одоохондоо үл тоомсорлоё. Одоо бидний хувьд хамгийн гол зүйл бол бид таван мөр код үүсгэсэн бөгөөд тус бүр нь бусдаасаа нэг оронтой тоогоор ялгаатай. Энэ арга нь дараахь сул талуудтай.

  • Аливаа өөрчлөлтийн хувьд та олон мөрөнд нэгэн зэрэг өөрчлөлт хийх шаардлагатай болно. Жишээлбэл, хэрэв бид LED-үүдийг 2-оос 6-р зүү рүү шилжүүлэх эсвэл асаахын оронд хүчдэлийг унтраах шаардлагатай бол кодонд 5 өөрчлөлт оруулах шаардлагатай болно. Хэрэв нэмэлт заавар, өөрчлөлт байвал яах вэ?
  • Олон тооны ижил төстэй заавар бүхий том код нь уншихад тохиромжгүй, тааламжгүй байдаг. Таван ижил шугам нь тийм ч аймшигтай биш юм. Гэвч бохир кодын зуршил нь эцэст нь жагсаалтад хэдэн арван, хэдэн зуун нэмэлт хуудас үүсгэхэд хүргэдэг бөгөөд энэ нь таныг болон танай хамт олонд сэтгэл дундуур байх болно.
  • Бараг адилхан зааврыг "хуулбар буулгах" явцад та амархан алдаа гаргаж болно, жишээлбэл, пин дугаараа өөрчлөхөө мартаж болно: digitalWrite(5, HIGH); digitalWrite(5, HIGH);
  • Ярилцлага авагчид энэ кодыг үзүүлснээр та энгийн програм хангамжийн компанид ярилцлага өгөхдөө амархан бүтэлгүйтэх боломжтой.

Энэ бүхнээс харахад ижил мөрүүдийг дахин дахин ашиглахаас бараг үргэлж зайлсхийж, гогцоонуудаар солих хэрэгтэй гэж бид дүгнэж болно. Түүнээс гадна, олон тохиолдолд мөчлөггүйгээр хийх боломжгүй, юу ч тэднийг орлож чадахгүй. Хөтөлбөр ажиллаж байх үед код хэдэн удаа давтагдахыг өөрчлөх боломжгүй. Жишээлбэл, та элемент бүрийг боловсруулах хэрэгтэй өгөгдлийн массив, гадаад төхөөрөмжөөс хүлээн авсан. Хэр их өгөгдөл байх, боловсруулалт хэдэн удаа давтагдахыг та хэзээ ч урьдчилан таамаглахгүй тул нийтлэл бичих үед шаардлагатай тооны зааврыг оруулах боломжгүй болно.

Энд мөчлөгүүд бидэнд туслах болно.

Синтакс дүрэм

Arduino дахь давталтнь програмыг гүйцэтгэх явцад тодорхой тооны удаа дуудагдах тусгай програмын блок юм. Энэ блок дотор бид дуудагдах командууд болон хэдэн удаа дуудагдах шаардлагатайг хянагч тодорхойлох дүрмийг тайлбарладаг.

Дээрх жишээн дээр бид хянагчдаа дараахь зүйлийг хэлж болно.

Тушаалыг давт DigitalWrite 5 удаа

Робот программистуудтай хамгийн тохиромжтой ертөнцөд энэ нь хангалттай байх болно, гэхдээ бид компьютертэй C++ хэлээр ярьж байгаа тул энэ хэллэгийг энэ хэл рүү орчуулах шаардлагатай байна:

Тушаалыг давт – та хянагчдаа while эсвэл for давталтаар ямар нэгэн сонирхолтой зүйл эхлэх гэж байгааг хэлэх тусгай зааврыг ашиглах хэрэгтэй

дижитал бичих – байгаагаар нь үлдээгээрэй, гэхдээ нэг удаа бичээд буржгар хаалтанд бичээрэй. Зүүний дугаарыг юу хийх вэ - яг доор.

5 удаа – Үүний тулд тоологч ашиглана уу, энэ нь давталт бүрт нэмэгдэх болно. Блокийн эхэнд (эсвэл төгсгөлд) та энэ тоолуурын утгыг хязгаарын утгатай (энэ тохиолдолд 5) харьцуулах үйлдлийг ашиглан харьцуулж болно.

Ийм "орчуулсан" давталтын командын жишээг while хэллэгээр харцгаая.

Int тоолуур = 0; // Тоолуурын утгыг хадгалах хувьсагч // Бид процессороос хаалтанд байгаа нөхцөл үнэн болох хүртэл буржгар хаалтанд хийсэн бүтцийг давтахыг хүснэ. // Манай тохиолдолд тоолуур нь бидний тоолуур, 5 нь хязгаарын утга, нөхцөл нь тоолуурын утга 5-аас бага байна. // Гэхдээ бид (тоолуур) тэс өөр логик операторуудыг зааж өгч болно.< 5) { digitaWrite(5, HIGH); // Будем включать светодиод counter++; // Увеличиваем значение счетчика } // Дойдя до сюда, исполняющий процессор переместится в начало блока и опять займется проверкой условий. Если условия вернут истину, команды в блоке между { и } выполнятся еще раз. Если условие не выполнится - процессор переместится к концу блока и пойдет дальше. Этот цикл больше его не заинтересует.

Өгөгдсөн кодонд алдаа байгааг анзаарсан хүмүүсийн хувьд бид тав өгч, давталтын блокыг өөрөөр бичнэ.

байхад(тоолуур< 5) { // Вот теперь мы будем включать разные светодиоды, с 5 (0+5) по 9 (4+5) digitalWrite(counter + 5, HIGH); counter++; }

FOR гогцоо ашиглан ижил үр дүнд хүрч болно:

For(int counter =0; counter<5; counter ++){ digitalWrite(counter+5, HIGH); }

Таны харж байгаагаар, энэ тохиолдолд бид тоолууртай шаардлагатай бүх үйлдлүүдийг нэг FOR зааварт нэн даруй байрлуулдаг - хэрэв та шаардлагатай дүнг тоолох шаардлагатай бол энэ нь илүү тохиромжтой.

Та гогцоо ашиглах дүрмийн талаар дэлгэрэнгүй мэдээллийг энэ зүйлийн холбогдох хэсгүүдээс авах боломжтой.

Дүгнэлт

Энэ нийтлэлд бид Arduino хэлний маш чухал бүтэц болох FOR ба WHILE гогцоонуудыг авч үзсэн. Та эдгээр операторуудыг бараг ямар ч нарийн төвөгтэй схемээс олж болно, учир нь гогцоогүйгээр өгөгдөл дээр олон үйлдэл хийх боломжгүй болно. Гогцоонуудын синтакс дээр төвөгтэй зүйл байхгүй - та тэдэнд амархан дасаж, төслүүддээ идэвхтэй ашиглаж болно.

Arduino IDE дээр for, while, do while давталтын операторууд хэрхэн ажилладаг, тойм зураг дээр гогцоог хэрхэн зөв ашиглах, ямар алдаа гаргахаас зайлсхийх талаар харцгаая. Энгийн жишээнүүдийг ашиглан бид гогцоог хэрхэн зогсоох эсвэл нэг давталтаас нөгөө рүү шилжихийг харуулах болно. Бичих мөчлөгийн зөвийг ойлгохын тулд юуны түрүүнд робот техникийн алгоритмын төрөл, шинж чанарыг судлах хэрэгтэй.

Arduino IDE дээр гогцоонууд хэрхэн ажилладаг

C++ болон Arduino програмчлалын хэл дээрх аливаа давталт нь олон буюу хязгааргүй олон удаа давтагддаг үйлдэл юм. Arduino микроконтроллерийн нэг ч програм гогцоогүйгээр бүрэн гүйцэд байдаггүй, жишээлбэл, хоосон давталтыг хязгааргүй давталтаар дууддаг. Гурван төрлийн давталтын операторууд байдаг: for, while, do while - оператор бүрийг авч үзээд жишээн дээр хэрхэн ажилладагийг харцгаая.

For болон while-ийн ажиллах зарчмыг дараах энгийн жишээгээр тайлбарлаж болно. For давталт нь хязгаарлагдмал тооны удаа (операторын нөхцөлд заасан) гүйцэтгэгддэг бөгөөд энэ нь жишээ нь, програм нь LED-ийг хэд хэдэн удаа анивчих шаардлагатай үед ашиглагддаг. Жишээлбэл, Arduino дээрх LED нь мэдрэгчийн өгөгдөл өөрчлөгдөх хүртэл анивчих үед while давталт нь эцэс төгсгөлгүй ажиллах боломжтой.

Arduino дээрх for давталтын жишээний тайлбар

Arduino дахь for construct нь дараах байдлаар тодорхойлогддог.

төлөө (эхлүүлэх; нөхцөл; өөрчлөлт)( )

For давталт нь буржгар хаалтанд хавсаргасан тодорхой командуудыг давтахад хэрэглэгддэг. Энэ мөчлөг нь давтагдах аливаа үйлдлийг хийхэд тохиромжтой.
At эхлүүлэххувьсагчийг үүсгээд анхны утгыг онооно.
IN нөхцөлдавталт хэрэгжих хувьсагчийн утгыг бичнэ.
IN өөрчлөхнь давталтын алхам бүрт хувьсагч хэрхэн өөрчлөгдөхийг заана.

хувьд (байт i=0; i<=5; i++){ digitalWrite (13, HIGH ); delay (500); digitalWrite (13, LOW ); delay (500); }

Жишээ ноорог дээр анхны утга бүхий хувьсагчийг тохируулсан болно i=0, нөхцөл нь хувьсагч тавтай тэнцүү буюу түүнээс их болтол давталт ажиллана гэж заасан би<=5 . Өөрчлөлт нь давталтын алхам бүрт хувьсагч нэгээр нэмэгдэх болно гэж заасан. Эцэст нь хувьсагч тавтай тэнцэх үед for давталт гарах тул LED нь давталт дуусахаас өмнө таван удаа анивчих болно.

Хувьсах алхам (өөрчлөлт) нь юу ч байж болно. Хэрэв хувьсагчийг нэг дор хоёр нэгжээр нэмэгдүүлэх шаардлагатай бол тоолуурын өөрчлөлтийг дараах байдлаар бичнэ. i=i+2. For гогцоо нь хүчингүй тохиргооны процедур дотор ашиглагдаж болно, жишээлбэл, хэд хэдэн тээглүүрийн ажиллах горимыг нэг дор зааж өгөх боломжтой. Мөн хүчингүй давталтын процедурт, жишээлбэл, Arduino дээрх LED-үүдийг дараалан асаах программд.



For болон while гогцоотой Arduino программын тайлбар

Arduino while давталтын жишээний тайлбар

Arduino дахь while бүтцийг дараах байдлаар тодорхойлно.

байхад (нөхцөл)( // давтагдах тушаалууд }

Хаалтанд байгаа нөхцөл үнэн байвал while давталт тасралтгүй бөгөөд төгсгөлгүй ажиллана. while нөхцөл дэх хувьсагч өөрчлөгдөх үед давталтын гарц хүрэх тул ямар нэгэн зүйл утгыг нь өөрчилж байх ёстой. Хувьсагчийг өөрчлөх нь давталт доторх програмын код эсвэл дурын мэдрэгч, жишээлбэл HC-SR04 хэт авианы зай хэмжигчээс утгыг унших үед тохиолдож болно.

байт i=0; // давталтын өмнө хувьсагч үүсгэх шаардлагатайбайхад (i<5){ // i-ээс 5-аас бага байх үед давталт ажиллана digitalWrite(13, HIGH); саатал (500); digitalWrite(13, БАГА); саатал (500); i++; // хувьсагчийг өөрчлөх }

while функцийг ашиглах үед хувьсагчийг давталт эхлэхээс өмнө үүсгэсэн байх ёстой. Жишээ ноорог дээр LED нь мөчлөг дуусахаас өмнө таван удаа анивчих болно. Хэрэв та буржгар хаалт доторх хувьсагчийг өөрчлөхгүй бол би++, дараа нь мөчлөг эцэс төгсгөлгүй давтагдах болно. Arduino Uno-ийн while давталтаас гарах хоёр дахь арга бол мэдрэгчээс өгөгдлийг уншиж, хувьсагчийг өөрчлөхийн тулд if хэллэгийг ашиглах явдал юм.

Arduino IDE-д ашиглаж болох өөр нэг гогцоо бол дараах нөхцөлийн давталт юм. хийх зуур. Энэ бүтцийг ашиглах үед давталтын бие гүйцэтгэсний дараа нөхцөлийг шалгадаг тул нөхцөл байдлаас үл хамааран давталт дахь командуудыг дор хаяж нэг удаа гүйцэтгэнэ. Дараах кодын жишээнд LED нь мэдрэгчийн уншилтаас үл хамааран асах бөгөөд зөвхөн дараа нь дараах нөхцөлийг шалгана.

доторх ус; // давталтын өмнө хувьсагч үүсгэнэ do (digitalWrite (13, HIGH ); ус = analogRead (AO); ) байхад (ус<5) // мэдрэгчийг шалгана уу digitalWrite(13, БАГА);

while эсвэл for loop-оос хэрхэн гарах вэ

Тодорхой нөхцлөөс үл хамааран гогцооны хэсгээс гарах шаардлагатай бол операторыг ашиглана. завсарлагаэсвэл руу явах. Break мэдэгдэл нь давтахаас гарах боломжийг олгодог бөгөөд програм нь дараах командуудыг үргэлжлүүлэн гүйцэтгэх болно. Goto мэдэгдэл нь зөвхөн гогцооноос гарах төдийгүй програмыг шошгон дээрх хүссэн цэгээс үргэлжлүүлэн гүйцэтгэх боломжийг олгодог, жишээлбэл, Arduino дахь өөр давталт руу очиж болно.