Ультразвуковой датчик просто определяет такое же расстояние
int tPin = 11;
int ePin = 12;
long duration, inches, cm;
void setup()
{
Serial.begin(9600);
pinMode(tPin, OUTPUT);
pinMode(ePin, INPUT);
pinMode(2, OUTPUT);
}
void loop()
{
digitalWrite(tPin, LOW);
delayMicroseconds(5);
digitalWrite(tPin, HIGH);
delayMicroseconds(10);
digitalWrite(tPin, LOW);
duration = pulseIn(ePin, HIGH);
cm = (duration / 2) / 29.1;
inches = (duration / 2) / 74;
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(100);
if (inches <= 10) {
digitalWrite(2, HIGH);
delay(50);
digitalWrite(2, LOW);
delay(50);
}
else {
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
}
}
Последовательная печать отображает то же расстояние, что и первое обнаружение. Как я могу это исправить?
@D3DSEC, 👍0
Обсуждение1 ответ
▲ 1
Прежде всего вам нужно сделать так, чтобы см, дюймы и продолжительность плавали, чтобы быть более точным. Во-вторых, нужно сделать задержку между триггерами 2 и 10 микросекунд. В целом, если я не ошибаюсь, вы можете использовать приведенный ниже код, не меняя схему.
int tPin = 11;
int ePin = 12;
float duration, inches, cm; //числа с плавающей запятой, чтобы сделать результат более точным
void setup()
{
Serial.begin(9600);
pinMode(tPin, OUTPUT);
pinMode(ePin, INPUT);
pinMode(2, OUTPUT);
}
void loop()
{
digitalWrite(tPin, LOW);
delayMicroseconds(2); // Задержка 2 микросекунды
digitalWrite(tPin, HIGH);
delayMicroseconds(10); // Задержка 10 микросекунд
digitalWrite(tPin, LOW);
duration = pulseIn(ePin, HIGH);
cm = duration / 58.2; //Вместо продолжительности/2/28.1
inches = cm / 2.54; //Вы можете использовать cm, который был создан ранее для конвертации
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(100);
if (inches <= 10) {
digitalWrite(2, HIGH);
delay(50);
digitalWrite(2, LOW);
delay(50);
}
else {
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
}
}
,
@Ekin Karadağ
Смотрите также:
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Какое число постоянно выдает? Также имейте в виду, что при делении
/ 2
и/ 74
вы выполняете целочисленное деление, вы должны изменить их на значения с плавающей запятой, а также сделатьcm
иinches
плавающими
., @Maximilian GerhardtВы уверены, что он определяет такое же расстояние? Как далеко вы пытались отодвинуть объект от датчика?, @AnT