#include "SerialService.h" #include "Pinout.h" #include "Utils.h" #ifndef ReleModel #define ReleModel class Rele { public: static void InicializarLista(std::vector& lista, const String& parametros, const String& Mod_ID); Rele(String _modID, String _id) { Mod_ID = _modID; _ID = _id; } String Mod_ID; String _ID; PinoModel _pino; bool Iniciado = false; bool AtuacaoNivelAlto = true; Estado _Status = Desligado; void Inicializar() { if (Iniciado) { PrintTela(_ID + " ja inicializado"); return; } if (_pino.Definido()) { _pino.Conectar(!AtuacaoNivelAlto); Iniciado = true; PrintTela(_ID + " iniciado"); } } void Desligar() { if (!Iniciado) { PrintTela(_ID + " nao esta inicializado"); return; } // Redefinir as configurações para os valores iniciais _pino.Desconectar(); PrintTela(_ID + " Desligado"); Iniciado = false; } void AtualizarStatus(Estado novoEstado) { bool status = novoEstado == Ligado; if (!AtuacaoNivelAlto) { status = !status; } PrintTela("Atualizando status do rele de ", false); PrintTela(String(_Status), false); PrintTela(" para ", false); PrintTela(String(novoEstado)); _pino.set(status); _Status = (Estado)_pino.get(); } void AtualizarLeitura() { _Status = (Estado)_pino.get(); } void RequisitarDados() { AtualizarLeitura(); } }; // Função para inicializar os reles com IDs e pinos específicos void Rele::InicializarLista(std::vector& lista, const String& parametros, const String& Mod_ID) { // Verifica se há sensores já na lista if (!lista.empty()) { PrintTela("Limpando lista de reles existente..."); for (auto* sensor : lista) { sensor->Desligar(); // Desliga cada sensor antes de remover PrintTela("Rele " + sensor->_ID + " desligado."); delete sensor; } lista.clear(); // Limpa a lista após desligar todos os itens } if (parametros.length() > 0) { std::vector _config = SplitString(parametros, SplitConfig); // Divide a configuração por vírgulas for (const String& config : _config) { std::vector partes = SplitString(config, SplitSubParams); // Divide cada configuração pelo '-' if (partes.size() == 5) { String id = partes[0]; bool conectar = partes[1] == "1"; bool atuacaoAlto = partes[2] == "1"; TiposBarramentos pinoB = (TiposBarramentos)partes[3].toInt(); int pino = partes[4].toInt(); if (conectar) { Rele* sensor = new Rele(Mod_ID, id); sensor->_pino = PinoModel(pino, pinoB, _OUTPUT); sensor->Inicializar(); lista.push_back(sensor); PrintTela("Rele " + id + " inicializado no pino " + String(pino)); } } else { PrintTela("Configuração inválida para rele: " + config); } } } else { PrintTela("Configuração de rele não encontrada."); } } #endif