Проект ультразвукового датчика Arduino
Я новичок в Arduino, и я пытаюсь сделать проект с ультразвуковым датчиком, я использую grove ultrasonic ranger, а не HC-SR04, и я уже сделал тест с расстоянием, и он работал очень хорошо, но теперь мне нужна помощь с кодом.
Мне нужно создать вектор, сохранить значения расстояния до после вычисления скорости через расстояние и время расчета, но в случае моего проекта его использовать в открытых местах, поэтому, будут времена, когда расстояние станет "максимум", потому что никто не в серии, поэтому мне нужно условие, чтобы исключить эти значения из массива (максимальное расстояние печатных когда датчик не чувствую ничего 516 см)
У меня нет опыта кодирования Arduino, поэтому, пожалуйста, помогите мне, в anex есть мой код для базового сканирования.
#include "Ultrasonic.h"
Ultrasonic ultrasonic(7);
void setup()
{
Serial.begin(9600);
}
void loop()
{
long RangeInCentimeters;
Serial.println("The distance to obstacles in front is: ");
// two measurements should keep an interval
RangeInCentimeters = ultrasonic.MeasureInCentimeters();
if(RangeInCentimeters > 400)
Serial.print ("distancia nula");
else
Serial.print(RangeInCentimeters);//0~400cm
Serial.println(" cm");
delay(1000);
}
@rokazz, 👍1
Обсуждение1 ответ
Если вы не знаете, сколько точек данных будет записано, загляните в векторы или внешнее запоминающее устройство. В качестве альтернативы вы можете использовать круговой массив, если вы не возражаете против потери записанных данных через некоторое время.
Если вы знаете, сколько точек данных будет записано, будет достаточно базового массива.
Что касается исключения недопустимых значений:
// Продолжаем пытаться получить действительную точку данных
While (RangeInCentimeters > 512 && RangeInCentimeters < 400)
{
delay(200); // Минимальное значение этой задержки зависит от частоты дискретизации вашего датчика
RangeInCentimeters = ultrasonic.MeasureInCentimeters();
}
//... Хранить данные в массиве/связанном списке/и т.д.
Я изменил ваш максимальный диапазон на 512, потому что это, скорее всего, максимальное реальное значение (2^9 = 512).
пока
?......., @Juraj
почему бы не позволить циклу() замкнуться?, @Juraj
это для спортсменов по легкой атлетике, поэтому я сделал расчет, и он будет печатать около 10 ходов на каждом круге, я думаю о проблеме с памятью, на каждом круге массив размещает значения, вычисляет скорость и вставляет другой массив, затем сбрасывает массив, поэтому с 2 массивами, 1 для скорости и 1 для данных, сброс массива данных не решит проблему с памятью?, @rokazz
Наличие цикла while позволит вам уменьшить значение задержки внутри и получить следующее действительное измерение как можно скорее, вместо того, чтобы ждать полных 1000 мс. Кроме того, что в этом нет необходимости., @Rekamanon
@rokazz Только для 10 точек данных просто используйте массив. Однако я бы предложил изменить значение задержки, потому что за 10 секунд (время, необходимое для выполнения 10 измерений) бегун пройдет намного дальше, чем 512 см, @Rekamanon
да, время задержки будет 100 или 200, это зависит от точности результатов, @rokazz
я думал о другом решении, сначала я думал о датчике, указывающем на спортсмена, бегущего по прямой линии поля, и с помощью данных вычисляю скорость, но я также могу заставить его стоять на всем круге, когда бегун проходит, он начинает время, а когда проходит снова, останавливается и вычисляет расстояние поля и время, давая скорость, что вы, ребята, думаете об этом?, @rokazz
@rokazz Это тоже сработало бы, но если им удастся пройти через диапазон обнаружения датчика менее чем за 100/200 мс, он их не обнаружит. Посмотрите на таблицу данных и определите частоту дискретизации, чтобы выяснить, насколько низкое значение задержки вы можете получить. Чем ниже он, тем меньше вероятность, что вы их пропустите., @Rekamanon
- Программа arduino выдаёт ошибку expected //primary-expression before ')' token error: //expected ';' before '}' token E
- (Код ультразвукового датчика: такого файла или каталога нет)
- Несколько неблокирующих таймеров обратного отсчета?
- Датчик HC-SR505 PIR выдает только HIGH уровень
- Отправка данных из ESP8266 в PHP
- Определение уровня заряда с помощью датчика тока (ACS758) с arduino uno
- Использование YS-IRTM с Arduino Uno
- Как объединить два разных скетча датчика в один полный скетч?
вопрос в том, как это сделать, создать вектор, который сохранит расстояния выше 400 см и исключит остальные, @rokazz
Вам нужно расстояние **до** 400 см и игнорировать все остальное, или **более** 400 см и игнорировать все значения ниже 400 см?, @Tom