2022-01-15 17:10:14 +01:00
# include "Global.h"
2022-02-15 11:37:31 +01:00
# include "classes/IoTItem.h"
2022-01-15 17:10:14 +01:00
2022-02-14 18:33:52 +03:00
extern IoTGpio IoTgpio ;
2022-05-31 16:33:02 +03:00
// Это файл сенсора, в нем осуществляется чтение сенсора.
// для добавления сенсора вам нужно скопировать этот файл и заменить в нем текст AnalogAdc на название вашего сенсора
// Название должно быть уникальным, коротким и отражать суть сенсора.
2022-01-15 16:30:34 +01:00
2022-08-12 22:13:50 +02:00
//ребенок - родитель
2022-02-06 09:11:07 +03:00
class AnalogAdc : public IoTItem {
2022-01-15 17:29:38 +01:00
private :
//=======================================================================================================
// Секция переменных.
2022-05-31 16:33:02 +03:00
// Это секция где Вы можете объявлять переменные и объекты arduino библиотек, что бы
// впоследствии использовать их в loop и setup
2022-01-15 17:29:38 +01:00
unsigned int _pin ;
2022-05-31 16:33:02 +03:00
unsigned int _avgSteps , _avgCount ;
unsigned long _avgSumm ;
2022-01-15 17:29:38 +01:00
2022-01-15 16:41:25 +01:00
public :
2022-01-15 17:29:38 +01:00
//=======================================================================================================
2022-01-15 16:41:25 +01:00
// setup()
2022-05-31 16:33:02 +03:00
// это аналог setup из arduino. Здесь вы можете выполнять методы инициализации сенсора.
// Такие как ...begin и подставлять в них параметры полученные из web интерфейса.
// В с е параметры хранятся в перемененной parameters, вы можете прочитать любой параметр используя jsonRead функции:
2022-01-15 17:29:38 +01:00
// jsonReadStr, jsonReadBool, jsonReadInt
2022-08-12 22:13:50 +02:00
AnalogAdc ( String parameters ) : IoTItem ( parameters ) {
2022-01-15 16:41:25 +01:00
_pin = jsonReadInt ( parameters , " pin " ) ;
2022-05-31 16:33:02 +03:00
_avgSteps = jsonReadInt ( parameters , " avgSteps " ) ;
_avgSumm = 0 ;
_avgCount = 0 ;
2022-01-15 16:41:25 +01:00
}
2022-05-31 16:33:02 +03:00
2022-01-15 17:29:38 +01:00
//=======================================================================================================
2022-01-16 12:17:53 +05:00
// doByInterval()
2022-05-31 16:33:02 +03:00
// это аналог loop из arduino, но вызываемый каждые int секунд, заданные в настройках. Здесь вы должны выполнить чтение вашего сенсора
// а затем выполнить regEvent - это регистрация произошедшего события чтения
// здесь так же доступны все переменные из секции переменных, и полученные в setup
// если у сенсора несколько величин то делайте несколько regEvent
// не используйте delay - помните, что данный loop общий для всех модулей. Если у вас планируется длительная операция, постарайтесь разбить е е на порции
// и выполнить за несколько тактов
2022-01-15 16:41:25 +01:00
void doByInterval ( ) {
2022-05-31 16:33:02 +03:00
if ( _avgSteps < = 1 ) value . valD = IoTgpio . analogRead ( _pin ) ;
2022-02-14 12:48:59 +03:00
regEvent ( value . valD , " AnalogAdc " ) ; //обязательный вызов хотяб один
2022-01-15 16:41:25 +01:00
}
2022-05-31 16:33:02 +03:00
2022-01-15 17:29:38 +01:00
//=======================================================================================================
2022-05-31 16:33:02 +03:00
// loop()
// полный аналог loop() из arduino. Нужно помнить, что все модули имеют равный поочередный доступ к центральному loop(), поэтому, необходимо следить
// за задержками в алгоритме и не создавать пауз. Кроме того, данная версия перегружает родительскую, поэтому doByInterval() отключается, если
// не повторить механизм расчета интервалов.
void loop ( ) {
if ( _avgSteps > 1 ) {
if ( _avgCount > _avgSteps ) {
value . valD = _avgSumm / _avgSteps ;
_avgSumm = 0 ;
2022-08-12 22:13:50 +02:00
_avgCount = 0 ;
}
2022-05-31 16:33:02 +03:00
_avgSumm = _avgSumm + IoTgpio . analogRead ( _pin ) ;
_avgCount + + ;
}
currentMillis = millis ( ) ;
difference = currentMillis - prevMillis ;
if ( difference > = _interval ) {
prevMillis = millis ( ) ;
this - > doByInterval ( ) ;
}
}
2022-01-15 16:30:34 +01:00
2022-08-12 22:13:50 +02:00
~ AnalogAdc ( ) { } ;
2022-01-15 16:41:25 +01:00
} ;
2022-01-15 16:30:34 +01:00
2022-05-31 16:33:02 +03:00
// после замены названия сенсора, на функцию можно не обращать внимания
// если сенсор предполагает использование общего объекта библиотеки для нескольких экземпляров сенсора, то в данной функции необходимо предусмотреть
// создание и контроль соответствующих глобальных переменных
2022-01-16 13:31:05 +01:00
void * getAPI_AnalogAdc ( String subtype , String param ) {
2022-05-31 16:33:02 +03:00
if ( subtype = = F ( " AnalogAdc " ) ) {
return new AnalogAdc ( param ) ;
} else {
return nullptr ;
}
2022-01-15 16:30:34 +01:00
}