Skip to content

Repository files navigation

latestPIOFooFooFoo

Foo

Approxy

Линейный аппроксиматор

  • Аппроксимирует таблицу для получения промежуточных результатов
  • Работа со всеми типами данных
  • Режим PROGMEM для хранения таблицы во Flash

Совместимость

Совместима со всеми Arduino платформами (используются Arduino-функции)

Содержание

Установка

  • Библиотеку можно найти по названию Approxy и установить через менеджер библиотек в:
    • Arduino IDE
    • Arduino IDE v2
    • PlatformIO
  • Скачать библиотеку .zip архивом для ручной установки:
    • Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
    • Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
    • Распаковать и положить в Документы/Arduino/libraries/
    • (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
  • Читай более подробную инструкцию по установке библиотек здесь

Обновление

  • Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
  • Через менеджер библиотек IDE: найти библиотеку как при установке и нажать "Обновить"
  • Вручную: удалить папку со старой версией, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!

Как это работает

Допустим, есть некая нелинейная зависимость одного значения от другого, например сигнал с датчика (столбец X, горизонтальная ось) и соответствующее ему физическое значение (столбец Y, вертикальная ось): scheme

Чтобы получить показания с такого неприятного условного датчика, нужно знать соответствие между ними и сигналом с датчика. Если это соответствие не описывается простым математическим уравнением (прямая пропорциональность, полином, экспонента, логарифм и так далее), то можно откалибровать (оттарировать) датчик по нескольким точкам, построив таблицу. Можно сделать это с шагом в условную единицу, получив большую таблицу соответствий для любых значений. А можно сделать несколько точек и вычислять промежуточные значения, считая зависимость между ними линейной. Это позволит в несколько раз уменьшить размер таблицы, не сильно потеряв в точности. Пример с 11 точками (оранжевая линия): scheme

Именно это и делает данная библиотека.

Инициализация

Раздельные столбцы (два массива)

Approxy<typeX, typeY> table(arrayX, arrayY, size);
Approxy<typeX, typeY, AP_PGM> table(arrayX, arrayY, size);
// typeX и typeY - типы данных массивов. Могут быть разными// arrayX и arrayY - сами массивы// size - размер таблицы (количество строк)// AP_PGM - режим PROGMEM

Общая таблица (двумерный массив)

Approxy2D<type> table(array, size);
Approxy2D<type, AP_PGM> table(array, size);
// type - тип данных массива// array - самимассив// size - размер таблицы (количество строк)// AP_PGM - режим PROGMEM

Использование

float table.get(float x); // получить аппроксимированное значение

Пример

Остальные примеры смотри в examples!

// раздельная таблица, массивы в оперативной памяти
#include<Approxy.h>// таблица, столбцы могут быть разных типовint tx[] = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
float ty[] = {0, 1, 5, 12, 20, 30, 39, 47, 54, 58, 60};
Approxy<int, float> table(tx, ty, 11);
voidsetup() {
Serial.begin(9600);
// выводимfor (int i = 0; i < 100; i++) {
Serial.println(table.get(i));
}
}
voidloop() {
}
// общая таблица в PROGMEM
#include<Approxy.h>// двумерный массив, у столбцов одинаковый типconstint tab[][2] PROGMEM = {
{0, 0},
{10, 1},
{20, 5},
{30, 12},
{40, 20},
{50, 30},
{60, 39},
{70, 47},
{80, 54},
{90, 58},
{100, 60},
};
Approxy2D<int, AP_PGM> table(tab, 11);
voidsetup() {
Serial.begin(9600);
// выводимfor (int i = 0; i < 100; i++) {
Serial.println(table.get(i));
}
}
voidloop() {
}

Версии

  • v1.0
  • v1.1 - исправлен баг в Approxy2D в режиме RAM

Баги и обратная связь

При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request'ов!

При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:

  • Версия библиотеки
  • Какой используется МК
  • Версия SDK (для ESP)
  • Версия Arduino IDE
  • Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
  • Какой код загружался, какая работа от него ожидалась и как он работает в реальности
  • В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код

About

Линейный аппроксиматор

Resources

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages