agrobot_base/Firmware/Modulos/SolenoideModel.h

85 lines
2.0 KiB
C
Raw Normal View History

#include "SerialService.h"
#include "Pinout.h"
#ifndef SolenoideModel
#define SolenoideModel
bool AtuacaoNivelAlto = true;
class Solenoide {
public:
// Construtor
Solenoide(String _modID, String _id) {
Mod_ID = _modID;
_ID = _id;
}
// Definições
String Mod_ID = "";
String _ID;
PinoModel _pinoSolenoide;
Estado _Status = Desligado;
bool Iniciado = false;
bool Testando = false;
// Consumo
bool StatusSolenoide;
// Entrada de dados
bool _SolenoideAtuada = !AtuacaoNivelAlto;
void Inicializar() {
if (Iniciado) {
EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sCFG, _ID, "1"));
return;
}
// Define o estado inicial da solenoide
_SolenoideAtuada = !AtuacaoNivelAlto;
// Conecta o pino da solenoide com o estado inicial configurado
_pinoSolenoide.Conectar(_SolenoideAtuada);
// Atualiza o status da solenoide para refletir o estado inicial
StatusSolenoide = _pinoSolenoide.get() == (AtuacaoNivelAlto ? 1 : 0);
Iniciado = true;
EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sCFG, _ID, "1"));
}
void Desligar() {
if (!Iniciado) {
EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sCFG, _ID, "0"));
return;
}
// Desconecta o pino da solenoide
_pinoSolenoide.Desconectar();
delay(50); // Pequeno delay para garantir a liberação do pino
Iniciado = false;
EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sCFG, _ID, "0"));
}
void AlterarStatusSolenoide(bool status) {
_SolenoideAtuada = status;
_pinoSolenoide.set(_SolenoideAtuada);
StatusSolenoide = _pinoSolenoide.get() == (AtuacaoNivelAlto ? 1 : 0);
}
void AtualizarLeitura() {
_Status = (Estado)_pinoSolenoide.get();
}
void RequisitarDados() {
AtualizarLeitura();
EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sRLE, _ID, MontarDadosProtocoloRele(Iniciado, _Status)));
}
};
#endif