Общие сведения
В этом уроке мы соберём устройство на основе Trema модуля GPS с отображением текущей скорости передвижения или часов реального времени.
Видео
Нам понадобится
- Arduino/Piranha ULTRA
- Battery Shield
- Trema Shield
- Trema модуль GPS
- Set Box XL (конструктор ПВХ)
- Trema-модуль Кнопка
- Четырехразрядный индикатор LED
Подключение
Для удобства подключения мы воспользуемся Trema Shield
Установим Battery Sheild
Установим Trema Shield
Подключим модули
Скетч проекта
Необходимо установить библиотеки
Если Вы не знаете как устанавливать библиотеки в Arduino IDE - Вы можете узнать по этой ссылке
// Подключаем библиотеки #include <iarduino_4LED.h> #include <iarduino_GPS_NMEA.h> #include <iarduino_GPS_ATGM336.h> #include <Battery_Shield.h> // Определяем вывод кнопки #define BUTTON 3 // Инстанцируем объекты библиотек iarduino_4LED dispLED(4,5); iarduino_GPS_NMEA gps; iarduino_GPS_ATGM336 SettingsGPS; Battery_Shield pwrBank; // Флаг переключения режима работы bool mode = false; // Флаг состояния двоеточия bool colon = false; // Время последнего переключения двоеточия unsigned long colonMillis = 0; // Время последнего переключения кнопки unsigned long buttonMillis = 0; void setup() { // Инициируем объект Battery Shield pwrBank.begin(0.0128f); // Инициируем последовательный порт Serial.begin(9600); // Инициируем работу с модулем GPS SettingsGPS.begin(Serial1); // Инициируем интерпретацию строк NMEA gps.begin(Serial1); // Устанавливаем часовой пояс gps.timeZone(3); // Устанавливаем скорость передачи данных модулем SettingsGPS.baudrate(9600); // Указываем, что данные можно получать от спутников GPS и GLONASS SettingsGPS.system(GPS_GP, GPS_GL); // Указываем, что нам необходимы только строки с текущей скоростью и временем SettingsGPS.composition(NMEA_VTG, NMEA_ZDA); // Устанавливаем режим "Транспортное средство" SettingsGPS.model(GPS_VEHICLE); // Указываем частоту обновления SettingsGPS.updaterate(10); // Инициируем четырёхразрядный дисплей dispLED.begin(); } void loop() { // Проверяем состояние кнопки checkButton(); // Если флаг режим работы установлен if (mode) { // Отображаем время displayTime(); } // Иначе else { // Отображаем скорость displaySpeed(); } } // Функция проверки состояния кнопки void checkButton() { // Если на выводке логическая "1" if (digitalRead(BUTTON)) { // Очищаем дисплей dispLED.clear(); // Устраняем дребезг if ((millis() - buttonMillis > 100) && digitalRead(BUTTON)) { // Сохраняем время нажатия buttonMillis = millis(); // Меняем режим работы mode = !mode; } } } // Функция отображения скорости void displaySpeed() { // Считываем данные из модуля gps.read(); // Если курс ошибочен if (gps.errCrs) { // Выводим буку "Е" на дисплей (Error) dispLED.print("e"); } // Иначе else { // Выключаем двоеточие дисплея dispLED.point(0, 0); // Выводим скорость dispLED.print(gps.speed); } } // Функция отображения времени void displayTime() { // Считываем данные из модуля gps.read(); // Сохраняем данные в локальные переменные uint8_t H = gps.Hours; uint8_t m = gps.minutes; // Сохраняем флаг ошибки в локальную переменную bool error = gps.errTim; // Если время ошибочно if (error) { // Выводим символы "E" и "Т" на дисплей (Error Time) dispLED.print("et"); } // Если прошла секунда, if (millis() - colonMillis > 1000) { // меняем состояние флага двоеточия colon = !colon; // Записываем текущее время colonMillis = millis(); // Если время верно if (!error) // Обновляем его на дисплее dispLED.print(H, m, TIME); } // Если флаг двоеточия установлен if (colon) // Включаем двоеточие на дисплее dispLED.point(0, 1); // Иначе else // Выключаем двоеточие на дисплее dispLED.point(0, 0); }
Обсуждение