394 lines
11 KiB
C++
394 lines
11 KiB
C++
#include "Enuns.h"
|
|
#include <vector>
|
|
#include <optional>
|
|
|
|
#ifndef SerialService
|
|
#define SerialService
|
|
|
|
bool DebugMode = true;
|
|
|
|
const char BeginLine = '@';
|
|
const char EndLine = '$';
|
|
const char BeginSensor = '#';
|
|
const char* SplitMessage = ";";
|
|
const char* SplitParams = ",";
|
|
const char* SplitConfig = "*";
|
|
const char* SplitSubParams = "~";
|
|
const int MAX_PROTOCOLS = 20;
|
|
|
|
class ProtocoloSerial {
|
|
public:
|
|
F_Code funcao;
|
|
String Mod_ID;
|
|
String protocolo;
|
|
int idMensagem;
|
|
};
|
|
|
|
std::vector<String> SplitString(String message, const char *delimiter) {
|
|
std::vector<String> 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<ProtocoloSerial> LerBufferSerialFila(String Mod_ID) {
|
|
std::vector<ProtocoloSerial> 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<String> 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 PrintTela(String msg, bool ln = true) {
|
|
if (!Serial) {
|
|
Serial.begin(115200);
|
|
}
|
|
if (Serial && DebugMode) {
|
|
if (ln) {
|
|
Serial.println(msg);
|
|
}
|
|
else {
|
|
Serial.print(msg);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
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)MsgRx + SplitMessage +
|
|
(String)idMensagem + SplitMessage +
|
|
EndLine;
|
|
return protocolo;
|
|
}
|
|
|
|
String MontarProtocoloVerificacao(T_Code D_Code, int versao, bool conectado) {
|
|
String Protocolo =
|
|
(String)ChkRx + SplitMessage +
|
|
(String)D_Code + SplitMessage +
|
|
(String)versao + SplitMessage +
|
|
(conectado ? "1" : "0") + SplitMessage +
|
|
EndLine;
|
|
return Protocolo;
|
|
}
|
|
|
|
String MontarProtocoloErro(T_Code D_Code) {
|
|
String Protocolo =
|
|
(String)D_Code + SplitMessage +
|
|
(String)ErrRx + SplitMessage +
|
|
EndLine;
|
|
return Protocolo;
|
|
}
|
|
|
|
String MontarProtocoloSensor(S_Code TipoSensor, String Componente, String Dados) {
|
|
String Protocolo =
|
|
BeginSensor +
|
|
(String)TipoSensor + SplitMessage +
|
|
Componente + SplitMessage +
|
|
Dados +
|
|
EndLine;
|
|
return Protocolo;
|
|
}
|
|
|
|
String MontarDadosProtocoloTeste(bool Testando, String Componente, String Resultado, String Comando, String Leitura) {
|
|
String Protocolo = (String)"" +
|
|
(Testando ? "1" : "0") + SplitMessage +
|
|
Componente + SplitMessage +
|
|
Resultado + SplitMessage +
|
|
Comando + SplitMessage +
|
|
Leitura +
|
|
EndLine;
|
|
return Protocolo;
|
|
}
|
|
|
|
String MontarDadosProtocoloRPM(float rpm, double potencia, StatusMotor aceleracao, Sentido sentido, bool revertendo, float rpm_offset) {
|
|
String Protocolo =
|
|
(String)rpm + SplitMessage +
|
|
(String)potencia + SplitMessage +
|
|
(String)aceleracao + SplitMessage +
|
|
(String)sentido + SplitMessage +
|
|
(revertendo ? "1" : "0") + SplitMessage +
|
|
(String)rpm_offset;
|
|
return Protocolo;
|
|
}
|
|
|
|
String MontarDadosProtocoloDHT22(float temperatura, float umidade, float indiceCalor) {
|
|
String Protocolo =
|
|
(String)temperatura + SplitMessage +
|
|
(String)umidade + SplitMessage +
|
|
(String)indiceCalor;
|
|
return Protocolo;
|
|
}
|
|
|
|
String MontarDadosProtocoloEncoder(Sentido sentido, int angulo, bool ref0, bool ref90, bool ref270, bool referenciando, bool referenciado) {
|
|
String Protocolo =
|
|
(String)sentido + SplitMessage +
|
|
(String)angulo + SplitMessage +
|
|
(ref0 ? "1" : "0") + SplitMessage +
|
|
(ref90 ? "1" : "0") + SplitMessage +
|
|
(ref270 ? "1" : "0") + SplitMessage +
|
|
(referenciando ? "1" : "0") + SplitMessage +
|
|
(referenciado ? "1" : "0");
|
|
return Protocolo;
|
|
}
|
|
|
|
String MontarDadosProtocoloEncoderAbsoluto(Sentido sentido, int angulo) {
|
|
String Protocolo =
|
|
(String)sentido + SplitMessage +
|
|
(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") + SplitMessage +
|
|
String(percentualPotencia);
|
|
return Protocolo;
|
|
}
|
|
|
|
String MontarDadosProtocoloSensorGenerico(String dados1, String dados2 = "", String dados3 = "", String dados4 = "") {
|
|
String Protocolo =
|
|
dados1 + SplitMessage +
|
|
dados2 + SplitMessage +
|
|
dados3 + SplitMessage +
|
|
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 + SplitMessage +
|
|
(String)vPin + SplitMessage +
|
|
(String)vReal;
|
|
return Protocolo;
|
|
}
|
|
|
|
String MontarDadosProtocoloCorrente(float leitura, float vPin, float corrente) {
|
|
String Protocolo =
|
|
(String)leitura + SplitMessage +
|
|
(String)vPin + SplitMessage +
|
|
(String)corrente;
|
|
return Protocolo;
|
|
}
|
|
|
|
String MontarDadosProtocoloINA226(float busVoltage, float shuntVoltage, float current, float power) {
|
|
String Protocolo =
|
|
(String)busVoltage + SplitMessage +
|
|
(String)shuntVoltage + SplitMessage +
|
|
(String)current + SplitMessage +
|
|
(String)power;
|
|
return Protocolo;
|
|
}
|
|
|
|
String MontarDadosProtocoloUltrassom(float distancia, long duracao) {
|
|
String Protocolo =
|
|
(String)distancia + SplitMessage +
|
|
(String)duracao;
|
|
return Protocolo;
|
|
}
|
|
|
|
String MontarDadosProtocoloFluxo(int pulsos, int tempo) {
|
|
String Protocolo =
|
|
(String)pulsos + SplitMessage +
|
|
(String)tempo;
|
|
return Protocolo;
|
|
}
|
|
|
|
String MontarDadosProtocoloMassa(float massa) {
|
|
String Protocolo =
|
|
(String)massa;
|
|
return Protocolo;
|
|
}
|
|
|
|
String MontarDadosProtocoloPressao(float pressao, int leitura) {
|
|
String Protocolo =
|
|
(String)pressao + SplitMessage +
|
|
(String)leitura;
|
|
return Protocolo;
|
|
}
|
|
|
|
String MontarDadosProtocoloMagnetometro(int x, int y, int z, float orientacao) {
|
|
String Protocolo =
|
|
(String)x + SplitMessage +
|
|
(String)y + SplitMessage +
|
|
(String)z + SplitMessage +
|
|
(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 + SplitMessage +
|
|
(String)angulo + SplitMessage +
|
|
(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(bool iniciado, float rpm, double temperatura, double tensao, double corrente_max, bool ligado, Sentido sentido, bool freio, int codigo_alarme, double temp_driver) {
|
|
String Protocolo = (String)"" +
|
|
(iniciado ? "1" : "0") + SplitMessage +
|
|
(String)rpm + SplitMessage +
|
|
(String)temperatura + SplitMessage +
|
|
(String)tensao + SplitMessage +
|
|
(String)corrente_max + SplitMessage +
|
|
(ligado ? "1" : "0") + SplitMessage +
|
|
(String)sentido + SplitMessage +
|
|
(freio ? "1" : "0") + SplitMessage +
|
|
(String)codigo_alarme + SplitMessage +
|
|
(String)temp_driver;
|
|
return Protocolo;
|
|
}
|
|
|
|
|
|
String MontarDadosProtocoloMVD(bool movIniciado, float rpm, double temperatura, double tensao, double corrente_max, bool ligado, Sentido sentido, bool freio, int codigo_alarme, double temp_driver, bool dirIniciado, Sentido sentidoMp, double angulo) {
|
|
String Protocolo = (String)"" +
|
|
(movIniciado ? "1" : "0") + SplitMessage +
|
|
(String)rpm + SplitMessage +
|
|
(String)temperatura + SplitMessage +
|
|
(String)tensao + SplitMessage +
|
|
(String)corrente_max + SplitMessage +
|
|
(ligado ? "1" : "0") + SplitMessage +
|
|
(String)sentido + SplitMessage +
|
|
(freio ? "1" : "0") + SplitMessage +
|
|
(String)codigo_alarme + SplitMessage +
|
|
(String)temp_driver + SplitMessage +
|
|
(dirIniciado ? "1" : "0") + SplitMessage +
|
|
(String)sentidoMp + SplitMessage +
|
|
(String)angulo;
|
|
return Protocolo;
|
|
}
|
|
|
|
String MontarDadosProtocoloMVD(bool movIniciado, double temperatura, bool dirIniciado, Sentido sentido, int angulo) {
|
|
String Protocolo = (String)"" +
|
|
(movIniciado ? "1" : "0") + SplitMessage +
|
|
(String)temperatura + SplitMessage +
|
|
(dirIniciado ? "1" : "0") + SplitMessage +
|
|
(String)sentido + SplitMessage +
|
|
(String)angulo;
|
|
return Protocolo;
|
|
}
|
|
|
|
String MontarDadosProtocoloAtuador(bool b1Iniciado, bool b1, bool b2Iniciado, bool b2, bool b3Iniciado, bool b3, bool b4Iniciado, bool b4, bool bombaIniciada, bool bomba_ligado, double bomba_potencia, bool fluxoIniciado, int fluxo_pulsos, int fluxo_periodo, bool massaIniciado, double massa_leitura, bool pressaoIniciado, double pressao, double pressao_leitura) {
|
|
String Protocolo = (String)"" +
|
|
(b1Iniciado ? "1" : "0") + SplitMessage +
|
|
(b1 ? "1" : "0") + SplitMessage +
|
|
(b2Iniciado ? "1" : "0") + SplitMessage +
|
|
(b2 ? "1" : "0") + SplitMessage +
|
|
(b3Iniciado ? "1" : "0") + SplitMessage +
|
|
(b3 ? "1" : "0") + SplitMessage +
|
|
(b4Iniciado ? "1" : "0") + SplitMessage +
|
|
(b4 ? "1" : "0") + SplitMessage +
|
|
(bombaIniciada ? "1" : "0") + SplitMessage +
|
|
(bomba_ligado ? "1" : "0") + SplitMessage +
|
|
(String)bomba_potencia + SplitMessage +
|
|
(fluxoIniciado ? "1" : "0") + SplitMessage +
|
|
(String)fluxo_pulsos + SplitMessage +
|
|
(String)fluxo_periodo + SplitMessage +
|
|
(massaIniciado ? "1" : "0") + SplitMessage +
|
|
(String)massa_leitura + SplitMessage +
|
|
(pressaoIniciado ? "1" : "0") + SplitMessage +
|
|
(String)pressao + SplitMessage +
|
|
(String)pressao_leitura;
|
|
return Protocolo;
|
|
}
|
|
|
|
String MontarDadosProtocoloLED(bool Iniciado, StatusLED Status) {
|
|
String Protocolo = (String)"" +
|
|
(Iniciado ? "1" : "0") + SplitMessage +
|
|
(String)Status;
|
|
return Protocolo;
|
|
}
|
|
|
|
String MontarDadosProtocoloRele(bool Iniciado, Estado Status) {
|
|
String Protocolo = (String)"" +
|
|
(Iniciado ? "1" : "0") + SplitMessage +
|
|
(String)Status;
|
|
return Protocolo;
|
|
}
|
|
|
|
String MontarDadosProtocoloFreio(bool Iniciado, int Angulo) {
|
|
String Protocolo = (String)"" +
|
|
(Iniciado ? "1" : "0") + SplitMessage +
|
|
(String)Angulo;
|
|
return Protocolo;
|
|
}
|
|
|
|
String MontarDadosProtocoloTemperatura(bool Iniciado, float temperatura) {
|
|
String Protocolo = (String)"" +
|
|
(Iniciado ? "1" : "0") + SplitMessage +
|
|
(String)temperatura;
|
|
return Protocolo;
|
|
}
|
|
|
|
#endif |