Робот шпион

Тема в разделе "Arduino & Shields", создана пользователем Дубастардио, 11 дек 2018.

  1. Делаю робота шпиона на драйвере MX150B. Не могу понять в чём проблема, что не так? ДАльномер в порт выдаёт одни нули(он рабочий, подключал другой модуль тоже нули)
    #define Trig 7
    #define Echo 8
    unsigned int impulseTime=0;
    float distance_sm=0;
    int IN3 =10; // Input3 подключен к выводу 5
    int IN4 = 11;
    int IN1 = 8;
    int IN2 = 9;
    void setup()
    {
    pinMode (IN4, OUTPUT);
    pinMode (IN3, OUTPUT);
    pinMode (IN1, OUTPUT);
    pinMode (IN2, OUTPUT);
    pinMode(Trig, OUTPUT); //инициируем как выход
    pinMode(Echo, INPUT); //инициируем как вход
    Serial.begin(9600);
    }
    void loop()
    {
    digitalWrite(Trig, HIGH); // Подаем импульс на вход trig дальномера
    delayMicroseconds(10); // равный 10 микросекундам
    digitalWrite(Trig, LOW);
    impulseTime=pulseIn(Echo, HIGH); // Измеряем длину импульса
    distance_sm=(float)impulseTime/58; // Пересчитываем в сантиметры
    Serial.println(distance_sm); // Выводим на порт
    delay(100);
    if (distance_sm>20)
    {
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    delay(300);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
    delay(300);
    }
    else
    {
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
    }
    }
     
  2. Ariadna-on-Line

    Ariadna-on-Line Гуру

    impulseTime=pulseIn(pin, value, timeout); //This routine can be used only if interrupts are activated.
    //По-русски - эта функция может быть использована только при активированных прерываниях.
    А попробовать другие пины ?
     
    Последнее редактирование: 12 дек 2018
  3. Airbus

    Airbus Радиохулиган Модератор

    Вроде всё правильно.У меня так
    Код (C++):
    #define Trig 9
    #define Echo 8

    unsigned int impulseTime=0;
    unsigned int distance_sm=0;

    void setup()
    {
      pinMode(Trig, OUTPUT); //инициируем как выход
      pinMode(Echo, INPUT); //инициируем как вход
      pinMode(ledPin, OUTPUT);
      Serial.begin(9600);
      // задаем скорость общения. В нашем случае с компьютером
    }

    void loop()
    {
      digitalWrite(Trig, HIGH);
      // Подаем импульс на вход trig дальномера
      delayMicroseconds(10); // равный 10 микросекундам
      digitalWrite(Trig, LOW); // Отключаем
      impulseTime=pulseIn(Echo, HIGH); // Замеряем длину импульса
      distance_sm=impulseTime/58; // Пересчитываем в сантиметры
      Serial.println(distance_sm); // Выводим на порт
       delay(100);
      /* ждем 0.1 секунды, Следующий импульс может быть излучён, только после исчезновения эха от предыдущего.
       Это время называется периодом цикла (cycle period).Рекомендованный период между импульсами должен быть не менее 50 мс.  */

    }
    unsigned int distance_sm=0; Замените float на unsigned int
     
    ДеКодер нравится это.