ajustes na implementacao do encoder magnetico

This commit is contained in:
Diego Freitas 2024-05-10 21:57:08 -03:00
parent 3dbd6c7638
commit 71a41ef5a6
34 changed files with 78 additions and 34 deletions

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"Conectado":false,"QuantidadeBicos":4,"DensidadeHerbicida":1.05,"CapacidadeReservatorio":30.0,"AtuacaoNivelAlto":true,"BicosPulverizadores":[{"ID":"B01","Posicao":1,"Atuado":true,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":34.42987713140743},{"ID":"B02","Posicao":2,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":14.876485059544191},{"ID":"B03","Posicao":3,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":18.103588945512129},{"ID":"B04","Posicao":4,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":18.437319738098896},{"ID":"B05","Posicao":5,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B06","Posicao":6,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B07","Posicao":7,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B08","Posicao":8,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B09","Posicao":9,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B10","Posicao":10,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0}],"BombaPressurizadora":{"ID":"BOMBA","BombaAtuada":false,"Ligado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[14,35,36,37,5],"PressaoSP":85.0,"Pressao":82.01,"Potencia":0.0},"Sensores":[{"LogGrafico":[],"ID":"FLXLN","Prioridade":23,"Descricao":"Fluxo na linha principal","Componente":198,"Aferir":true,"DelayAmostragem":300,"Inicializado":false,"Testando":false,"Funcoes":[25],"Parametros":[],"UnidadeMedida":"mL/s","Leituras":[0.0,0.0],"ValorMinimo":0.0,"ValorMaximo":25222.0,"LimiteMaximo":0.0,"LimiteMinimo":0.0},{"LogGrafico":[],"ID":"MASRS","Prioridade":3,"Descricao":"Massa do reservatório de herbicida","Componente":532,"Aferir":true,"DelayAmostragem":1000,"Inicializado":false,"Testando":false,"Funcoes":[22,23],"Parametros":[],"UnidadeMedida":"Kg","Leituras":[1117263.12],"ValorMinimo":-1.281631101976581E+32,"ValorMaximo":2.8836731440342142E+24,"LimiteMaximo":50.0,"LimiteMinimo":5.0},{"LogGrafico":[],"ID":"PRSLN","Prioridade":3,"Descricao":"Pressão na linha principal","Componente":333,"Aferir":true,"DelayAmostragem":1000,"Inicializado":false,"Testando":false,"Funcoes":[24],"Parametros":[["Vmin","000.00"],["Vmax","004.50"],["Pmax","174.04"]],"UnidadeMedida":"psi","Leituras":[82.01],"ValorMinimo":0.0,"ValorMaximo":127.63,"LimiteMaximo":120.0,"LimiteMinimo":60.0}],"PercentualInicioPulverizacao":0.3,"ScriptDeteccaoErvas":"weed-detector-v7.py","_MassaRef":0.8,"_MassaLeituraRef":40876.37,"_MassaLeituraExtra":1895800.0,"_MassaLeitura":1117263.12,"MassaReservatorio":15.236908365395459,"VolumeReservatorio":14.511341300376627,"PercentualReservatorio":48.371137667922085,"VolumeVazaoAferido":102.0,"_FluxoMlRef":102.0,"_FluxoPulsoRef":80.0,"_LeituraPulsos":0,"_LeituraPeriodo":0,"VazaoFluxoMLpS":0.0,"VolumeVazaoML":0.0,"_PressaoVmin":0.0,"_PressaoVmax":4.5,"_PressaoMax":174.045,"_LeituraPressao":2631.0,"PressaoLinha":82.01,"PressaoLinhaCalc":82.0030336996337} {"Conectado":false,"QuantidadeBicos":4,"DensidadeHerbicida":1.05,"CapacidadeReservatorio":30.0,"AtuacaoNivelAlto":true,"BicosPulverizadores":[{"ID":"B01","Posicao":1,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":34.42987713140743},{"ID":"B02","Posicao":2,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":14.876485059544191},{"ID":"B03","Posicao":3,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":18.103588945512129},{"ID":"B04","Posicao":4,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":18.437319738098896},{"ID":"B05","Posicao":5,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B06","Posicao":6,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B07","Posicao":7,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B08","Posicao":8,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B09","Posicao":9,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B10","Posicao":10,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0}],"BombaPressurizadora":{"ID":"BOMBA","BombaAtuada":false,"Ligado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[14,35,36,37,5],"PressaoSP":85.0,"Pressao":82.01,"Potencia":0.0},"Sensores":[{"LogGrafico":[],"ID":"FLXLN","Prioridade":23,"Descricao":"Fluxo na linha principal","Componente":198,"Aferir":true,"DelayAmostragem":300,"Inicializado":false,"Testando":false,"Funcoes":[25],"Parametros":[],"UnidadeMedida":"mL/s","Leituras":[0.0,0.0],"ValorMinimo":0.0,"ValorMaximo":25222.0,"LimiteMaximo":0.0,"LimiteMinimo":0.0},{"LogGrafico":[],"ID":"MASRS","Prioridade":3,"Descricao":"Massa do reservatório de herbicida","Componente":532,"Aferir":true,"DelayAmostragem":1000,"Inicializado":false,"Testando":false,"Funcoes":[22,23],"Parametros":[],"UnidadeMedida":"Kg","Leituras":[1117263.12],"ValorMinimo":-1.281631101976581E+32,"ValorMaximo":2.8836731440342142E+24,"LimiteMaximo":50.0,"LimiteMinimo":5.0},{"LogGrafico":[],"ID":"PRSLN","Prioridade":3,"Descricao":"Pressão na linha principal","Componente":333,"Aferir":true,"DelayAmostragem":1000,"Inicializado":false,"Testando":false,"Funcoes":[24],"Parametros":[["Vmin","000.00"],["Vmax","004.50"],["Pmax","174.04"]],"UnidadeMedida":"psi","Leituras":[82.01],"ValorMinimo":0.0,"ValorMaximo":127.63,"LimiteMaximo":120.0,"LimiteMinimo":60.0}],"PercentualInicioPulverizacao":0.3,"ScriptDeteccaoErvas":"weed-detector-v7.py","_MassaRef":0.8,"_MassaLeituraRef":40876.37,"_MassaLeituraExtra":1895800.0,"_MassaLeitura":1117263.12,"MassaReservatorio":15.236908365395459,"VolumeReservatorio":14.511341300376627,"PercentualReservatorio":48.371137667922085,"VolumeVazaoAferido":102.0,"_FluxoMlRef":102.0,"_FluxoPulsoRef":80.0,"_LeituraPulsos":0,"_LeituraPeriodo":0,"VazaoFluxoMLpS":0.0,"VolumeVazaoML":0.0,"_PressaoVmin":0.0,"_PressaoVmax":4.5,"_PressaoMax":174.045,"_LeituraPressao":2631.0,"PressaoLinha":82.01,"PressaoLinhaCalc":82.0030336996337}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -25,7 +25,7 @@
<meta name="viewport" content="width=device-width, <meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style> <style>
#map_485de4fe4992e7b597d3f52d56de1299 { #map_2a3d14da3dec6f21186e1667373ce43a {
position: relative; position: relative;
width: 100.0%; width: 100.0%;
height: 100.0%; height: 100.0%;
@ -39,14 +39,14 @@
<body> <body>
<div class="folium-map" id="map_485de4fe4992e7b597d3f52d56de1299" ></div> <div class="folium-map" id="map_2a3d14da3dec6f21186e1667373ce43a" ></div>
</body> </body>
<script> <script>
var map_485de4fe4992e7b597d3f52d56de1299 = L.map( var map_2a3d14da3dec6f21186e1667373ce43a = L.map(
"map_485de4fe4992e7b597d3f52d56de1299", "map_2a3d14da3dec6f21186e1667373ce43a",
{ {
center: [0.0, 0.0], center: [0.0, 0.0],
crs: L.CRS.EPSG3857, crs: L.CRS.EPSG3857,
@ -59,6 +59,15 @@
var tile_layer_f6a6232487eccae056d94768bd7259ef = L.tileLayer(
"https://tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "\u0026copy; \u003ca href=\"https://www.openstreetmap.org/copyright\"\u003eOpenStreetMap\u003c/a\u003e contributors", "detectRetina": false, "maxNativeZoom": 19, "maxZoom": 19, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
);
tile_layer_f6a6232487eccae056d94768bd7259ef.addTo(map_2a3d14da3dec6f21186e1667373ce43a);
</script> </script>
<script> <script>
@ -78,7 +87,7 @@
} }
trajeto_json_add({"features": []}); trajeto_json_add({"features": []});
trajeto_json.addTo(map_485de4fe4992e7b597d3f52d56de1299); trajeto_json.addTo(map_2a3d14da3dec6f21186e1667373ce43a);
function adicionarGeometria(novaGeometria) { function adicionarGeometria(novaGeometria) {
trajeto_json.addData(novaGeometria); trajeto_json.addData(novaGeometria);
@ -103,7 +112,7 @@
} }
} else { } else {
console.log("Feature com ID " + idGeometria + " n<EFBFBD>o encontrada."); console.log("Feature com ID " + idGeometria + " não encontrada.");
} }
} }
@ -136,29 +145,29 @@
var marcadorDinamico = L.marker([0, 0], { var marcadorDinamico = L.marker([0, 0], {
icon: customIcon icon: customIcon
}).addTo(map_485de4fe4992e7b597d3f52d56de1299); }).addTo(map_2a3d14da3dec6f21186e1667373ce43a);
// Conectar ao broker MQTT // Conectar ao broker MQTT
const client = mqtt.connect('ws://localhost:9001'); // Use wss para conex<EFBFBD>o segura const client = mqtt.connect('ws://localhost:9001'); // Use wss para conexão segura
// Quando conectado, inscreva-se no t<EFBFBD>pico desejado // Quando conectado, inscreva-se no tópico desejado
client.on('connect', function () { client.on('connect', function () {
console.log('Conectado ao broker MQTT'); console.log('Conectado ao broker MQTT');
// Inscrever-se no t<EFBFBD>pico // Inscrever-se no tópico
client.subscribe('coordenadas_gps', function (err) { client.subscribe('coordenadas_gps', function (err) {
if (!err) { if (!err) {
console.log("Inscri<EFBFBD><EFBFBD>o bem-sucedida no t<>pico"); console.log("Inscrição bem-sucedida no tópico");
} else { } else {
console.error("Falha na inscri<EFBFBD><EFBFBD>o do t<>pico", err); console.error("Falha na inscrição do tópico", err);
} }
}); });
}); });
// Lidar com mensagens recebidas para o t<EFBFBD>pico inscrito // Lidar com mensagens recebidas para o tópico inscrito
client.on('message', function (topic, message) { client.on('message', function (topic, message) {
// A mensagem <EFBFBD> um Buffer, converta para string ou objeto conforme necess<73>rio // A mensagem é um Buffer, converta para string ou objeto conforme necessário
//console.log(`Mensagem recebida no t<EFBFBD>pico '${topic}': ${message.toString()}`); //console.log(`Mensagem recebida no tópico '${topic}': ${message.toString()}`);
var dados = JSON.parse(message); var dados = JSON.parse(message);
var novaLatitude = dados.latitude; var novaLatitude = dados.latitude;
var novaLongitude = dados.longitude; var novaLongitude = dados.longitude;
@ -175,7 +184,7 @@
marcadorDinamico.setRotationAngle(angulo); marcadorDinamico.setRotationAngle(angulo);
adicionarCoordenada("Tj", [novaLongitude, novaLatitude]); adicionarCoordenada("Tj", [novaLongitude, novaLatitude]);
map_485de4fe4992e7b597d3f52d56de1299.setView(novaPosicao, map_485de4fe4992e7b597d3f52d56de1299.getZoom()); map_2a3d14da3dec6f21186e1667373ce43a.setView(novaPosicao, map_2a3d14da3dec6f21186e1667373ce43a.getZoom());
}); });
function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) { function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) {
@ -185,18 +194,18 @@
const latB = P2latitude * (Math.PI / 180.0); const latB = P2latitude * (Math.PI / 180.0);
const lonB = P2longitude * (Math.PI / 180.0); const lonB = P2longitude * (Math.PI / 180.0);
// Calcular a diferen<EFBFBD>a de longitude // Calcular a diferença de longitude
const deltaLon = lonB - lonA; const deltaLon = lonB - lonA;
// Calcular a dire<EFBFBD><EFBFBD>o // Calcular a direção
const y = Math.sin(deltaLon) * Math.cos(latB); const y = Math.sin(deltaLon) * Math.cos(latB);
const x = Math.cos(latA) * Math.sin(latB) - Math.sin(latA) * Math.cos(latB) * Math.cos(deltaLon); const x = Math.cos(latA) * Math.sin(latB) - Math.sin(latA) * Math.cos(latB) * Math.cos(deltaLon);
const direcaoRadianos = Math.atan2(y, x); const direcaoRadianos = Math.atan2(y, x);
// Converter a dire<EFBFBD><EFBFBD>o de radianos para graus // Converter a direção de radianos para graus
let direcaoGraus = direcaoRadianos * (180.0 / Math.PI); let direcaoGraus = direcaoRadianos * (180.0 / Math.PI);
// Normalizar a dire<EFBFBD><EFBFBD>o para que esteja no intervalo de 0 a 360 graus // Normalizar a direção para que esteja no intervalo de 0 a 360 graus
direcaoGraus = (direcaoGraus + 360) % 360; direcaoGraus = (direcaoGraus + 360) % 360;
return direcaoGraus; return direcaoGraus;

View File

@ -441,4 +441,4 @@ C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\Debug\Python\Models\deeplabv3pl
C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\Debug\AgroBase.exe.config C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\Debug\AgroBase.exe.config
C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\Debug\AgroBase.exe C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\Debug\AgroBase.exe
C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\Debug\AgroBase.pdb C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\Debug\AgroBase.pdb
C:\ZendionINC\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.csproj.Up2Date C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.csproj.CopyComplete

View File

@ -5,6 +5,7 @@
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\SerialService.h" #include "C:\ZendionInc\agrobot_base\Firmware\Modulos\SerialService.h"
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\Pinout.h" #include "C:\ZendionInc\agrobot_base\Firmware\Modulos\Pinout.h"
#include <SimpleKalmanFilter.h>
#define D_Code Dir #define D_Code Dir
#define VERSION 8 #define VERSION 8
@ -38,6 +39,8 @@ class Motor {
PinoModel _pinoPUL; PinoModel _pinoPUL;
PinoModel _pinoEncoder; PinoModel _pinoEncoder;
SimpleKalmanFilter* encoderKalman;
bool Iniciado = false; bool Iniciado = false;
bool Testando = false; bool Testando = false;
bool Referenciando = false; bool Referenciando = false;
@ -73,6 +76,8 @@ class Motor {
_pinoDIR.Conectar(false); _pinoDIR.Conectar(false);
_pinoEncoder.Conectar(); _pinoEncoder.Conectar();
encoderKalman = new SimpleKalmanFilter(2, 2, 0.01);
xTaskCreatePinnedToCore(&Motor::RampaTaskWrapper, "RampaTask", 5000, this, 20 - _canal, &RampaTaskHandle, tskNO_AFFINITY); xTaskCreatePinnedToCore(&Motor::RampaTaskWrapper, "RampaTask", 5000, this, 20 - _canal, &RampaTaskHandle, tskNO_AFFINITY);
ResetRef(_Referenciar); ResetRef(_Referenciar);
@ -108,6 +113,8 @@ class Motor {
// Parar a execução das tarefas // Parar a execução das tarefas
vTaskDelete(RampaTaskHandle); vTaskDelete(RampaTaskHandle);
delete encoderKalman;
// Redefinir as configurações para os valores iniciais // Redefinir as configurações para os valores iniciais
_pinoENA.Desconectar(); _pinoENA.Desconectar();
_pinoDIR.Desconectar(); _pinoDIR.Desconectar();
@ -132,6 +139,8 @@ class Motor {
private: private:
double _anguloAnterior = 0;
TaskHandle_t RampaTaskHandle = NULL; TaskHandle_t RampaTaskHandle = NULL;
static void RampaTaskWrapper(void *pvParameters) { static void RampaTaskWrapper(void *pvParameters) {
Motor *motor = static_cast<Motor*>(pvParameters); Motor *motor = static_cast<Motor*>(pvParameters);
@ -171,16 +180,18 @@ class Motor {
void Atualizar() { void Atualizar() {
_pinoENA.set(!_MotorLigado); _pinoENA.set(!_MotorLigado);
_pinoDIR.set(_Sentido_SP != Horario); _pinoDIR.set(_Sentido_SP != Antihorario);
} }
int leituras = 0;
void AferirPosicao() { void AferirPosicao() {
if (_pinoEncoder.Definido()) { if (_pinoEncoder.Definido()) {
// Lê o valor analógico do pino conectado à saída analógica do AS5600 // Lê o valor analógico do pino conectado à saída analógica do AS5600
int sensorValue = _pinoEncoder.get(); int leitura = _pinoEncoder.get();
float leituraNormalizada = encoderKalman->updateEstimate(leitura);
// Converte a leitura para ângulo (0V a 3.3V corresponde a 0 a 360 graus) // Converte a leitura para ângulo (0V a 3.3V corresponde a 0 a 360 graus)
double _angulo = (sensorValue / 4095.0) * 360.0; double _angulo = (leituraNormalizada / 4095.0) * 360.0;
// Ajusta o ângulo com o offset // Ajusta o ângulo com o offset
double angulo_com_offset = _angulo - _Angulo_Offset; // Considerando que o offset pode ser positivo ou negativo double angulo_com_offset = _angulo - _Angulo_Offset; // Considerando que o offset pode ser positivo ou negativo
@ -189,6 +200,16 @@ class Motor {
while (angulo_com_offset > 180) angulo_com_offset -= 360; while (angulo_com_offset > 180) angulo_com_offset -= 360;
while (angulo_com_offset < -180) angulo_com_offset += 360; while (angulo_com_offset < -180) angulo_com_offset += 360;
if (leituras > 700) {
_Sentido =
_MotorLigado && angulo_com_offset > _anguloAnterior ? Horario :
_MotorLigado && angulo_com_offset < _anguloAnterior ? Antihorario :
Parado;
leituras = 0;
_anguloAnterior = angulo_com_offset;
}
leituras++;
_Angulo = angulo_com_offset; _Angulo = angulo_com_offset;
} }
} }
@ -203,7 +224,7 @@ class Motor {
_MotorLigado = false; _MotorLigado = false;
} }
} }
else { else if (false) {
if (Referenciado && (_Sentido_SP == Horario && _Angulo >= RefMax)) { if (Referenciado && (_Sentido_SP == Horario && _Angulo >= RefMax)) {
_MotorLigado = false; _MotorLigado = false;
} }
@ -230,7 +251,7 @@ class Motor {
_MotorLigado = false; _MotorLigado = false;
} }
else { else {
_Sentido_SP = (_Angulo < 0) ? Horario : Antihorario; _Sentido_SP = (_Angulo > 0) ? Antihorario : Horario;
} }
} }

View File

@ -522,7 +522,6 @@ class SensorMagnetometro {
vTaskDelay(1000); vTaskDelay(1000);
continue; continue;
} }
long intMillis = (millis() - firstMilis); long intMillis = (millis() - firstMilis);
// A cada _TaxaAmostragem, enviar os dados para o software // A cada _TaxaAmostragem, enviar os dados para o software
@ -541,9 +540,10 @@ class SensorMagnetometro {
int x, y, z; int x, y, z;
float orientacao; float orientacao;
qmc->read(&x, &y, &z,&orientacao); qmc->read(&x, &y, &z,&orientacao);
if (x != 0 && y != 0 && z != 0) {
EnviarDadosSerial(MontarProtocoloSensor(sMAG, _ID, MontarDadosProtocoloMagnetometro(x, y, z, orientacao))); EnviarDadosSerial(MontarProtocoloSensor(sMAG, _ID, MontarDadosProtocoloMagnetometro(x, y, z, orientacao)));
} }
}
}; };
@ -934,7 +934,7 @@ void ProcessarProtocolo(String Protocolo, F_Code _funcao, int idMensagem) {
int pinoSDA = Partes[3].toInt(); int pinoSDA = Partes[3].toInt();
int pinoSCL = Partes[4].toInt(); int pinoSCL = Partes[4].toInt();
if (pinoSDA > -1 && pinoSCL > -1) { if (pinoSDA > -1 && pinoSCL > -1 && false) {
_pinoSDA = pinoSDA; _pinoSDA = pinoSDA;
_pinoSCL = pinoSCL; _pinoSCL = pinoSCL;
Wire.end(); Wire.end();