Добрый день, Ребят, нужна помощь. есть код но он функционирует не так как мне хочется. Задача стояла такая. Заставить машинку ехать по заданному маршруту и при обнаружении препятствия останавливаться. как только препятствие исчезало из поле зрения сенсора продолжать ехать далее по маршруту. Написал код по которому машинка едит пока 3 сек вперед и 2 сек назад. добавил сенсор который должен останавливать двигатели при обнаружении препятствия менее 30 см. но он стал замерять и срабатывать только после выключения двигателей, а не во время их работы как я планировал (то есть пока двигатели не проработают вперед 3 сек или назад он не замеряет и не останавливает их). вот код. кто что может подсказать? #define RELAY_PIN_R 18 #define RELAY_PIN_L 19 #define SPEED_1 5 #define DIR_1 4 #define SPEED_2 6 #define DIR_2 7 int echoPin = 48; int trigPin = 49; void setup() { Serial.begin (9600); // Настраивает выводы платы 4, 5, 6, 7 на вывод сигналов for(int i = 4; i < 50; i++) pinMode(i, OUTPUT); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { int duration, cm; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); cm = duration / 58; Serial.print(cm); Serial.println(" cm"); if (cm<30) // Если расстояние < 30 сантиметром выкл всех двигателей { analogWrite(SPEED_1, 0); digitalWrite(DIR_1, HIGH); analogWrite(SPEED_2, 0); digitalWrite(DIR_2, HIGH); digitalWrite(RELAY_PIN_R, LOW); digitalWrite(RELAY_PIN_L, LOW); } else { // 2 сек вперед analogWrite(SPEED_1, 225); digitalWrite(DIR_1, HIGH); analogWrite(SPEED_2, 225); digitalWrite(DIR_2, HIGH); delay(3000); // стоп двигатели analogWrite(SPEED_1, 0); digitalWrite(DIR_1, HIGH); analogWrite(SPEED_2, 0); digitalWrite(DIR_2, HIGH); // 2 сек вперед digitalWrite(RELAY_PIN_R, HIGH); digitalWrite(RELAY_PIN_L, HIGH); delay(2000); // стоп двигтели digitalWrite(RELAY_PIN_R, LOW); digitalWrite(RELAY_PIN_L, LOW); } delay(100); }
Естественно не работает. Кто же вам внутри delay() что-то измерять будет? Посмотрите как написан код на вики, вам нужно так же сделать. http://wiki.amperka.ru/робототехника:робот-с-датчиками-линии-на-arduino