├── .gitattributes
├── .github
└── workflows
│ └── tg-send.yml
├── LICENSE
├── README.md
├── README_EN.md
├── examples
├── analogKeyboard
│ └── analogKeyboard.ino
└── analogKeyboard_short
│ └── analogKeyboard_short.ino
├── keywords.txt
├── library.properties
└── src
└── AnalogKey.h
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.github/workflows/tg-send.yml:
--------------------------------------------------------------------------------
1 |
2 | name: Telegram Message
3 | on:
4 | release:
5 | types: [published]
6 | jobs:
7 | build:
8 | name: Send Message
9 | runs-on: ubuntu-latest
10 | steps:
11 | - name: send telegram message on push
12 | uses: appleboy/telegram-action@master
13 | with:
14 | to: ${{ secrets.TELEGRAM_TO }}
15 | token: ${{ secrets.TELEGRAM_TOKEN }}
16 | disable_web_page_preview: true
17 | message: |
18 | ${{ github.event.repository.name }} v${{ github.event.release.tag_name }}
19 | ${{ github.event.release.body }}
20 | https://github.com/${{ github.repository }}
21 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 AlexGyver
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://github.com/GyverLibs/AnalogKey/releases/latest/download/AnalogKey.zip)
2 | [](https://registry.platformio.org/libraries/gyverlibs/AnalogKey)
3 | [](https://alexgyver.ru/)
4 | [](https://alexgyver.ru/support_alex/)
5 | [](https://github-com.translate.goog/GyverLibs/AnalogKey?_x_tr_sl=ru&_x_tr_tl=en)
6 |
7 | [](https://t.me/GyverLibs)
8 |
9 | # AnalogKey
10 | Библиотека для работы с аналоговой клавиатурой для Arduino
11 | - Встроенный простенький дебаунс
12 | - Оптимальный опрос пина по таймеру
13 | - Проверка конкретной кнопки или вывод номера нажатой
14 |
15 | ### Совместимость
16 | Совместима со всеми Arduino платформами (используются Arduino-функции)
17 |
18 | ## Содержание
19 | - [Установка](#install)
20 | - [Инициализация](#init)
21 | - [Использование](#usage)
22 | - [Пример](#example)
23 | - [Версии](#versions)
24 | - [Баги и обратная связь](#feedback)
25 |
26 |
27 | ## Установка
28 | - Библиотеку можно найти по названию **AnalogKey** и установить через менеджер библиотек в:
29 | - Arduino IDE
30 | - Arduino IDE v2
31 | - PlatformIO
32 | - [Скачать библиотеку](https://github.com/GyverLibs/AnalogKey/archive/refs/heads/main.zip) .zip архивом для ручной установки:
33 | - Распаковать и положить в *C:\Program Files (x86)\Arduino\libraries* (Windows x64)
34 | - Распаковать и положить в *C:\Program Files\Arduino\libraries* (Windows x32)
35 | - Распаковать и положить в *Документы/Arduino/libraries/*
36 | - (Arduino IDE) автоматическая установка из .zip: *Скетч/Подключить библиотеку/Добавить .ZIP библиотеку…* и указать скачанный архив
37 | - Читай более подробную инструкцию по установке библиотек [здесь](https://alexgyver.ru/arduino-first/#%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA)
38 | ### Обновление
39 | - Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
40 | - Через менеджер библиотек IDE: найти библиотеку как при установке и нажать "Обновить"
41 | - Вручную: **удалить папку со старой версией**, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!
42 |
43 |
44 |
45 | ## Инициализация
46 | ```cpp
47 | AnalogKey keys; // указываем пин и количество кнопок
48 | AnalogKey keys; // указываем пин, количество кнопок и внешний массив сигналов
49 | ```
50 |
51 |
52 | ## Использование
53 | ```cpp
54 | void attach(uint8_t num, int value); // подключает кнопку на указанное значение
55 | void setWindow(int window); // устанавливает окно сигнала (умолч. 40)
56 | bool status(uint8_t num); // возвращает статус указанной кнопки
57 | int pressed(); // выводит номер нажатой кнопки или -1, если нажатых кнопок нет
58 | ```
59 | ### Как работать
60 | - Измерить и записать сигналы с клавиатуры (например, вывести значения в монитор порта)
61 | - Передать значения в библиотеку:
62 | - Положить во внешний массив и передать его при инициализации (см. пример)
63 | - Подключить каждую кнопку через attach (см. пример)
64 | - При необходимости настроить размер окна, чтобы сигналы с кнопок не пересекались: расстояние между соседними сигналами должно быть не меньше половины окна
65 | - Данная библиотека позволяет просто найти нажатую кнопку. Для расширенной работы (клики, удержания) используй библиотеку [EncButton](https://github.com/GyverLibs/EncButton) в виртуальном режиме
66 |
67 |
68 | ## Пример
69 | ### Внешний массив
70 | ```cpp
71 | #include "AnalogKey.h"
72 | // создаём массив значений сигналов с кнопок
73 | int16_t sigs[16] = {
74 | 1023, 927, 856, 783,
75 | 671, 632, 590, 560,
76 | 504, 480, 455, 440,
77 | 399, 319, 255, 230
78 | };
79 |
80 | // указываем пин, количество кнопок и массив значений
81 | AnalogKey keys;
82 |
83 | void setup() {
84 | Serial.begin(9600);
85 |
86 | // размер окна опроса такой, чтобы кнопок не пересекались
87 | // Расстояние между соседними сигналами не меньше половины окна!
88 | keys.setWindow(30);
89 | }
90 |
91 | void loop() {
92 | // проверяем каждую кнопку в ручном режиме
93 | if (keys.status(0)) Serial.println("press 0");
94 | if (keys.status(1)) Serial.println("press 1");
95 | if (keys.status(2)) Serial.println("press 2");
96 | if (keys.status(3)) Serial.println("press 3");
97 | if (keys.status(4)) Serial.println("press 4");
98 | if (keys.status(5)) Serial.println("press 5");
99 | if (keys.status(6)) Serial.println("press 6");
100 |
101 | // или выводим номер текущей нажатой (-1 значит ни одна не нажата)
102 | if (keys.pressed() != -1) Serial.println(keys.pressed());
103 | delay(10);
104 | }
105 | ```
106 |
107 | ### Внутренний массив
108 | ```cpp
109 | #include "AnalogKey.h"
110 | // указываем пин и количество кнопок
111 | AnalogKey keys;
112 |
113 | void setup() {
114 | Serial.begin(9600);
115 |
116 | // назначаем кнопкам их сигналы
117 | keys.attach(0, 1023);
118 | keys.attach(1, 927);
119 | keys.attach(2, 856);
120 | keys.attach(3, 783);
121 | keys.attach(4, 671);
122 | keys.attach(5, 632);
123 | keys.attach(6, 590);
124 | keys.attach(7, 560);
125 | keys.attach(8, 504);
126 | keys.attach(9, 480);
127 | keys.attach(10, 455);
128 | keys.attach(11, 440);
129 | keys.attach(12, 399);
130 | keys.attach(13, 319);
131 | keys.attach(14, 255);
132 | keys.attach(15, 230);
133 | }
134 |
135 | void loop() {
136 | // проверяем каждую кнопку в ручном режиме
137 | if (keys.status(0)) Serial.println("press 0");
138 | if (keys.status(1)) Serial.println("press 1");
139 | if (keys.status(2)) Serial.println("press 2");
140 | if (keys.status(3)) Serial.println("press 3");
141 | if (keys.status(4)) Serial.println("press 4");
142 | if (keys.status(5)) Serial.println("press 5");
143 | if (keys.status(6)) Serial.println("press 6");
144 |
145 | // или выводим номер текущей нажатой (-1 значит ни одна не нажата)
146 | if (keys.pressed() != -1) Serial.println(keys.pressed());
147 | delay(10);
148 | }
149 | ```
150 |
151 |
152 | ## Версии
153 | - v1.0
154 | - v1.1 - оптимизация, изменена логика размера окна
155 |
156 |
157 | ## Баги и обратная связь
158 | При нахождении багов создавайте **Issue**, а лучше сразу пишите на почту [alex@alexgyver.ru](mailto:alex@alexgyver.ru)
159 | Библиотека открыта для доработки и ваших **Pull Request**'ов!
160 |
161 |
162 | При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:
163 | - Версия библиотеки
164 | - Какой используется МК
165 | - Версия SDK (для ESP)
166 | - Версия Arduino IDE
167 | - Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
168 | - Какой код загружался, какая работа от него ожидалась и как он работает в реальности
169 | - В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код
170 |
--------------------------------------------------------------------------------
/README_EN.md:
--------------------------------------------------------------------------------
1 | This is an automatic translation, may be incorrect in some places. See sources and examples!
2 |
3 | # Analogy
4 | Library for working with an analog keyboard for Arduino
5 | - Built -in, simple debate
6 | - Optimal PIN survey by timer
7 | - checking a specific button or output of a pressed number
8 |
9 | ## compatibility
10 | Compatible with all arduino platforms (used arduino functions)
11 |
12 | ## Content
13 | - [installation] (# Install)
14 | - [initialization] (#init)
15 | - [use] (#usage)
16 | - [Example] (# Example)
17 | - [versions] (#varsions)
18 | - [bugs and feedback] (#fedback)
19 |
20 |
21 | ## Installation
22 | - The library can be found by the name ** analogy ** and installed through the library manager in:
23 | - Arduino ide
24 | - Arduino ide v2
25 | - Platformio
26 | - [download the library] (https://github.com/gyverlibs/analogkey/archive/refs/heads/main.zip) .Zip archive for manual installation:
27 | - unpack and put in * C: \ Program Files (X86) \ Arduino \ Libraries * (Windows X64)
28 | - unpack and put in * C: \ Program Files \ Arduino \ Libraries * (Windows X32)
29 | - unpack and put in *documents/arduino/libraries/ *
30 | - (Arduino id) Automatic installation from. Zip: * sketch/connect the library/add .Zip library ... * and specify downloaded archive
31 | - Read more detailed instructions for installing libraries [here] (https://alexgyver.ru/arduino-first/#%D0%A3%D1%81%D1%82%D0%B0%BD%D0%BE%BE%BE%BED0%B2%D0%BA%D0%B0_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA)
32 | ### Update
33 | - I recommend always updating the library: errors and bugs are corrected in the new versions, as well as optimization and new features are added
34 | - through the IDE library manager: find the library how to install and click "update"
35 | - Manually: ** remove the folder with the old version **, and then put a new one in its place.“Replacement” cannot be done: sometimes in new versions, files that remain when replacing are deleted and can lead to errors!
36 |
37 |
38 |
39 | ## initialization
40 | `` `CPP
41 | Analogkey keys;// Specify the PIN and the number of buttons
42 | Analogkey keys;// Specify PIN, number of buttons and external array of signals
43 | `` `
44 |
45 |
46 | ## Usage
47 | `` `CPP
48 | VOID attach (uint8_t num, int velue);// connects the button to the specified value
49 | VOID Setwindow (Intsdow);// sets the signal window (silence 40)
50 | Bool Status (uint8_t num);// returns the status of the specified button
51 | Intsed ();// displays the number of the pressed button or -1, if there are no buttons pressed
52 | `` `
53 | ### How to work
54 | - measure and write signals from the keyboard (for example, display values to the port monitor)
55 | - Pass the values to the library:
56 | - Put in an external array and transfer it to initialization (see example)
57 | - connect each button via attach (see example)
58 | - if necessary, configure the window size so that the signals from the buttons do not intersect: the distance between neighboring signals should be at least half of the window
59 | - This library allows you to just find a pressed button.For advanced work (clique, retention), use the library [encbuton] (https://github.com/gyverlibs/encbutton) in virtual mode
60 |
61 |
62 | ## Example
63 | ### External array
64 | `` `CPP
65 | #include "AnaLogkey.h"
66 | // Create an array of signal values from buttons
67 | int16_t sigs [16] = {{
68 | 1023, 927, 856, 783,
69 | 671, 632, 590, 560,
70 | 504, 480, 455, 440,
71 | 399, 319, 255, 230
72 | };
73 |
74 | // Specify PIN, number of buttons and array of values
75 | ANALOGKEY keys;
76 |
77 | VOID setup () {
78 | Serial.Begin (9600);
79 |
80 | // The size of the survey window is so that the buttons do not intersect
81 | // The distance between neighboring signals is at least half the window!
82 | keys.setwindow (30);
83 | }
84 |
85 | VOID loop () {
86 | // Check each button in manual mode
87 | if (keys.status (0)) serial.println ("Press 0");
88 | if (keys.status (1)) serial.println ("Press 1");
89 | if (keys.status (2)) serial.println ("Press 2");
90 | if (keys.status (3)) serial.println ("Press 3");
91 | if (keys.status (4)) serial.println ("Press 4");
92 | if (keys.status (5)) serial.println ("Press 5");
93 | if (keys.status (6)) serial.println ("Press 6");
94 |
95 | // or display the number of the current pressed (-1 means not one is pressed)
96 | if (keys.pressed ()! = -1) serial.println (keys.pressed ());
97 | Delay (10);
98 | }
99 | `` `
100 |
101 | ### Inner array
102 | `` `CPP
103 | #include "AnaLogkey.h"
104 | // Specify the PIN and the number of buttons
105 | Analogkey keys;
106 |
107 | VOID setup () {
108 | Serial.Begin (9600);
109 |
110 | // assign the buttons their signals
111 | keys.attach (0, 1023);
112 | keys.attach (1, 927);
113 | Keys.attach (2, 856);
114 | keys.attach (3, 783);
115 | Keys.attach (4, 671);
116 | keys.attach (5, 632);
117 | Keys.attach (6, 590);
118 | keys.attach (7, 560);
119 | keys.attach (8, 504);
120 | keys.attach (9, 480);
121 | keys.attach (10, 455);
122 | keys.attach (11, 440);
123 | keys.attach (12, 399);
124 | Keys.attach (13, 319);
125 | keys.attach (14, 255);
126 | keys.attach (15, 230);
127 | }
128 |
129 | VOID loop () {
130 | // Check each button in manual mode
131 | if (keys.status (0)) serial.println ("Press 0");
132 | if (keys.status (1)) serial.println ("Press 1");
133 | if (keys.status (2)) serial.println ("Press 2");
134 | if (keys.status (3)) serial.println ("Press 3");
135 | if (keys.status (4)) serial.println ("Press 4");
136 | if (keys.status (5)) serial.println ("Press 5");
137 | if (keys.status (6)) serial.println ("Press 6");
138 |
139 | // or display the number of the current pressed (-1 means not one is pressed)
140 | if (keys.pressed ()! = -1) serial.println (keys.pressed ());
141 | Delay (10);
142 | }
143 | `` `
144 |
145 |
146 | ## versions
147 | - V1.0
148 | - v1.1 - optimization, the logic of the window size has been changed
149 |
150 |
151 | ## bugs and feedback
152 | Create ** Issue ** when you find the bugs, and better immediately write to the mail [alex@alexgyver.ru] (mailto: alex@alexgyver.ru)
153 | The library is open for refinement and your ** pull Request ** 'ow!
154 |
155 |
156 | When reporting about bugs or incorrect work of the library, it is necessary to indicate:
157 | - The version of the library
158 | - What is MK used
159 | - SDK version (for ESP)
160 | - version of Arduino ide
161 | - whether the built -in examples work correctly, in which the functions and designs are used, leading to a bug in your code
162 | - what code has been loaded, what work was expected from it and how it works in reality
163 | - Ideally, attach the minimum code in which the bug is observed.Not a canvas of a thousand lines, but a minimum code
--------------------------------------------------------------------------------
/examples/analogKeyboard/analogKeyboard.ino:
--------------------------------------------------------------------------------
1 | /*
2 | Сигналы кнопок
3 | 1023
4 | 927
5 | 856
6 | 783
7 | 671
8 | 632
9 | 590
10 | 560
11 | 504
12 | 480
13 | 455
14 | 440
15 | 399
16 | 319
17 | 255
18 | 230
19 | */
20 | #include "AnalogKey.h"
21 | // указываем пин и количество кнопок
22 | AnalogKey keys;
23 |
24 | void setup() {
25 | Serial.begin(9600);
26 |
27 | // назначаем кнопкам их сигналы
28 | keys.attach(0, 1023);
29 | keys.attach(1, 927);
30 | keys.attach(2, 856);
31 | keys.attach(3, 783);
32 | keys.attach(4, 671);
33 | keys.attach(5, 632);
34 | keys.attach(6, 590);
35 | keys.attach(7, 560);
36 | keys.attach(8, 504);
37 | keys.attach(9, 480);
38 | keys.attach(10, 455);
39 | keys.attach(11, 440);
40 | keys.attach(12, 399);
41 | keys.attach(13, 319);
42 | keys.attach(14, 255);
43 | keys.attach(15, 230);
44 | }
45 |
46 | void loop() {
47 | // проверяем каждую кнопку в ручном режиме
48 | if (keys.status(0)) Serial.println("press 0");
49 | if (keys.status(1)) Serial.println("press 1");
50 | if (keys.status(2)) Serial.println("press 2");
51 | if (keys.status(3)) Serial.println("press 3");
52 | if (keys.status(4)) Serial.println("press 4");
53 | if (keys.status(5)) Serial.println("press 5");
54 | if (keys.status(6)) Serial.println("press 6");
55 |
56 | // или выводим номер текущей нажатой (-1 значит ни одна не нажата)
57 | if (keys.pressed() != -1) Serial.println(keys.pressed());
58 | delay(10);
59 | }
60 |
--------------------------------------------------------------------------------
/examples/analogKeyboard_short/analogKeyboard_short.ino:
--------------------------------------------------------------------------------
1 | #include "AnalogKey.h"
2 | // создаём массив значений сигналов с кнопок
3 | int16_t sigs[16] = {
4 | 1023, 927, 856, 783,
5 | 671, 632, 590, 560,
6 | 504, 480, 455, 440,
7 | 399, 319, 255, 230
8 | };
9 |
10 | // указываем пин, количество кнопок и массив значений
11 | AnalogKey keys;
12 |
13 | void setup() {
14 | Serial.begin(9600);
15 |
16 | // размер окна опроса такой, чтобы кнопок не пересекались
17 | // Расстояние между соседними сигналами не меньше половины окна!
18 | keys.setWindow(30);
19 | }
20 |
21 | void loop() {
22 | // проверяем каждую кнопку в ручном режиме
23 | if (keys.status(0)) Serial.println("press 0");
24 | if (keys.status(1)) Serial.println("press 1");
25 | if (keys.status(2)) Serial.println("press 2");
26 | if (keys.status(3)) Serial.println("press 3");
27 | if (keys.status(4)) Serial.println("press 4");
28 | if (keys.status(5)) Serial.println("press 5");
29 | if (keys.status(6)) Serial.println("press 6");
30 |
31 | // или выводим номер текущей нажатой (-1 значит ни одна не нажата)
32 | if (keys.pressed() != -1) Serial.println(keys.pressed());
33 | delay(10);
34 | }
35 |
--------------------------------------------------------------------------------
/keywords.txt:
--------------------------------------------------------------------------------
1 | #######################################
2 | # Syntax Coloring Map For AnalogKey
3 | #######################################
4 |
5 | #######################################
6 | # Datatypes (KEYWORD1)
7 | #######################################
8 |
9 | AnalogKey KEYWORD1
10 |
11 | #######################################
12 | # Methods and Functions (KEYWORD2)
13 | #######################################
14 |
15 | attach KEYWORD2
16 | setWindow KEYWORD2
17 | status KEYWORD2
18 | pressed KEYWORD2
19 |
20 | #######################################
21 | # Constants (LITERAL1)
22 | #######################################
--------------------------------------------------------------------------------
/library.properties:
--------------------------------------------------------------------------------
1 | name=AnalogKey
2 | version=1.1
3 | author=AlexGyver
4 | maintainer=AlexGyver
5 | sentence=Library for matrix analog keyboard
6 | paragraph=Library for matrix analog keyboard
7 | category=Sensors
8 | url=https://github.com/GyverLibs/AnalogKey
9 | architectures=*
--------------------------------------------------------------------------------
/src/AnalogKey.h:
--------------------------------------------------------------------------------
1 | /*
2 | Библиотека для работы с аналоговой клавиатурой
3 | GitHub: https://github.com/GyverLibs/AnalogKey
4 | - Встроенный простенький дебаунс
5 | - Оптимальный опрос пина по таймеру
6 | - Проверка конкретной кнопки или вывод номера нажатой
7 |
8 | AlexGyver, alex@alexgyver.ru
9 | https://alexgyver.ru/
10 | MIT License
11 |
12 | v1.1 - оптимизация, изменена логика размера окна
13 | */
14 |
15 | #ifndef _AnalogKey_h
16 | #define _AnalogKey_h
17 | #include
18 |
19 | #define _AKEY_PERIOD 40 // период опроса в мс
20 |
21 | template
22 | class AnalogKey {
23 | public:
24 | // подключает кнопку на указанное значение
25 | void attach(uint8_t num, int value) {
26 | if (num >= AMOUNT) return;
27 | if (S_PTR == nullptr) signals[num] = value;
28 | else signals_p[num] = value;
29 | }
30 |
31 | // устанавливает окно сигнала (умолч. 40)
32 | void setWindow(int window) {
33 | _window = window / 2;
34 | }
35 |
36 | // возвращает статус указанной кнопки
37 | bool status(uint8_t num) {
38 | if (millis() - tmr > _AKEY_PERIOD) {
39 | tmr = millis();
40 | int16_t thisRead = analogRead(PIN);
41 | _ready = (abs(thisRead - _lastRead) < _window);
42 | _lastRead = thisRead;
43 | }
44 | return check(num);
45 | }
46 |
47 | // выводит номер нажатой кнопки или -1, если нажатых кнопок нет
48 | int pressed() {
49 | status(0); // вызываем опрос
50 | for (uint8_t i = 0; i < AMOUNT; i++) {
51 | if (check(i)) return i;
52 | }
53 | return -1;
54 | }
55 |
56 | private:
57 | bool check(int i) {
58 | int16_t sig = (S_PTR == nullptr) ? signals[i] : signals_p[i];
59 | return (_ready && (_lastRead > sig - _window) && (_lastRead < sig + _window));
60 | }
61 |
62 | int16_t signals[(S_PTR == nullptr) ? AMOUNT : 0];
63 | int16_t* signals_p = S_PTR;
64 | int16_t _lastRead = 0;
65 | int16_t _window = 20;
66 | bool _ready = false;
67 | uint32_t tmr;
68 | };
69 | #endif
--------------------------------------------------------------------------------