Оптический сенсор, назначение оптический концевик, для автоматики, бесконтактный выключатель с функцией автоматического отключения…
Метка:Си
Визуализация данных
Views: 1399
Частенько приходиться на дисплей выводить данные в виде графиков, так более наглядно можно проследить за процессом и проанализировать его. Для этого разберем простую функцию на Си для реализации такой визуализации.
Данные полученные при измерениях должны быть помещены в буфер 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]); // рисовать точку
}
}
}
Это может быть интересно
LCD индикаторы на драйвере ML1001Views: 2056 ML1001 – статический LCD GOG (чип в стекле) драйвер для 40-сегментного LCD в позолоченном противоударном исполнении. На них можно каскадно строить цельные из 80 или 120 сегментов LCD индикаторы. …
Мультизоновый индикатор-терморегулятор ch-c3010Views: 1384 Часто возникает необходимость получить информацию по температуре с множества точек контроля. Вам необходимо знать температуру в комнате, в коридоре, температуру на улице, а в погребе (или на балконе) …
MPLAB® Code Configurator and EncoderViews: 1677 Еще раз про энкодер… Для некоторых приложений очень удобно и экономически выгодно, для настройки и управления использовать энкодер. Такие энкодеры имеют строенную тактовую кнопку которую можно применить для выбора …
Проект с использованием MCC часть 10Views: 1102 Алгоритм управления освещением от нажатия кнопки. Обработка удержания кнопки: Мы должны проверить кнопка в настоящий момент нажата и флаг удержания установлен, если да Проверить таймер удержания “отработал” – …
VU Meter Tower ART – part 2Views: 1224 Проект – VU Meter Tower ART получил продолжение в своем развитии. Теперь можно заказать набор деталей из акрила для самостоятельной сборки. В проект корпуса внесено целый ряд доработок, …
Acquaintance with audio-bluetooth modules F-6888 (BK3254).Views: 2434 Для проектов появилось необходимость познакомиться с недорогими модулями китайского производства, которые можно приобрести у нас в Украине и у китацев, на алиэкспрессе. Так как меня интересует не просто, …
Индикатор кода – RC-5 Protocol PhilipsViews: 1174 Индикатор кода – RC-5 Protocol Philips При конструировании дистанционного управления на инфракрасных лучах для контроля удобно иметь индикатор кодов передаваемых пультом. Плата ch-c3000 позволяет изготавливать устройства с возможностью …
Сумеречное релеViews: 1663 Реле управления освещением, датчик день-ночь – одним словом фотореле для управления освещением или формирования сигнала для системы умный дом о понижении или повышении освещенности относительно заданного уровня. Реле выполнено по классической схеме, конденсаторный блок питания, от сети переменного тока …
Часы + Календарь + Термометр + …Views: 2835 Часы + Календарь + Термометр + Индикатор влажности + Секундомер + Дистанционное управление на ИК лучах (пульты на RC-5 протоколе) + Автоматическая регулировка яркости + Возможность вывода данных через USB, …
Инфракрасный датчик движения, PIR-sensorViews: 3318 Домашняя автоматика предполагает наличие датчиков движения, которые способны контролировать движения человека. Самым простым и доступным устройством позволяющие контролировать изменения ИК-излучения, это ПИР-сенсоры. На текущий момент доступны не дорогие модели D203B, D204B, D205B. Все …