#include "Enuns.h" #include #ifndef SerialService #define SerialService const char BeginLine = '@'; const char EndLine = '$'; const char BeginSensor = '#'; const int MAX_PROTOCOLS = 20; class ProtocoloSerial { public: F_Code funcao; String protocolo; int idMensagem; }; int LerBufferSerial(ProtocoloSerial (&protocolos)[MAX_PROTOCOLS]) { int protocolCount = 0; // Contador de protocolos if (Serial.available() > 0) { String protocoloAtual = ""; F_Code _funcaoAtual = Nda; while (Serial.available()) { char entrada = (char)Serial.read(); if (entrada == EndLine) { if (protocoloAtual.length() > 0 && protocolCount < MAX_PROTOCOLS) { protocolos[protocolCount].funcao = _funcaoAtual; protocolos[protocolCount].protocolo = protocoloAtual; protocoloAtual = ""; // Reseta o protocolo atual _funcaoAtual = Nda; protocolCount++; } } else { protocoloAtual += entrada; } if (protocoloAtual.length() == 3 && _funcaoAtual == Nda) { _funcaoAtual = (F_Code)(protocoloAtual.toInt()); protocoloAtual = ""; } } } return protocolCount; // Retorna o nĂºmero de protocolos lidos } 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() { 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, (char*)";"); if (partes.size() == 3) { ProtocoloSerial objeto; objeto.idMensagem = partes[0].toInt(); objeto.funcao = (F_Code)(partes[1].toInt()); objeto.protocolo = partes[2]; protocolos.push_back(objeto); } break; } } else if (ProtocoloIniciado) { protocoloAtual += entrada; } } } return protocolos; } void EnviarDadosSerial(String Mensagem) { Serial.println(Mensagem); Serial.flush(); vTaskDelay(pdMS_TO_TICKS(10)); } String MontarProtocoloMensagemRecebida(int idMensagem) { String protocolo = (String)Msg + ";" + (String)idMensagem + ";" + 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, bool referenciando, bool referenciado) { String Protocolo = (String)sentido + ";" + (String)angulo + ";" + (referenciando ? "1" : "0") + ";" + (referenciado ? "1" : "0"); 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; } #endif