Оптический сенсор, назначение оптический концевик, для автоматики, бесконтактный выключатель с функцией автоматического отключения…
Метка:Си
Визуализация данных
Views: 1391
Частенько приходиться на дисплей выводить данные в виде графиков, так более наглядно можно проследить за процессом и проанализировать его. Для этого разберем простую функцию на Си для реализации такой визуализации.
Данные полученные при измерениях должны быть помещены в буфер 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]); // рисовать точку
}
}
}
Это может быть интересно
Проект с использованием MCC часть 06Views: 1465 Изменим схему следующим образом добавим две тактовые кнопки BT1 и BT2. Теперь переключимся на конфигурацию выводов, для этого сделаем двойной клик в окне Ресурсы проекта на Pin Module. …
Altium Designer my Libraries, Project templates, System settings by Catcatcat. V26.0Views: 275 Altium Designer my Libraries, Project templates, System settings by Catcatcat. V26.0 Here I want to share how I configure Altium Designer and how I use the DXPPreferences1.DXPPrf …
LED драйвер TM1639Views: 2473 TМ1639 позволяет работать на матрицу 8*8 или 8 семисегметных индикаторов. Может работать как на индикаторы с общим катодом, но и есть возможность подключать общим анодом. Для управления драйвером …
Toyota Auto Fader – Модуль включения усилителяViews: 2085 Toyota Auto Fader – Модуль включения усилителя. Часто автолюбители прибегают к замене штатного головного устройства на универсальное мультимедийное, в котором значительно расширены функциональные возможности. Если возникает желание оставить …
Мультизоновый индикатор-терморегулятор ch-c3010Views: 1350 Часто возникает необходимость получить информацию по температуре с множества точек контроля. Вам необходимо знать температуру в комнате, в коридоре, температуру на улице, а в погребе (или на балконе) …
LED модуль P10C4V12Views: 3316 LED панели на обычных регистрах типа 74HC595. Они выпускаются как монохромные так двух и полно цветные, особенность, что они предназначены для текстовой информации и имеют один уровень яркости. Общую яркость …
MCC PIC24 – модуль OUTPUT COMPARE – режиме ШИМViews: 1276 Во многих системах управления, для формирования управляющих сигналов требуется модуль ШИМ, он позволяет не только формировать импульсы заданной длительности, но и с применением обычного RC фильтра строить простые …
LED модуль P10 (1R) V706AViews: 7968 Это еще одно чудо от китайского брата. Это монохромные матрицы, называются они P10 (1R) V706A, ну типа R-красные, но не верьте паяют светики и зеленые и синие, в общем …
Бегущие огни (ch-bo-36)Views: 2610 Проект на PIC-микроконтроллере PIC16F648A. Количество каналов 36. Для индикации используется подключение по матрице 6х6. Расположение светодиодов в одну линию. Все эффекты написаны для возможности увеличения количества светодиодов. Рекомендуется …
Analog-to-Digital Converter with Computation Technical BriefViews: 1476 Аналого-цифровой преобразователь с вычислительным модулем. ВВЕДЕНИЕ Аналого-цифровой преобразователь (ADC) с вычислительным модулем (ADC2) в 8-разрядном микроконтроллере Microchip имеет встроенные вычислительные функции, которые обеспечивают функции пост-обработки, такие как передискретизация, …