agrobot_base/Firmware/Modulos/Direcional/Direcional.ino

139 lines
2.6 KiB
C++

enum T_Code {
Vzo = 200,
Mov = 100,
Dir = 101,
Sen = 102,
Atu = 103,
};
enum F_Code {
Nda = 200,
Chk = 244,
Cfg = 258,
Tst = 288,
Cmd = 293,
};
enum S_Code {
sRPM,
sTST,
sCfg,
};
enum Sentido {
Parado,
Horario,
Antihorario,
};
#define D_Code Dir
int PinoReleGeral = 23;
bool Conectado = false;
const char EndLine = '$';
const char BeginSensor = '#';
int _TaxaAmostragem;
bool M1_Ativado = false;
bool M2_Ativado = false;
bool M3_Ativado = false;
bool M4_Ativado = false;
void setup() {
Serial.begin(115200);
pinMode(PinoReleGeral, OUTPUT);
digitalWrite(PinoReleGeral, LOW);
}
void loop() {
if (Serial.available() > 3) {
String Protocolo = "";
//1000;080;1;020;001
F_Code _funcao = Nda;
while (Serial.available()) {
char Entrada = (char)Serial.read();
if (Entrada == EndLine) {
break;
}
Protocolo += Entrada;
if (Protocolo.length() == 3) {
if (_funcao == Nda) {
_funcao = (F_Code)((String)Protocolo[0] + (String)Protocolo[1] + (String)Protocolo[2]).toInt();
Protocolo = "";
}
}
}
if (_funcao == Chk) {
Serial.println((String)D_Code + (String)_funcao);
Serial.flush();
}
else if (_funcao == Cfg) {
Conectado = (String)Protocolo[0] == "1";
_TaxaAmostragem = ((String)Protocolo[2] + (String)Protocolo[3] + (String)Protocolo[4] + (String)Protocolo[5] + (String)Protocolo[6]).toInt();
M1_Ativado = (String)Protocolo[8] == "1";
M2_Ativado = (String)Protocolo[10] == "1";
M3_Ativado = (String)Protocolo[12] == "1";
M4_Ativado = (String)Protocolo[14] == "1";
if (M1_Ativado) {
if (Conectado) {
}
else {
}
vTaskDelay(500);
}
if (M2_Ativado) {
if (Conectado) {
}
else {
}
vTaskDelay(500);
}
if (M3_Ativado) {
if (Conectado) {
}
else {
}
vTaskDelay(500);
}
if (M4_Ativado) {
if (Conectado) {
}
else {
}
vTaskDelay(500);
}
digitalWrite(PinoReleGeral, Conectado);
vTaskDelay(100);
String Protocolo = BeginSensor + ((String)sCfg) + "ET;" + (String)Conectado;
Serial.println(Protocolo);
Serial.flush();
}
else if (_funcao == Cmd) {
Serial.println(Protocolo);
//canal;potencia;sentido;rampa;precisao;rpm
//0;000;0;000;000;000
}
else if (_funcao == Tst) {
// teste
}
}
delay(10);
}