
Views: 1385
Частенько приходиться на дисплей выводить данные в виде графиков, так более наглядно можно проследить за процессом и проанализировать его. Для этого разберем простую функцию на Си для реализации такой визуализации.
Данные полученные при измерениях должны быть помещены в буфер 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]); // рисовать точку } } }
Это может быть интересно
Часы-кухонный таймер
Views: 2843 Каждая кухня должна иметь кухонный таймер, который позволяет напоминать хозяйке когда проходить определенный промежуток времени. Например, печем пирог, варим яйца… , чтобы не смотреть постоянно на часы, установим таймер и …DIXELL XWEB500D-EVO + RUT900 или как пробить NAT-сервер
Views: 1096 Когда необходимо под какой нибудь контроллер имеющий вэб сервер в инет, то нужен статический IP, что оказалось проблемой при работе с операторами сотовых сетей, конкретно с оператором сети …ESP8266 процедура получение данных даты и времени от серверов точного времени.
Views: 6051 Эта функция доступна уже в версии 1.6.1. Для многих приложений, необходимо часы реального времени, если в вашем проекте есть модуль WiFI ESP8266, то легко можно сделать следующим образом. …12-BIT A/D CONVERTER WITH THRESHOLD DETECT на примере PIC24FJ128GA204
Views: 868 Введение. 12-битный модуль A/D Converter является усовершенствованной версией 10-битного модуля, предлагаемого на некоторых устройствах PIC24. Оба модуля являются преобразователями, в своих ядрах, с последовательным приближением (SAR), в окружении …Проект с использованием MCC часть 15
Views: 1663 EUSART – Универсальный асинхронный приёмопередатчик (УАПП, англ. Universal Asynchronous Receiver-Transmitter, UART) — узел вычислительных устройств, предназначенный для организации связи с другими цифровыми устройствами. … читать на вики. Внесем изменения в нашу схему, …Интерактивные Led
Views: 555 Тема проекта продолжение следует…. Это может быть интересноPIC18 – модуль DMA
Views: 1284 Введение Модуль прямого доступа к памяти (DMA) предназначен для обслуживания передачи данных непосредственно между различными областями памяти без вмешательства процессора. Исключив при этом необходимость в интенсивной обработки …Arduino LCD + STONE STVI056WT-01 + Strain gauge
Views: 574 Author li grey email: greyli1987@outlook.com The strain assessment instrument is used to assess the degree of corresponding muscle strain by obtaining the muscle surface action potential through silver …Часы + Календарь + Термометр + …
Views: 2765 Часы + Календарь + Термометр + Индикатор влажности + Секундомер + Дистанционное управление на ИК лучах (пульты на RC-5 протоколе) + Автоматическая регулировка яркости + Возможность вывода данных через USB, …Самый простой индикатор уровня звукового сигнала
Views: 6562 Демонстрационный проект создания индикаторов уровня с использованием WS2812B. Изучив этот проект вы сможете самостоятельно изготавливать и конструировать свои индикаторы уровня звукового сигнала. Дополнительно читайте статью Бегущие огни на …