Arduino нь нөхцөлөөр програмын эхэнд очдог. Arduino гогцоонууд. Програмын текст дэх нөхцөл байдал, салбарлалт

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

Давталтын толгой төлөөгурван хэсгээс бүрдэнэ:

төлөө (эхлүүлэх ; нөхцөл ; өсөлт) (операторууд давталтаар гүйцэтгэгдэнэ)

Эхлүүлэх ажиллагааг эхлээд зөвхөн нэг удаа хийдэг. Гогцоонд орох бүрт нөхцөлийг шалгаж, хэрэв үнэн бол өгүүлбэрийн блок, өсөлтийг гүйцэтгэнэ, дараа нь нөхцөлийг дахин шалгана. Нөхцөлийн логик утга худал болох үед давталт дуусна.

Жишээ

// PWM зүү ашиглан LED-ийг бүдгэрүүлэх int PWMpin = 10; // 470 ом эсэргүүцэл бүхий 10 тээглүүр бүхий цуврал LED хүчингүй тохиргоо() ( // тохиргоо шаардлагагүй) хүчингүй давталт() ( for (int i=0; i)<= 255; i++){ analogWrite(PWMpin, i); delay(10); } }

Цикл төлөө C нь гогцооноос хамаагүй илүү уян хатан байдаг төлөөбусад програмчлалын хэл дээр, жишээлбэл, BASIC. Аль нэг буюу бүх гурван толгой элементийг орхиж болно, гэхдээ цэгтэй таслал шаардлагатай. Мөн давталтыг эхлүүлэх, нөхцөл ба өсөлтийн мэдэгдлүүд нь бие даасан хувьсагчтай ямар ч хүчинтэй C хэллэг байж болох ба хөвөгчийг оруулаад дурын С өгөгдлийн төрлийг ашиглаж болно. Эдгээр нь мөчлөгийн хувьд ер бусын юм төлөө операторын төрлүүд нь зарим стандарт бус асуудлуудыг програм хангамжийн шийдлээр хангах боломжийг олгодог.

Жишээлбэл, давталтын тоолуурын оператор дахь үржүүлгийг ашиглах нь логарифм прогресс үүсгэх боломжийг танд олгоно.

For(int x = 2; x< 100; x = x * 1.5){ println(x); }

Үүсгэсэн: 2,3,4,6,9,13,19,28,42,63,94

Өөр нэг жишээ бол дохионы түвшинг нэг мөчлөг ашиглан LED хүртэл аажмаар бууруулах эсвэл нэмэгдүүлэх төлөө:

Хүчингүй давталт())( int x = 1; for (int i = 0; i > -1; i = i + x)( analogWrite(PWMpin, i); if (i == 255) x = -1; / / хамгийн их сааталтай (10); ) ) солих хяналт

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

Давталтын толгой төлөөгурван хэсгээс бүрдэнэ:

төлөө (эхлүүлэх ; нөхцөл ; өсөлт) (операторууд давталтаар гүйцэтгэгдэнэ)

Эхлүүлэх ажиллагааг эхлээд зөвхөн нэг удаа хийдэг. Гогцоонд орох бүрт нөхцөлийг шалгаж, хэрэв үнэн бол өгүүлбэрийн блок, өсөлтийг гүйцэтгэнэ, дараа нь нөхцөлийг дахин шалгана. Нөхцөлийн логик утга худал болох үед давталт дуусна.

Жишээ
// PWM зүү ашиглан LED-ийг бүдгэрүүлэх int PWMpin = 10; // 470 ом эсэргүүцэл бүхий 10 тээглүүр бүхий цуврал LED хүчингүй тохиргоо() ( // тохиргоо шаардлагагүй) хүчингүй давталт() ( for (int i=0; i)<= 255; i++){ analogWrite(PWMpin, i); delay(10); } }

Цикл төлөө C нь гогцооноос хамаагүй илүү уян хатан байдаг төлөөбусад програмчлалын хэл дээр, жишээлбэл, BASIC. Аль нэг буюу бүх гурван толгой элементийг орхиж болно, гэхдээ цэгтэй таслал шаардлагатай. Мөн давталтыг эхлүүлэх, нөхцөл ба өсөлтийн мэдэгдлүүд нь бие даасан хувьсагчтай ямар ч хүчинтэй C хэллэг байж болох ба хөвөгчийг оруулаад дурын С өгөгдлийн төрлийг ашиглаж болно. Эдгээр нь мөчлөгийн хувьд ер бусын юм төлөө операторын төрлүүд нь зарим стандарт бус асуудлуудыг програм хангамжийн шийдлээр хангах боломжийг олгодог.

Жишээлбэл, давталтын тоолуурын оператор дахь үржүүлгийг ашиглах нь логарифм прогресс үүсгэх боломжийг танд олгоно.

For(int x = 2; x< 100; x = x * 1.5){ println(x); }

Үүсгэсэн: 2,3,4,6,9,13,19,28,42,63,94

Өөр нэг жишээ бол дохионы түвшинг нэг мөчлөг ашиглан LED хүртэл аажмаар бууруулах эсвэл нэмэгдүүлэх төлөө:

Хүчингүй давталт() ( int x = 1; for (int i = 0; i > -1; i = i + x)( analogWrite(PWMpin, i); if (i == 255) x = -1; // хамгийн их сааталтай (10); ) ) солих удирдлага

", бид хянагчийн ажиллагааг зохион байгуулахын тулд "for" гогцоог хэрхэн ашиглах талаар сурсан. Энэ төрлийн гогцоо нь хаа сайгүй хэрэглэгддэг бөгөөд "гогцооны үйл ажиллагааны хэрэгцээг" нөхөхөөс илүү юм. Гэсэн хэдий ч өөр төрлийн гогцоо байдаг - "while". Энэ нь for давталтаас илүү сайн биш, зөвхөн өөр өөр зарчмуудыг ашигладаг.

Ихэнх тохиолдолд та хоёр төрлийн гогцооны алийг нь ашиглахаа сонгож болно. Хэрэглэгч шаардлагатай өгөгдлийг оруулах хүртэл програмыг түр зогсоохын тулд бид "while"-г ашигладаг. Энэ хичээлээр бид жишээ болгон Arduino платформ ашиглан энэ гогцоо хэрхэн ажилладагийг нарийвчлан авч үзэх болно.

2 LED-ээс бүрдэх хэлхээтэй үргэлжлүүлэн ажиллацгаая.

Нэмж дурдахад бид 14-р хичээл дээр дуусгасан кодтойгоо үргэлжлүүлэн ажиллах болно.

Өнгөрсөн рүү буцах: хянагч нь хэрэглэгчээс өгөгдөл авахыг хүсч, оролтыг хүлээж, үр дүнгийн утгыг хувьсагчид оноодог. анивчих дугаар НогоонТэгээд blinkNumberRed. Ингэснээр хэрэглэгч 2 LED тус бүр хэдэн удаа анивчихыг хянах боломжтой.

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

Энэ нь хэрхэн ажилладагийг олж мэдье:

int z= 1 ; // хувьсагчийг зарлаж, түүнд 1 гэсэн утгыг өгнө

байхад (z<=10) { //запускаем цикл байхад

Цуврал. println(z); //хувьсагчийн одоогийн утгыг гарганаz цуваа портоор дамжуулан

z= z+1 // хувьсагчийн утгыг нэмэгдүүлэхz1-ээр

) // давталтыг дуусгах

Хаалтанд тодорхойлсон "нөхцөл" үнэн байвал while давталт тушаалуудыг үргэлжлүүлэн гүйцэтгэнэ. Дээрх жишээн дээр z нь 10-аас бага буюу тэнцүү байх үед давталт тушаалуудыг үргэлжлүүлэн гүйцэтгэх болно. Давталтын бие нь 2 командыг гүйцэтгэдэг:

  • Цуваа портоор хувьсагчийн утгыг гаргах;
  • Хувьсагчийн утгыг 1-ээр нэмэгдүүлэх (шинжлэх ухааны үүднээс өсгөх гэж нэрлэдэг).

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

Нөхцөл байдлын үнэнийг шалгах замаар гогцоо нь ажлаа эхэлдэг. Хэрэв z нь 10-аас бага эсвэл тэнцүү бол програм нь давталтыг ажиллуулна. Дараа нь нөхцөл байдлыг дахин шалгана гэх мэт. Хувьсагчийн утга z = 11 болоход нөхцөл үнэн байхаа болино. Програм нь давталтыг гүйцэтгэхгүй бөгөөд давталтын буржгар хаалтны дараа шууд дараагийн мөрөнд очно.

Хангалттай онол, практикт шилжье. Эх кодын for гогцоонуудыг while давталтаар орлъё.

Гялсгуурыг FOR циклээр гүйцэтгэдэг:

хувьд (int i = 1; i<= blinkNumberGreen; i++) // эхлэх мөчлөгтөлөө

{

Цуврал. хэвлэх("Ногоон анивчсан");

Serial.println(i);

digitalWrite(ногоон LED, HIGH); //асаах ногоон Гэрэл ялгаруулах диод

саатал(цаг хугацааOnGreenLed); //бид хүлээж байна

digitalWrite(ногоон, LOW); //хаах ногоон Гэрэл ялгаруулах диод

саатал(цаг OffGreenLed); //бид хүлээж байна

}

WHILE мөчлөг дэх гэрэлтэгч:

int би=1; //хувьсагчийг зарлаж түүнд 1 гэсэн утгыг өгнө

байхад (i<= blinkNumberGreen)

{ // эхлэх мөчлөгбайхад

Serial.print("Ногоон нүдээ анив «);

Serial.println(i);

digitalWrite(ногоон LED, ӨНДӨР); //асаах ногоон Гэрэл ялгаруулах диод

саатал(цаг хугацааOnGreenLed); //бид хүлээж байна

digitalWrite(ногоон LED, БАГА); //хаах ногоон Гэрэл ялгаруулах диод

саатал(цаг OffGreenLed); //бид хүлээж байна

би= би+1 //хувьсагчийн утгыг 1-ээр нэмэгдүүлнэ

}

Програмаа хадгалж, програм хангамжийг хянагч руу ачаална уу. Үр дүнг харцгаая.

Үг хэллэг ашиглан гогцоо төлөөТэгээд байхаднь 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 гогцоонуудыг авч үзсэн. Та эдгээр операторуудыг бараг ямар ч нарийн төвөгтэй схемээс олж болно, учир нь гогцоогүйгээр өгөгдөл дээр олон үйлдэл хийх боломжгүй болно. Гогцоонуудын синтакс дээр төвөгтэй зүйл байхгүй - та тэдэнд амархан дасаж, төслүүддээ идэвхтэй ашиглаж болно.

/ /

Операторын хувьд

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

Давталтын толгой төлөөгурван хэсгээс бүрдэнэ:

төлөө (эхлүүлэх; нөхцөл; өсөлт) (операторууд давталтаар гүйцэтгэгдэнэ)

Эхлүүлэх ажиллагааг эхлээд зөвхөн нэг удаа хийдэг. Гогцоонд орох бүрт нөхцөлийг шалгаж, хэрэв үнэн бол өгүүлбэрийн блок, өсөлтийг гүйцэтгэнэ, дараа нь нөхцөлийг дахин шалгана. Нөхцөлийн логик утга худал болох үед давталт дуусна.

Жишээ

// PWM зүү ашиглан LED-ийг бүдгэрүүлэх int PWMpin = 10; // 470 ом эсэргүүцэл бүхий 10 тээглүүр бүхий цуврал LED хүчингүй тохиргоо() ( // тохиргоо шаардлагагүй) хүчингүй давталт() ( for (int i=0; i)<= 255; i++){ analogWrite(PWMpin, i); delay(10); } }

Цикл төлөө C нь гогцооноос хамаагүй илүү уян хатан байдаг төлөөбусад програмчлалын хэл дээр, жишээлбэл, BASIC. Аль нэг буюу бүх гурван толгой элементийг орхиж болно, гэхдээ цэгтэй таслал шаардлагатай. Мөн давталтыг эхлүүлэх, нөхцөл ба өсөлтийн мэдэгдлүүд нь бие даасан хувьсагчтай ямар ч хүчинтэй C хэллэг байж болох ба хөвөгчийг оруулаад дурын С өгөгдлийн төрлийг ашиглаж болно. Эдгээр нь мөчлөгийн хувьд ер бусын юм төлөөоператорын төрлүүд нь зарим стандарт бус асуудлуудыг програм хангамжийн шийдлээр хангах боломжийг олгодог.

Жишээлбэл, давталтын тоолуурын оператор дахь үржүүлгийг ашиглах нь логарифм прогресс үүсгэх боломжийг танд олгоно.

For(int x = 2; x< 100; x = x * 1.5){ println(x); }

Үүсгэсэн: 2,3,4,6,9,13,19,28,42,63,94

Өөр нэг жишээ бол дохионы түвшинг нэг мөчлөг ашиглан LED хүртэл аажмаар бууруулах эсвэл нэмэгдүүлэх төлөө:

Хүчингүй давталт())( int x = 1; for (int i = 0; i > -1; i = i + x)( analogWrite(PWMpin, i); if (i == 255) x = -1; / / хамгийн их сааталтай (10); ) ) солих хяналт