2022-02-22 22:47:21 +03:00
# include "Global.h"
# include "classes/IoTItem.h"
extern IoTGpio IoTgpio ;
class ButtonOut : public IoTItem {
private :
int _pin , _inv ;
public :
ButtonOut ( String parameters ) : IoTItem ( parameters ) {
jsonRead ( parameters , " pin " , _pin ) ;
jsonRead ( parameters , " inv " , _inv ) ;
IoTgpio . pinMode ( _pin , OUTPUT ) ;
//TODO: прочитать состояние из памяти
IoTgpio . digitalWrite ( _pin , LOW ) ; // пока нет памяти, устанавливаем значение в ноль
value . valD = 0 ;
}
void doByInterval ( ) {
//value.valD = IoTgpio.analogRead(_pin);
//regEvent(value.valD, "ButtonOut"); //обязательный вызов хотяб один
}
IoTValue execute ( String command , std : : vector < IoTValue > & param ) {
// реакция на вызов команды модуля из сценария
// String command - имя команды после ID. (ID.Команда())
// param - вектор ("массив") значений параметров переданных вместе с командой: ID.Команда("па р 1", 22, 33) -> param[0].ValS = "па р 1", param[1].ValD = 22
if ( command = = " change " ) { // выполняем код при вызове спец команды из сценария: ID.reboot();
2022-02-24 11:40:16 +03:00
value . valD = 1 - IoTgpio . digitalRead ( _pin ) ;
2022-02-22 22:47:21 +03:00
IoTgpio . digitalWrite ( _pin , value . valD ) ;
2022-02-24 11:40:16 +03:00
regEvent ( value . valD , " ButtonOut " ) ;
2022-02-22 22:47:21 +03:00
}
return { } ; // команда поддерживает возвращаемое значения. Т .е . по итогу выполнения команды или общения с внешней системой, можно вернуть значение в сценарий для дальнейшей обработки
}
void setValue ( IoTValue Value ) {
value = Value ;
IoTgpio . digitalWrite ( _pin , value . valD ) ;
if ( value . isDecimal ) regEvent ( value . valD , " ButtonOut " ) ;
else regEvent ( value . valS , " ButtonOut " ) ;
}
//=======================================================================================================
2022-02-25 15:24:03 +03:00
~ ButtonOut ( ) { } ;
2022-02-22 22:47:21 +03:00
} ;
void * getAPI_ButtonOut ( String subtype , String param ) {
if ( subtype = = F ( " ButtonOut " ) ) {
return new ButtonOut ( param ) ;
} else {
return nullptr ;
}
}