// разворот на 180 (крутится вправо) void turn180R(int sl, int sr, int t) { digitalWrite(DR, HIGH); // указываем направление вращения digitalWrite(DL, LOW); // указываем направление вращения analogWrite(SR, sr); // включаем мотор и даём съехать с линии analogWrite(SL, sl); // включаем мотор и даём съехать с линии delay(t); // а вот теперь ждём чёрную линию под датчиком dl = (1024 - analogRead(LL)) / delL; while (dl > Bl) { dl = (1024 - analogRead(LL)) / delL; delay(10); } analogWrite(SR, 0); // останавливаем мотор analogWrite(SL, 0); delay(200); // нужно чуть назад покрутить левое колесо digitalWrite(DR, LOW); digitalWrite(DL, HIGH); // указываем направление вращения analogWrite(SL, sl); analogWrite(SR, sr); delay(150); analogWrite(SR, 0); analogWrite(SL, 0); delay(250); } void teleport_012(int spdL, int spdR, int x) { turnR(spdL, 1000); // поворачиваем goLine_c(spdL, spdR); // подъезжаем к кубику gripV1(0); // захватываем turn180(100, 120, 1000); // разворот goLine_c(spdL, spdR); // обратно к перекрёстку turnL(spdR, 600); // поворот // надо ехать к углу for (int z = 0; z < x + 1; z++) goLine_c(spdL, spdR); turnL(spdR, 600); goLine_c(spdL, spdR); turnL(spdR, 600); // едем к нужной зоне for (int z = 0; z < x + 1; z++) goLine_c(spdL, spdR); // выгрузка кубика turnL(spdR, 600); goLine_c(spdL, spdR); gripV1(100); turn180R(100, 120, 1000); goLine_c(spdL, spdR); // обратно к перекрёстку turnR(spdL, 600); for (int z = 0; z < x + 1; z++) goLine_c(spdL, spdR); turnR(spdL, 600); goLine_c(spdL, spdR); turnR(spdL, 600); for (int z = 0; z < x + 1; z++) goLine_c(spdL, spdR); // и мы на том перекрёстке, который обработали } void runForest() { int spdL = 200, spdR = 220; pip(); gripV1(100); bool o[5] = {1, 1, 1, 1, 0}; // для верхнего ряда bool o2[5] = {0, 0, 0, 0, 1}; // для нижнего ряда int n = 5, i; // перекрёстки... и текущий номер //===================================== goLine_c(spdL, spdR); // к 1-й зоне верхнего ряда if (o[0] == 1 && o2[0] == 0) teleport_012(spdL, spdR, 0); goLine_c(spdL, spdR); // ко 2-й зоне верхнего ряда if (o[1] == 1 && o2[1] == 0) teleport_012(spdL, spdR, 1); goLine_c(spdL, spdR); // к 3-й зоне верхнего ряда if (o[2] == 1 && o2[2] == 0) teleport_012(spdL, spdR, 2); }