Делаю робота шпиона на драйвере 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); } }
impulseTime=pulseIn(pin, value, timeout); //This routine can be used only if interrupts are activated. //По-русски - эта функция может быть использована только при активированных прерываниях. А попробовать другие пины ?
Вроде всё правильно.У меня так Код (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