Простой оптический сенсор приближения

Оптический сенсор, назначение оптический концевик, для автоматики, бесконтактный выключатель с функцией автоматического отключения…

Визуализация данных

Visits: 1255


Частенько приходиться на дисплей выводить данные в виде графиков, так более наглядно можно проследить за процессом и проанализировать его. Для этого разберем простую функцию на Си для реализации такой визуализации.

Данные полученные при измерениях должны быть помещены в буфер CaptBuf[N] где N – размер буфера. предварительно надо указать размер дисплея для вывода данных и координаты нижнего левого угла расположения дисплея. Данные в буфере должны иметь формат signed int (16 бит -32768 … 32767 со знаком).

#define dispoX 60 // ширина окна
#define dispoY 32 // высота окна
#define startX 0 // координата X левый нижний угол окна
#define startY 0 // координата Y левый нижний угол окна

При вызове функции она извлекает количество данных (равных размеру дисплея dispoX) и преобразовывает их (если это необходимо) в одно полярное, а затем к диапазону 0-31, по высоте дисплея dispoY (в этом месте нет оптимизации, для других размеров придется подбирать значения деления и вводить постоянную смешения нуля). Преобразованные данные помещаем в массив BflyBuf[].

    for(a=0;a<dispoX;a++)
    {
         pr=CaptBuf[a]+32768;  // преобразование signed int -> unsigned int
         BflyBuf[a]= (pr>>11);  // перевести в однополярное значение в диапазоне 
    }

После это используя функции построение точки и линии на дисплее строим график из обработанных данных помещенных в массив BflyBuf[].

    // рисование графика
    for(a=0;a<dispoX-1;a++)
    {
        line(1, startX+a+1, startY, startX+a+1, startY+dispoY);// очистка следующего столбца дисплея
        if(abs(BflyBuf[a]-BflyBuf[a+1])>1)// если разность больше по модулю 1
        {
            if((a+1)<dispoX-1)line(0, startX+a, startY+BflyBuf[a], startX+a+1, startY+BflyBuf[a+1]);// рисовать линию
        }
        else
        {
            point(0, startX+a, startY+BflyBuf[a]); // рисовать точку
        }
    }

Пример работы функции для реализации визуализации аудио-данных в реальном времени.

 


Полный текст функции.

void oscilloscope (void)//Осцилограф
{
/*область индикации
 * dispX dispY
 * диапазон входного значения signed int -32768 … 32767
 * преобразовывается в значение 0-32
 * данные выводятся с позиции 0/0
 */
#define dispoX 60 // ширина окна
#define dispoY 32 // высота окна
#define startX 0 // координата X левый нижний угол окна
#define startY 40 // координата Y левый нижний угол окна
    unsigned int a,pr;
    for(a=0;a<dispoX;a++)
    {
         pr=CaptBuf[a]+32768;  // преобразование signed int -> unsigned int
         BflyBuf[a]= (pr>>11);  // перевести в однополярное значение в диапазоне 
    }
    line(1, startX, startY, startX, startY+dispoY);// очистка первого столбца дисплея
    // рисование графика
    for(a=0;a<dispoX-1;a++)
    {
        line(1, startX+a+1, startY, startX+a+1, startY+dispoY);// очистка следующего столбца дисплея
        if(abs(BflyBuf[a]-BflyBuf[a+1])>1)// если разность больше по модулю 1
        {
            if((a+1)<dispoX-1)line(0, startX+a, startY+BflyBuf[a], startX+a+1, startY+BflyBuf[a+1]);// рисовать линию
        }
        else
        {
            point(0, startX+a, startY+BflyBuf[a]); // рисовать точку
        }
    }
}


Это может быть интересно


  • ESP8266 применение в проектахESP8266 применение в проектах
    Visits: 3513 (Актуально только для версий прошивки 1.хх) ESP8266 показала себя как надежное и безотказное устройство для обмена данными с применением WIFI. Я использую ESP8266 исключительно через UART, с применением AT …
  • Проект с использованием MCC часть 16Проект с использованием MCC часть 16
    Visits: 1054 Продолжим изучение EUSART. На этом этапе отработает передачи данных с ПК и получения эха. Для этого в основной цикл программы добавим код if(EUSART_DataReady) // проверим флаг готовности данных …
  • Система отопления на солнечных коллекторах от Дмитрия (rv3dpi)Система отопления на солнечных коллекторах от Дмитрия (rv3dpi)
    Visits: 3179 Солнечные коллекторы для отопления в Европе используют в более 50% от общего количества установленных гелиосистем. Однако следует понимать, что гелиосистемы предназначены лишь для поддержки отопления и экономии затрат на основную …
  • OLED RET012864E/REX012864JOLED RET012864E/REX012864J
    Visits: 1446 RET012864E/REX012864J ОЛЕД индикатор производитель Raystar-Optronics приобретался в http://www.microchip.ua/ к сожалению никакой информации на сайте поставщика нет. Поэтому решил работу с этой версией индикатора на драйвере SSD1305 предоставить на своем сайте. Так как …
  • CLUBBEST-50-LightCLUBBEST-50-Light
    Visits: 231 CLUBBEST-50-LIGHT   Зміст Короткий опис проекту. 1 Опис схемотехніки візуалізатора музики. 2 Аудіо вхід. 3 MCU. 4 Цифровий вихід. 5 Схема живлення MCU. 6 Складання пристрою. 7 Список …
  • JDY-62A Audio bluetooth moduleJDY-62A Audio bluetooth module
    Visits: 1643 Простой модуль для простого аудио блютуса. Встроенные подсказки на английском языке. Модуль включён, режим муте – после подачи питания. Контроль разряда батареи предупреждение что батарея разряжена и необходима …
  • Проект с использованием MCC часть 04Проект с использованием MCC часть 04
    Visits: 1109 Теперь простого горения светиков нам не достаточно, заставим их мигать. Для начала используем первобытно простой способ, но достаточно простой. Используем функции delay, напрягаться откуда они берутся не будем, самое …
  • Проект с использованием MCC часть 14Проект с использованием MCC часть 14
    Visits: 801 С выводом данных на дисплей мы справились (но могу сразу сказать библиотеку графики к этой статьи пришлось доработать, поэтому в этом проекте она обновлена). У нас на текущем …
  • MPLAB® Harmony – или как это просто! Часть 1.MPLAB® Harmony – или как это просто! Часть 1.
    Visits: 3552 Часть первая – Установка Гармонии. Музыкальная тема к статье, слушаем: В начале запуска нового проекта и выбора микроконтроллера стоит задача правильно его сконфигурировать, прежде чем перейти к реализации …
  • Проект с использованием MCC часть 11Проект с использованием MCC часть 11
    Visits: 822 Можно несколько облагородить программу вынести наши процедуры обработки нажатия кнопок в отдельные функции. Но вы должны понимать, что это хоть и не значительно, но будет тормозить общую скорость …