#include "Enuns.h" #include #ifndef SerialService #define SerialService const char BeginLine = '@'; const char EndLine = '$'; const char BeginSensor = '#'; const char* SplitMessage = ";"; const char* SplitParams = ","; const int MAX_PROTOCOLS = 20; class ProtocoloSerial { public: F_Code funcao; String Mod_ID; String protocolo; int idMensagem; }; std::vector SplitString(String message, const char *delimiter) { std::vector partes; char messageArray[256]; message.toCharArray(messageArray, sizeof(messageArray)); char *token = strtok(messageArray, delimiter); while (token != nullptr) { partes.push_back(String(token)); token = strtok(nullptr, delimiter); } return partes; } std::vector LerBufferSerialFila(String Mod_ID) { std::vector protocolos; if (Serial.available() > 0) { bool ProtocoloIniciado = false; String protocoloAtual = ""; while (Serial.available()) { char entrada = (char)Serial.read(); if (entrada == BeginLine) { ProtocoloIniciado = true; } else if (entrada == EndLine) { ProtocoloIniciado = false; if (protocoloAtual.length() > 0) { std::vector partes = SplitString(protocoloAtual, SplitMessage); if (partes.size() == 4) { ProtocoloSerial objeto; objeto.idMensagem = partes[0].toInt(); objeto.Mod_ID = partes[1]; objeto.funcao = (F_Code)(partes[2].toInt()); objeto.protocolo = partes[3]; if (Mod_ID == objeto.Mod_ID) { protocolos.push_back(objeto); } } break; } } else if (ProtocoloIniciado) { protocoloAtual += entrada; } } } return protocolos; } void EnviarDadosSerial(String Mod_ID, String Mensagem) { String ProtocoloEnvio = Mod_ID + SplitMessage + Mensagem; Serial.println(ProtocoloEnvio); Serial.flush(); vTaskDelay(pdMS_TO_TICKS(10)); } String MontarProtocoloMensagemRecebida(int idMensagem) { String protocolo = (String)Msg + SplitParams + (String)idMensagem + SplitParams + EndLine; return protocolo; } String MontarProtocoloVerificacao(T_Code D_Code, int versao) { String Protocolo = (String)D_Code + ";" + (String)Chk + ";" + (String)versao + ";" + EndLine; return Protocolo; } String MontarProtocoloErro(T_Code D_Code) { String Protocolo = (String)D_Code + ";" + (String)Err + ";" + EndLine; return Protocolo; } String MontarProtocoloSensor(S_Code TipoSensor, String Componente, String Dados) { String Protocolo = BeginSensor + (String)TipoSensor + ";" + Componente + ";" + Dados + EndLine; return Protocolo; } String MontarDadosProtocoloTeste(bool Testando, String Componente, String Resultado, String Comando, String Leitura) { String Protocolo = (Testando ? "1;" : "0;") + Componente + ";" + Resultado + ";" + Comando + ";" + Leitura + EndLine; return Protocolo; } String MontarDadosProtocoloRPM(float rpm, double potencia, StatusMotor aceleracao, Sentido sentido, bool revertendo, float rpm_offset) { String Protocolo = (String)rpm + ";" + (String)potencia + ";" + (String)aceleracao + ";" + (String)sentido + ";" + (revertendo ? "1" : "0") + ";" + (String)rpm_offset; return Protocolo; } String MontarDadosProtocoloDHT22(float temperatura, float umidade, float indiceCalor) { String Protocolo = (String)temperatura + ";" + (String)umidade + ";" + (String)indiceCalor; return Protocolo; } String MontarDadosProtocoloEncoder(Sentido sentido, int angulo, bool ref0, bool ref90, bool ref270, bool referenciando, bool referenciado) { String Protocolo = (String)sentido + ";" + (String)angulo + ";" + (ref0 ? "1" : "0") + ";" + (ref90 ? "1" : "0") + ";" + (ref270 ? "1" : "0") + ";" + (referenciando ? "1" : "0") + ";" + (referenciado ? "1" : "0"); return Protocolo; } String MontarDadosProtocoloEncoderAbsoluto(Sentido sentido, int angulo) { String Protocolo = (String)sentido + ";" + (String)angulo; return Protocolo; } String MontarDadosProtocoloBicoPulverizador(bool statusBico) { String Protocolo = String(statusBico ? "1" : "0"); return Protocolo; } String MontarDadosProtocoloBombaPressurizadora(bool ligado, float percentualPotencia) { String Protocolo = String(ligado ? "1" : "0") + ";" + String(percentualPotencia); return Protocolo; } String MontarDadosProtocoloSensorGenerico(String dados1, String dados2 = "", String dados3 = "", String dados4 = "") { String Protocolo = dados1 + ";" + dados2 + ";" + dados3 + ";" + dados4; return Protocolo; } String MontarDadosProtocoloNTC10K(float temperatura) { String Protocolo = (String)temperatura; return Protocolo; } String MontarDadosProtocoloTensao(float leitura, float vPin, float vReal) { String Protocolo = (String)leitura + ";" + (String)vPin + ";" + (String)vReal; return Protocolo; } String MontarDadosProtocoloCorrente(float leitura, float vPin, float corrente) { String Protocolo = (String)leitura + ";" + (String)vPin + ";" + (String)corrente; return Protocolo; } String MontarDadosProtocoloINA226(float busVoltage, float shuntVoltage, float current, float power) { String Protocolo = (String)busVoltage + ";" + (String)shuntVoltage + ";" + (String)current + ";" + (String)power; return Protocolo; } String MontarDadosProtocoloUltrassom(float distancia, long duracao) { String Protocolo = (String)distancia + ";" + (String)duracao; return Protocolo; } String MontarDadosProtocoloFluxo(int pulsos, int tempo) { String Protocolo = (String)pulsos + ";" + (String)tempo; return Protocolo; } String MontarDadosProtocoloMassa(float massa) { String Protocolo = (String)massa; return Protocolo; } String MontarDadosProtocoloPressao(float pressao, int leitura) { String Protocolo = (String)pressao + ";" + (String)leitura; return Protocolo; } String MontarDadosProtocoloMagnetometro(int x, int y, int z, float orientacao) { String Protocolo = (String)x + ";" + (String)y + ";" + (String)z + ";" + (String)orientacao; return Protocolo; } String MontarDadosProtocoloLeituraSensor(float leitura) { String Protocolo = (String)leitura; return Protocolo; } String MontarDadosProtocoloSonar(long distancia, long angulo, int posicao) { String Protocolo = (String)distancia + ";" + (String)angulo + ";" + (String)posicao; return Protocolo; } String MontarDadosProtocoloSonarM(int distancias[36], int angulos[36], int posicao) { String Protocolo = (String)posicao + "_"; for (int i = 0; i < 36; i++) { Protocolo += (String)distancias[i] + "," + (String)angulos[i] + "-"; } return Protocolo; } String MontarDadosProtocoloBLD(float rpm, double temperatura, double tensao, double corrente_max, bool ligado, Sentido sentido, bool freio, int codigo_alarme, double temp_driver) { String Protocolo = (String)rpm + ";" + (String)temperatura + ";" + (String)tensao + ";" + (String)corrente_max + ";" + (ligado ? "1" : "0") + ";" + (String)sentido + ";" + (freio ? "1" : "0") + ";" + (String)codigo_alarme + ";" + (String)temp_driver; return Protocolo; } #endif