Views: 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]); // рисовать точку } } }
Это может быть интересно
- WiFi ESP8266 – AT команды связанные с функцией TCP/IP (v.1.6.1)Views: 5008 AT команды связанные с функцией TCP/IP В этом разделе описаны команды которые позволяют устанавливать соединения между серверами и клиентами в сети. Приведено описание команд и примеры их выполнения. …
- Стробоскоп для автомобиляViews: 2148 Одним из популярных решений светового тюнинга автомобиля, мотоцикла или скутера стал эффект – “полицейский стробоскоп“. На база платы ch-c0050 реализовано несколько проектов. В этой статье приводятся две версии …
- Audio-bluetooth modules BK8000L (noname)Views: 646 Еще один вариант, так сказать недоразумения Audio-bluetooth modules BK8000L (noname). Его отличительной маркировкой служат два отверстия в плате и надпись R2. Отличают его от модулей на чипе BK8000L, …
- Акриловый корпус для платы ch-4000Views: 647 Плата ch-4000 подходит для монтажа в корпуса на дин рейку, но для домашней автоматики необходимо что-то другое, поэтому был разработан корпус из акрила который позволит создавать настольные и настенные устройства. Корпус …
- Проблемы классической светомузыкиViews: 2044 Светомузыка – что это такое? Определение: Светомузыка (жаргонное: цветомузыка) — вид искусства, основанный на способности человека ассоциировать звуковые ощущения со световыми восприятиями. Такое явление в неврологии получило название …
- ch-светомузыка от теории до реализацииViews: 682 Сразу оговоримся технология или теория ch-светомузыки, это постоянно развивающийся процесс и то что будет сказано сегодня завтра может быть опровергнуто и считаться ошибочным. Назовем само решение проблемы автоматического …
- DIXELL XWEB500D-EVO + RUT900 или как пробить NAT-серверViews: 993 Когда необходимо под какой нибудь контроллер имеющий вэб сервер в инет, то нужен статический IP, что оказалось проблемой при работе с операторами сотовых сетей, конкретно с оператором сети …
- Development Boards PIC18F47Q84Views: 1088 Microchip тішить новими мікроконтролерами. Особливістю цього MCU – це багата інтелектуальна периферія, що дозволяє вирішувати такі завдання на 8 бітних MCU, які неможливо реалізувати на деяких навіть 32 …
- MAX7219/21 и 8х8 LED дисплеиViews: 916 MAX7219, MAX7221 предназначены для вывода информации на 8 разрядов семисегментного индикатора, но на нем легко организовать вывод на светодиодные индикаторы 8х8. продолжение следует…. Это может быть интересно
- Стабилизатор тока на SN3350, часть 2Views: 1147 Если вам необходимо разработать устройство с применением мощных светодиодов, то никак не обойтись без применения стабилизатора тока. На настоящий момент стабилизаторы тока являются самым эффективным механизмом, для питания светодиода в течение всего …