No description, website, or topics provided.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
examples/UltrasonicAsync
Readme.md
Ultrasonic.cpp
Ultrasonic.h
config.h

Readme.md

Arduino Ultrasonic HC-SR04 (Russian)

Библиотека предназначена для датчика HC-SR04. Работает асинхронно, используя прерывания. Как известно, датчик посылает импульс, проходит какое-то время, возвращается эхо. И по информации об эхо датчик считает расстояние до препятсвия. В синхронных библиотеках, тот промежуто времени между отправкой импульса и получением эха система простаивает. Такое положение дел устраивает далеко не всегда. Эта библиотека позволяет использовать данное время для других задач, а при поступлении эха прерывать главный поток и обрабатывать эхо, тратя на это в десятки раз меньше времени. Библиотека дает возможность создавать объекты, которые олицетворяют датчики. В каждом объекте содержится переменная, которая отвечает за расстоение до препятствия. Изначально она равняется нулю. Программист делает запрос на обновление этой переменной вызовом метода updateDistance. Получить информацию о текущем значении переменной он может с помощью метода .getDistance(). Если датчик успевает обработать эхо, и программист выполняет .getDistance(), то он получит свежее расстояние. Если же .getDistance() вызвана сразу после .updateDistance(), то скорее всего вы получите предыдущее расстоение, так как эхо еще не дошло до датчика и прерывание не сработало.

Ограничения

Если вы используете несколько датчиков в вашем проекте, то они могут работать только последовательно. То есть, сначала опрашивается первый датчик. После того, как расстояние для первого датчика обновилось, может вступать в игру второй датчик. Все попытки заставить работать второй датчик во время работы первого будут молча игнорироваться.

Использование

Допустим, что у вас есть один датчик, подключенный к пинам 12 и 2. В данном случае, пин 2 ловит прерывание под номером 0.

#define ULTRASONIC_PIN_TRIG 12
#define ULTRASONIC_PIN_ECHO 2
#define ULTRASONIC_INTERRUPT_NUMBER 0

Объект для датчика создается не конструктором, а функцией ::create. На это есть технические причины.

Ultrasonic us = Ultrasonic::create(ULTRASONIC_PIN_TRIG, ULTRASONIC_PIN_ECHO, ULTRASONIC_INTERRUPT_NUMBER);
us.UpdateDistanceAsync();
delay(1000);
float dist = us.getDistance();