Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
В первой части этого проекта мы построили оборудование для прототипа на двух макетных платах.
В этой части мы рассмотрим код, то, как он работает, а затем протестируем его.
Обязательно посмотрите видео выше, чтобы увидеть полный обзор кода и демонстрацию работающего кода.
Шаг 1: ВЕДУЩИЙ и ВЕДОМЫЙ в одном коде
Код состоит из двух частей, но внутри одного файла. Я использую #define и #ifdef, чтобы определить, какой код будет скомпилирован или проигнорирован, поэтому я могу отделить любой код, предназначенный только для макета MASTER, и код, предназначенный только для макета SLAVE.
По сути, если определение MASTER найдено, то любой код, который находится внутри блока кода MASTER, будет скомпилирован, и любой код за пределами этого блока будет удален во время компиляции.
#ifdef MASTER
// Код мастера находится здесь
#еще
#define SLAVE
// Здесь указан специальный код ведомого устройства
#endif
Я также использую ту же технику для #define SLAVE, когда MASTER скомпилирован, поэтому вам нужно только беспокоиться об определении MASTER или не включать определение SLAVE.
Шаг 2. Модули BLUETOOTH обмениваются данными посредством последовательного чтения и записи
В этом проекте только макет SLAVE общается с макетом MASTER. МАСТЕР никогда не отвечает, он только слушает, а затем действует в соответствии с поступающими данными.
Модули говорят и слушают, используя встроенный класс Serial в экосистеме кодирования Arduino.
Модули Bluetooth обмениваются данными на скорости 38400 бод, поэтому оба кодовых тракта инициализируют свою последовательную связь, используя:
Serial.begin (38400);
И РАБОТА использует:
Serial.write (данные здесь);
Чтобы поговорить с МАСТЕРОМ, МАСТЕР использует:
данные = Serial.read ();
Для прослушивания последовательного потока, чтения его содержимого и сохранения его внутри переменной.
Шаг 3: управление гонкой
SLAVE сообщает МАСТЕРУ, находится ли он в режиме гонки или готовности, с помощью зеленой кнопки, подключенной к его микроконтроллеру. В режиме готовности ИК-датчики ничего не делают, и MASTER покажет на дисплее 8 черточек, показывая, что он находится в режиме готовности.
Когда ВЕДОМЫЙ сообщает МАСТЕРУ, что гонка собирается начаться, ВЕДОМЫЙ начинает опрашивать ИК-датчики на своей стороне (начало гоночной трассы), чтобы машины могли проехать под ним.
Когда каждая машина проезжает под каждым ИК-датчиком, она отправляет A (автомобиль 1) или B (автомобиль 2) на МАСТЕР.
Когда МАСТЕР получает оценку A или B, он включает таймер для этой конкретной машины, а затем ждет, пока машина проедет под соответствующим ИК-датчиком на финишной прямой.
Дисплей обновляется каждые 50 мс для отображения текущего времени для каждой машины в секундах с двумя десятичными знаками.
Как только обе машины финишируют, МАСТЕР решает, какая машина была самой быстрой, и мигает это время на дисплее, указывая на победителя.
Шаг 4: остальная часть кода
Остальная часть кода - это просто служебный код, который либо управляет отображением данных на 8-значном дисплее, либо обрабатывает логику нажатия кнопок и т. Д.
В конце видео во вводном разделе этого проекта я показываю пример кода, работающего на двух макетных платах, поэтому обязательно ознакомьтесь с ним!
Вы можете взять код этого проекта из моего репозитория на github.
Шаг 5: Что дальше?
Вот и все … в части 3 мы рассмотрим перемещение компонентов с макета на что-то более постоянное … следите за обновлениями!
Надеюсь, вам нравится этот проект!
Следуй за мной на:
www.youtube.com/c/unexpectedmaker
twitter.com/unexpectedmaker
www.facebook.com/unexpectedmaker
www.instagram.com/unexpectedmaker
www.tindie.com/stores/seonr/