Не так давно увлёкся темой с ардуино, а всё началось с того, что посмотрел что люди делают с помощью него. Не долго думая, заказал в Китае набор для осовоения и через 2 недели он у меня уже был на руках. Для начала я решил сделать простые проекты из примеров. Заставить зажигаться диод, выводить на однозначное табло какой-то симов, вывод слов на LED дисплей и многое по мелочи. И тут мои руки дошли до датчика, который определяет расстояние до предмета…

Как и ко всем примерам, к нему прилагался код-пример. Но он был настолько наворочен, непонятен, что я плюнул и пошёл искать нужную библиотеку для работы с этим датчиком. Почти сразу наткнулся на библиотеку Ultrasonic.h. Работа с ней стало до безобразие простой и код-пример мне помог разобраться ещё быстрее. Не долго думая, протестировал датчик с этой библиотекой и увидел то что мне было нужно: вывод в мониторе порта расстояния до объекта в см.

Ну что вы скажите. Ты же всё скопировал! Разве это норма? Да. И я согласен с этим. Но это только начало пути. Тем более что на этом я не остановился. Мне захотелось вывести значения датчика на LED дисплей. Но тут опять же, встала задача. У меня есть два проекта, которые работают отдельно друг от друга. Мне нужно было совместить их и передать значение переменной на дисплей. И что вы думаете? Естественно решил просто совместить два кода! Благо C++ учил немного, а язык в ардуинке очень схож с ним. Но, к сожалению ничего не вышло. тот код, что предлагали был громоздким и не мог сделать то, что я хотел. Потому не долго думая просто снёс всё и решил найти в интернете библиотеку. И оказалось, что она уже была, мне только нужно было её подключить #include <LiquidCrystal.h>.

Немного потупя с подключением дисплэй, и напутав некоторые значения, наконец мне удалось выводить на дисплэй нужные мне слова. В итоге всех этих магий поиска, через какое-то время у меня вышел примерно такой код:

#include <Ultrasonic.h> // подключаем библиотеку
#include <Wire.h>  // подключаем библиотеку Wire
#include <LiquidCrystal.h>


// обьявляем обьект ultrasonic
Ultrasonic ultrasonic(12, 13);
 
int dist = 0; // объявляем переменную для расстояния
// Инициализируем объект-экран, передаём использованные 
// для подключения контакты на Arduino в порядке:
// RS, E, DB4, DB5, DB6, DB7
LiquidCrystal lcd(4, 5, 8, 9, 10, 11);

void setup () {
 Serial.begin(9600); // отрываем порт для консоли 
     // устанавливаем размер (количество столбцов и строк) экрана
    lcd.begin(16, 2);    
            
}
 
void loop() {
  dist = ultrasonic.distanceRead();         
  // выводим значение в консоль  
  Serial.print("Расстояние до объекта : ");
  Serial.print(dist);
  Serial.println(" см");
  delay(50);
  lcd.print("Dist: ");  
  lcd.setCursor(5, 1); 
  lcd.print(dist);
  delay(1000);
  lcd.clear();
}

Да, скорее всего он не идеален. Да, что-то возможно я не учёл. Но ведь только учусь. В итоге у меня вышло собрать свою идею в один проект, который работает как мне хотелось.

В самом начале идёт определение подключения датчика расстояния и к каким пинам он подключен (в моём случае это 12 и 13). Далее можно заметить по комментариям, идут также определение пинов дисплея, а также создаётся переменная в которую будет писаться расстояния (по умолчанию равна 0). В бесконечном цикле loop решил оставить и вывод в консоль и на LED.

Схема подключения на первый день:

Зачем я всё это пишу? Да скорее для себя, чтоб потом вспомнить что я воротил в самом начале и как мыслил. Ведь интересно же. Ну и возможно чем-то когда-то помогу такому же новичку как я.