agrobot_base/Firmware/Modulos/SensorUltrassomModel.h

85 lines
1.9 KiB
C++

#include "SerialService.h"
#include "Pinout.h"
#include "Utils.h"
#ifndef SensorUltrassomModel
#define SensorUltrassomModel
class SensorUltrassom {
public:
SensorUltrassom(String _modID, String _id) {
Mod_ID = _modID;
_ID = _id;
}
// Variáveis
#define SOUND_SPEED 0.034
long duration = 0;
float distanceCm = 0;
// Definições
String Mod_ID;
String _ID;
S_Code _componente = sULT;
PinoModel _pinoE;
PinoModel _pinoT;
bool Iniciado = false;
void Inicializar() {
if (Iniciado) {
//EnviarDadosSerial(_ID + " ja inicializado");
//EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
return;
}
_pinoE.Conectar();
_pinoT.Conectar();
//EnviarDadosSerial(_ID + " Iniciado");
Iniciado = true;
//EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
}
void Desligar() {
if (!Iniciado) {
//EnviarDadosSerial(_ID + " nao esta inicializado");
//EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
return;
}
// Redefinir as configurações para os valores iniciais
_pinoE.Desconectar();
_pinoT.Desconectar();
//EnviarDadosSerial(_ID + " Desligado");
Iniciado = false;
//EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
}
void AferirDistancia() {
_pinoT.set(false);
delayMicroseconds(2);
_pinoT.set(true);
delayMicroseconds(10);
_pinoT.set(false);
duration = pulseIn(_pinoE.num, HIGH);
distanceCm = duration * SOUND_SPEED / 2;
}
void RequisitarDados() {
AferirDistancia();
//EnviarDadosSerial(Mod_ID, MontarProtocoloSensor(sULT, _ID, MontarDadosProtocoloUltrassom(distanceCm, duration)));
}
};
#endif