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

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

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

Views: 1257


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

Данные полученные при измерениях должны быть помещены в буфер 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]); // рисовать точку
        }
    }
}


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


  • PIC32MZ – Core Timer (библиотека)PIC32MZ – Core Timer (библиотека)
    Views: 545 Переработанные файлы от Microchip, библиотека для работы с Core Timer.
  • LED драйвер TM1639LED драйвер TM1639
    Views: 2183 TМ1639 позволяет работать на матрицу 8*8 или 8 семисегметных индикаторов. Может работать как на индикаторы с общим катодом, но и есть возможность подключать общим анодом. Для управления драйвером …
  • Одноканальный емкостной сенсор – AT42QT1012Одноканальный емкостной сенсор – AT42QT1012
    Views: 2329 Описание сенсора [wpdm_file id=242] Незаконченный проект, так-как сенсор не оправдал своего назначения, не рекомендую, просто выброшенные деньги. Особенности. • Количество сенсоров – один, режим переключения ( touch-on/touch-off ), а также программируемая …
  • TDA7294 part 2TDA7294 part 2
    Views: 340 Це друга частина проекту TDA7294, початок дивись тут. Тут ви знайдете повністю проект високоякісного підсилювача на TDA7294, схема, 3D моделі, гербер файли для виготовлення друкованої плати. І звичайно …
  • Применение typedef, struct и unionПрименение typedef, struct и union
    Views: 8720 Полезные описания переменных Часто необходимо в памяти расположить последовательно разные виды данных, что бы потом можно было их использовать. Полезные ссылки Взято и переработано с сайта http://www.butovo.com/~zss/cpp/struct.htm http://cppstudio.com/post/9172/ …
  • Проект с использованием MCC часть 05Проект с использованием MCC часть 05
    Views: 1906 Эту часть назовем так как избавься от delay, там где а это реально не надо. Для это нам потребуется научиться использовать прерывания и работать с таймерами. Что такое …
  • Altium Designer first projectAltium Designer first project
    Views: 260 Эта статья подразумевает, что у вас установлен и настроен Altium Designer как описано в статье  Altium Designer my setup system and project structure.  Обратите внимание! Библиотека постоянно обновляется, …
  • Гаджеты для домашней автоматики – Датчик приближенияГаджеты для домашней автоматики – Датчик приближения
    Views: 1968 Управление светодиодным освещением – Датчик приближения. Данный гаджет предназначен для управления внутренним освещением мебели. Датчик позволяет определить закрытие или открытие дверцы или ящика и при этом включать или …
  • MPLAB® Harmony – или как это просто! Часть 2.MPLAB® Harmony – или как это просто! Часть 2.
    Views: 2678 Часть вторая – Первая программа на PIC32. Музыкальная тема к статье, слушаем: Для начала изучения PIC32 надо иметь или демоплату или самому её изготовить имея микроконтроллер. Начнем из …
  • MCC PIC24 – модуль REAL-TIME CLOCK AND CALENDAR (RTCC)MCC PIC24 – модуль REAL-TIME CLOCK AND CALENDAR (RTCC)
    Views: 472 RTCC предоставляет пользователю часы реального времени и функция календаря (RTCC), точность “хода” может быть откалибрована. Основные особенности модуля RTCC: • Работает в режиме глубокого сна. • Возможность выбора источника …