Нужна помощь с кодом

Тема в разделе "Флудилка", создана пользователем Maxim Prokhor, 1 сен 2015.

  1. Maxim Prokhor

    Maxim Prokhor Нуб

    Добрый день,

    Ребят, нужна помощь. есть код но он функционирует не так как мне хочется.
    Задача стояла такая. Заставить машинку ехать по заданному маршруту и при обнаружении препятствия останавливаться. как только препятствие исчезало из поле зрения сенсора продолжать ехать далее по маршруту.
    Написал код по которому машинка едит пока 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);
    }
     
  2. Unixon

    Unixon Оракул Модератор

    Последнее редактирование: 1 сен 2015
  3. Maxim Prokhor

    Maxim Prokhor Нуб

    Спасибо большое за ссылку.
     
  4. DrProg

    DrProg Вечный нерд

    Строго говоря, при желании можно измерять и внутри delay(). ;)
     
    ИгорьК нравится это.
  5. Unixon

    Unixon Оракул Модератор

    Ну да, но это уже продвинутый уровень :)