301 lines
7.6 KiB
C++
301 lines
7.6 KiB
C++
#include "Enuns.h"
|
|
#include <vector>
|
|
|
|
#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<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() {
|
|
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, (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 |