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]); // рисовать точку
}
}
}
Это может быть интересно
Altium Designer – создание рисунков на печатной платеViews: 3541 Для создание рисунков на печатной платы в Altium Designer можно использовать возможность использовать в Altium Designer сторонних скриптов. Мне возможность эта очень понравилась и я решил её расшарить …
Проект с использованием MCC часть 12-2Views: 1186 Настало время для изучения шины I2C. Изучать будем на примере работы с индикатором RET012864E. Что изменили со старой схемы: В прошлой теме я затупил и не добавил подтягивающие резисторы …
Оптосимистор и его применениеViews: 20186 Эрве Кадино “Цветомузыкальные установки” Ответ на вопрос – управление мощным тиристором или симистором, от терморегулятора. Статья в pdf[wpdm_file id=129 template=”link-template-calltoaction3.php”] Оптосимистор принадлежат к классу оптронов и обеспечивают очень хорошую …
Стабилизатор тока для светодиодов SN3350Views: 2757 SN3350 ближайший аналог ZXLD1350 Как собрать готовый вариант, читайте во второй части – http://catcatcat.d-lan.dp.ua/stabilizator-toka-na-sn3350-chast-2/ 40V драйвер светодиодов с внутренним ключом SN3350 – импульсный понижающий преобразователь, разработанный для того, чтобы эффективно управлять одним или …
LED драйвер TM1639Views: 2470 TМ1639 позволяет работать на матрицу 8*8 или 8 семисегметных индикаторов. Может работать как на индикаторы с общим катодом, но и есть возможность подключать общим анодом. Для управления драйвером …
Контроллер управления светодиодным освещением с дистанционным управлениемViews: 2065 Все активнее светодиоды входят в нашу жизнь. Всё эффективнее становится светодиодное освещение. Всё ниже опускаются цены. Всё больше появляется возможностей получения сочных цветов, простоты в управлении. Всё чаще …
Сенсорный выключатель светаViews: 16203 Хотя в настоящий момент актуальны системы управления освещением с передачей данных по электросети, но я думаю, что проекты такого рода тоже имеют право на жизнь. Анонс Три вида …
LCD драйвер – UC1601sViews: 1816 http://svetomuzyka.narod.ru/project/UC1601s.html Читайте обновление на http://catcatcat.d-lan.dp.ua/?page_id=178 В данный момент можно приобрести в ООО “Гамма” несколько типов индикаторов на драйвере UC1601s. RDX0048-GC, RDX0077-GS, RDX0154-GC и RDX0120-GC выполнены по технологии COG.
Altium Designer my Libraries, Project templates, System settings by Catcatcat. V26.0Views: 253 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 …
Интерактивные LedViews: 604 Тема проекта продолжение следует…. Это может быть интересно