
Views: 1384
Частенько приходиться на дисплей выводить данные в виде графиков, так более наглядно можно проследить за процессом и проанализировать его. Для этого разберем простую функцию на Си для реализации такой визуализации.
Данные полученные при измерениях должны быть помещены в буфер 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]); // рисовать точку } } }
Это может быть интересно
HVLD модуль на примере PIC24FJ128GA204
Views: 749 HVLD модуль представляет собой простое устройство, для контроля напряжения питания микроконтроллера или внешнего напряжения (через делитель). Его задача при “выходе” напряжения за заданные пределы сформировать сообщение микроконтроллеру, что …УКВ – радиоприем, часть 1
Views: 9727 Музыкальная тема к статье, слушаем: Первый мой радиоприемник, выглядел так. Использовал исключительно в школе на уроках, держась за одно ухо и преданно смотря на училку и сладко улыбаясь. …Acquaintance with audio-bluetooth modules F-6888 (BK3254).
Views: 2262 Для проектов появилось необходимость познакомиться с недорогими модулями китайского производства, которые можно приобрести у нас в Украине и у китацев, на алиэкспрессе. Так как меня интересует не просто, …Проблемы классической светомузыки
Views: 2138 Светомузыка – что это такое? Определение: Светомузыка (жаргонное: цветомузыка) — вид искусства, основанный на способности человека ассоциировать звуковые ощущения со световыми восприятиями. Такое явление в неврологии получило название …Проект с использованием MCC часть 12-1
Views: 1023 В настоящее время без визуализации информации уже не интересно. Поэтому научимся выводить информацию на дисплей. Для это возьмет простенький OLED RET012864E/REX012864J я такой приобретал в фирме “Гамма-Украина”, описание можно …Универсальный терморегулятор ch-c3000
Views: 3134 Терморегулятор ch-c3000 предназначен для управления системами регулирования температуры в пределах от – (минус) 55 до + 125 С. Регулятор может использоваться как в системах отопления, так и в …BMP280 – температура и атмосферное давление – учебный проект
Views: 2172 Учебный проект на PIC32 и светодиодной панели P5 (2121)-168-6432-80 (32*64). Проект позволяет ознакомиться с простой графикой и с чтением давления и температуры с датчика BMP280. Для тестирования необходимо …The art of DJ
Views: 161 The art of DJ. The art of DJ has gained wide popularity. Today, a DJ is not just someone whose task is to mix tracks; a DJ is …Сумеречное реле
Views: 1597 Реле управления освещением, датчик день-ночь – одним словом фотореле для управления освещением или формирования сигнала для системы умный дом о понижении или повышении освещенности относительно заданного уровня. Реле выполнено по классической схеме, конденсаторный блок питания, от сети переменного тока …Простой цифровой вольтметр ch-c3200
Views: 2575 В этой статье рассмотрен пример создания простого вольтметра постоянного тока на основе печатной платы ch-c0030pcb, а при возможности использования внешнего делителя и вольтметр переменного тока. Дан краткий принцип …