Наши контакты: +380958663605

inhelp@i.ua

5 Апрель 2015

Комментарии:

2
 Апрель 5, 2015
 2
График

Для многих пользователей  OLED дисплеев, я думаю станет полезным мой сегодняшний урок, в котором я расскажу как отобразить график полученных данных на экране дисплея в реальном времени. Для получения значений температуры и атмосферного давления я использовал датчик BMP085, о котором рассказывал ранее в статье Подключение датчика BMP180 к Arduino. Ну и для примера предлагаю посмотреть на фото ниже с примерами отображения двух различных типов графиков на OLED дисплее.

График

А теперь приступим к отображению наших данных на дисплее и созданию первого графика. Для работы нам понадобится две библиотеки, первая для работы с нашим датчиком BMP085, а вторая для работы с OLED дисплеем…

Adafruit BMP085 (3.7 KiB)

OLED I2C UKR RUS FONTS (375.6 KiB)

Вторая библиотека слегка переделанная мной ( добавлен украинский и русский шрифт), за основу была взята библиотека OLED_I2C …

Теперь откроем тестовый скетч из библиотеки  Adafruit BMP085 в нашу плату и посмотрим что он выдает в мониторе порта и какие данные нам понадобятся для построения графика.

adafruit_bmp180_test

Для начала переведем показания атмосферного давления из Ра в мм.рт.ст.  разделив значения переменной bmp.readAltitude() на 133.3 и удалим строки отображением ненужных нам данных.

Пример отображения данных

Пример отображения данных

Пример переделанного скетча

Теперь когда все готово, переделаем скетч для отображения на OLED дисплее надписей «Температура» и «Давление» с отображением показаний температуры  и атмосферного давления.

Пример отображения температуры и давления

Пример отображения температуры и давления

Как отображать надписи на русском и украинском языках я рассказал в статье Русские и украинские шрифты для OLED I2C дисплея

Для отображения сплошного графика я решил использовать рисование линий от точки X к точке Y, и смещать график вправо при каждом измерении температуры, а для построения графика атмосферного давления используем X и Z

Строение графика

И для того что бы отображать график, не сверху вниз, инвертируем значения температуры, на примере кода

Например, мы будем измерять температуру в диапазоне от 20 до 30 градусов, а рисовать линии в координатах от 32 пикселя до 8 пикселя (снизу вверх). Для рисования графика температуры на дисплее используем

и еще добавим в скетч код

где после каждого замера температуры и отображения линии будет смещать координаты вправо, а код

будет переводить график в начальную точку 0, после заполнения дисплея 127 линиями графика и очищать дисплей. Аналогично проделаем и для отображения графика изменений атмосферного давления.

Теперь у нас на экране графики отобразятся как на фото ниже.

График 1    График 2

Ну а теперь перейдем к отображению графика, который будет отображать линейно изменения температуры. Диапазон отображения изменений температуры будет от 23,5 градусов до 30 градусов. Для более точного отображения изменений 0.1 градуса умножим значение температуры на 10 и инвертируем показания.

Теперь график при изменении температуры на 0.1 градус будет отклонятся на 1 px. В этом скетче у нас уже будут задействованы три переменные X, Y, Z.

Линейный график

При считывании температуры переменная Z — это предыдущее значение температуры с координатой X, а переменная Y — это текущее значение температуры с координатой X+1. После прохождения цикла измерения переменная Z принимает значение Y, и координата X теперь равна предыдущему значению X+1. 

Отображение данных проходит цикл из 127 измерений, и обновляет экран.

Ну а теперь скетч для тестирования

У вас должно получится как на фото.

Линейный график

Используемые компоненты:

0.96″ I2C 128X64 OLED дисплей   —  3.99$
Датчик атмосферного давления BMP180  —  3.68$

На этом все, до скорых встреч

2 responses on “Отображение графика на OLED дисплее

  1. Юрий:

    Здравствуйте! Спасибо за полезную информацию! А как сделать, чтобы график смещается влево? Примерное понимание есть: наверное нужно записывать данные в массив, после достижения последнего элемента массива, смешать элементы. Только реализовать не получается.

    • TomaTLAB:

      Юрий, смещать элементы в массиве не нужно, нужно перемещать указатель на элемент. При достижении границы массива перекидывать его на начало.
      Причем указателей может быть несколько, напр. для записи и для чтения (вывода на экран, сброса в файл, другой буфер и т.п.), такая штука позволяет организовать, например, сохранение и отображение истории данных предшествующих некому событию.
      Поищите информацию по ключевым словам «кольцевой буфер»

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

14 − 2 =