finalizacao integracao IMU GY-91
This commit is contained in:
parent
5941ee47ec
commit
d0d07c8544
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1119,22 +1119,8 @@ namespace AgroBase.Forms.IHM
|
|||
},
|
||||
new ColunasDiagnosticoModel()
|
||||
{
|
||||
Componente = "WIT MOTION",
|
||||
Teste = "Conectado",
|
||||
ValorPadrao = 1,
|
||||
ComplementoValorPadrao = ComplementosPadrao[1]
|
||||
},
|
||||
new ColunasDiagnosticoModel()
|
||||
{
|
||||
Componente = "WIT MOTION",
|
||||
Teste = "Inicializado",
|
||||
ValorPadrao = 1,
|
||||
ComplementoValorPadrao = ComplementosPadrao[1]
|
||||
},
|
||||
new ColunasDiagnosticoModel()
|
||||
{
|
||||
Componente = "WIT MOTION",
|
||||
Teste = "Orientação Magnética",
|
||||
Componente = "Módulo Sen",
|
||||
Teste = "IMU",
|
||||
ValorPadrao = 0,
|
||||
ComplementoValorPadrao = "~"
|
||||
},
|
||||
|
|
@ -1269,13 +1255,8 @@ namespace AgroBase.Forms.IHM
|
|||
double Corrente12V = S12V != null ? (double)S12V.Current : -1;
|
||||
idx = PreencheDadosLinha(grid, Testes, idx, Corrente12V);
|
||||
|
||||
bool WitConectado = SerialService.DispositivosMapeados.Any(x => x.Dispositivo == Enums.T_Code.Wit);
|
||||
idx = PreencheDadosLinha(grid, Testes, idx, WitConectado ? 1 : 0);
|
||||
|
||||
bool WitInicializado = WT901CService.Iniciado;
|
||||
idx = PreencheDadosLinha(grid, Testes, idx, WitInicializado ? 1 : 0);
|
||||
|
||||
double Orientacao = WitInicializado ? WT901CService.DadosLeitura.AngleZ : -1;
|
||||
var SImu = ((FirmwareSensorIMU)Modulo_Sen.Sensores.FirstOrDefault(x => x.ID == "GY-91").Leitura);
|
||||
double Orientacao = SImu.Iniciado ? SImu.Yaw : -1;
|
||||
idx = PreencheDadosLinha(grid, Testes, idx, Orientacao);
|
||||
|
||||
bool GpsConectado = SerialService.DispositivosMapeados.Any(x => x.Dispositivo == Enums.T_Code.Gps);
|
||||
|
|
|
|||
|
|
@ -389,8 +389,9 @@ namespace AgroBase.Forms.Operacoes
|
|||
{
|
||||
try
|
||||
{
|
||||
double angulo = Variaveis.OperacaoEmAndamento.Sensoriamento.WitMotion.AnguloCorrigido;
|
||||
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, -270);
|
||||
double angulo = Variaveis.OperacaoEmAndamento.DispSen?.Dados?.DadosLeitura?.SensoresIMU?.FirstOrDefault()?.Yaw ?? -1;
|
||||
double anguloCorrigido = Variaveis.OperacaoEmAndamento.DispSen?.Dados?.DadosLeitura?.SensoresIMU?.FirstOrDefault()?.YawFixed ?? -1;
|
||||
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, -270, (float)anguloCorrigido);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ namespace AgroBase.Forms.Operacoes
|
|||
List<AtuSensoriamentoLogModel> LogsAtuador = new List<AtuSensoriamentoLogModel>();
|
||||
List<SensoriamentoMensagemJsonModel> LogsSensoriamento = new List<SensoriamentoMensagemJsonModel>();
|
||||
List<PzmSensoriamentoLogModel> LogsPzem = new List<PzmSensoriamentoLogModel>();
|
||||
List<WitSensoriamentoLogModel> LogsWt901C = new List<WitSensoriamentoLogModel>();
|
||||
List<UltrasonicA05Model> LogsA05 = new List<UltrasonicA05Model>();
|
||||
List<SonarCamModel> LogsSonar = new List<SonarCamModel>();
|
||||
List<List<CamSoloSensoriamentoLogModel>> LogsCam_Solo = new List<List<CamSoloSensoriamentoLogModel>>();
|
||||
|
|
@ -133,7 +132,6 @@ namespace AgroBase.Forms.Operacoes
|
|||
LogsAtuador = JsonConvert.DeserializeObject<AtuSensoriamentoLogModel[]>(OperacaoModel.DeserializarDadosOperacao(ofd.FileName, data.atu ?? Enums.T_Code.Atu.ToString())).ToList();
|
||||
LogsSensoriamento = JsonConvert.DeserializeObject<SensoriamentoMensagemJsonModel[]>(OperacaoModel.DeserializarDadosOperacao(ofd.FileName, data.sen ?? Enums.T_Code.Sen.ToString())).ToList();
|
||||
LogsPzem = JsonConvert.DeserializeObject<PzmSensoriamentoLogModel[]>(OperacaoModel.DeserializarDadosOperacao(ofd.FileName, data.pzm ?? Enums.T_Code.Pzm.ToString())).ToList();
|
||||
LogsWt901C = JsonConvert.DeserializeObject<WitSensoriamentoLogModel[]>(OperacaoModel.DeserializarDadosOperacao(ofd.FileName, data.wit ?? Enums.T_Code.Wit.ToString())).ToList();
|
||||
LogsA05 = JsonConvert.DeserializeObject<UltrasonicA05Model[]>(OperacaoModel.DeserializarDadosOperacao(ofd.FileName, data.a05 ?? Enums.T_Code.A05.ToString())).ToList();
|
||||
LogsSonar = JsonConvert.DeserializeObject<SonarCamModel[]>(OperacaoModel.DeserializarDadosOperacao(ofd.FileName, data.snr ?? Enums.T_Code.Snr.ToString())).ToList();
|
||||
LogsCam_Caminho = JsonConvert.DeserializeObject<CamCaminhoSensoriamentoLogModel[]>(OperacaoModel.DeserializarDadosOperacao(ofd.FileName, data.cam_caminho)).ToList();
|
||||
|
|
@ -1124,7 +1122,6 @@ namespace AgroBase.Forms.Operacoes
|
|||
noModulos.Nodes.Add(AtualizarTextoStatusModulo(Enums.T_Code.Mov, LogsMovimentacao[idxMomentoAtual].Inicializado, LogsMovimentacao[idxMomentoAtual].UltimoComandoRespondido));
|
||||
noModulos.Nodes.Add(AtualizarTextoStatusModulo(Enums.T_Code.Dir, LogsDirecional[idxMomentoAtual].Inicializado, LogsDirecional[idxMomentoAtual].UltimoComandoRespondido));
|
||||
noModulos.Nodes.Add(AtualizarTextoStatusModulo(Enums.T_Code.Pzm, LogsPzem[idxMomentoAtual].Inicializado, LogsPzem[idxMomentoAtual].UltimoComandoRespondido));
|
||||
noModulos.Nodes.Add(AtualizarTextoStatusModulo(Enums.T_Code.Wit, LogsWt901C[idxMomentoAtual].Inicializado, LogsWt901C[idxMomentoAtual].UltimoComandoRespondido));
|
||||
noModulos.Nodes.Add(AtualizarTextoStatusModulo(Enums.T_Code.A05, LogsA05[idxMomentoAtual].Conectado, LogsA05[idxMomentoAtual].UltimoComandoRespondido));
|
||||
noModulos.Nodes.Add(AtualizarTextoStatusModulo(Enums.T_Code.Gps, LogsGPS[idxMomentoAtual].Inicializado, LogsGPS[idxMomentoAtual].UltimoComandoRespondido));
|
||||
//noModulos.Nodes.Add(AtualizarTextoStatusModulo(Enums.T_Code.Knt, LogsCam_Caminho[idxMomentoAtual].Inicializado, LogsCam_Caminho[idxMomentoAtual].UltimaMensagemRecebida));
|
||||
|
|
@ -1377,14 +1374,17 @@ namespace AgroBase.Forms.Operacoes
|
|||
txtSen_Maximo.Text = Valores.Max().ToString("0.00");
|
||||
}
|
||||
|
||||
var LogWit = LogsWt901C.FirstOrDefault(x => x.Momento == MomentoAtual);
|
||||
lblMagnetometro.ForeColor = !LogWit.Inicializado ? Color.Red : Color.Black;
|
||||
pnlOrientacaoMagnetometro.Invalidate();
|
||||
pnlInclinacao.Invalidate();
|
||||
visualizador3D.AtualizarAngulos(-LogWit.AngleX, -LogWit.AngleY, LogWit.AngleZ);
|
||||
txtTemperatura.Text = LogWit.Temperatura.ToString("0.00");
|
||||
txtAltitude.Text = LogWit.Altitude.ToString("0.00");
|
||||
txtPressao.Text = LogWit.Pressao + " Pa (" + (LogWit.Pressao / 101300.0).ToString("0.00") + " atm)";
|
||||
var LogImu = LogsSensoriamento.FirstOrDefault(x => x.Momento == MomentoAtual).SensoresIMU.FirstOrDefault();
|
||||
if (LogImu != null)
|
||||
{
|
||||
lblMagnetometro.ForeColor = !LogImu.Iniciado ? Color.Red : Color.Black;
|
||||
pnlOrientacaoMagnetometro.Invalidate();
|
||||
pnlInclinacao.Invalidate();
|
||||
visualizador3D.AtualizarAngulos(-LogImu.Roll, -LogImu.Pitch, LogImu.Yaw);
|
||||
txtTemperatura.Text = LogImu.Temperatura.ToString("0.00");
|
||||
txtAltitude.Text = LogImu.Altitude.ToString("0.00");
|
||||
txtPressao.Text = LogImu.Pressao + " Pa (" + (LogImu.Pressao / 101300.0).ToString("0.00") + " atm)";
|
||||
}
|
||||
|
||||
var LogSen = LogsSensoriamento.FirstOrDefault(x => x.Momento == MomentoAtual);
|
||||
pnlManual.BackColor = LogSen.Sinaleiros?.FirstOrDefault(x => x.ID.Contains("MN"))?.Leitura == Enums.StatusLED.Aceso ? Color.Yellow : Color.Gold;
|
||||
|
|
@ -1540,12 +1540,12 @@ namespace AgroBase.Forms.Operacoes
|
|||
|
||||
private void pnlOrientacaoMagnetometro_Paint(object sender, PaintEventArgs e)
|
||||
{
|
||||
var Log = LogsOperacao.FirstOrDefault(x => x.Momento == MomentoAtual);
|
||||
var Log = LogsSensoriamento.FirstOrDefault(x => x.Momento == MomentoAtual).SensoresIMU.FirstOrDefault();
|
||||
|
||||
double AnguloWit = (Log?.WitMotion?.AngleZ ?? 0);
|
||||
double AnguloWitCorrigido = (Log?.WitMotion.AnguloCorrigido ?? 0);
|
||||
|
||||
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)AnguloWit, 90, (float)AnguloWitCorrigido);
|
||||
double Angulo = (Log?.Yaw ?? 0);
|
||||
double AnguloCorrigido = (Log?.YawFixed ?? 0);
|
||||
|
||||
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)Angulo, 90.0f, (float)AnguloCorrigido);
|
||||
}
|
||||
|
||||
private void pnlOrientacaoCaminho_Paint(object sender, PaintEventArgs e)
|
||||
|
|
@ -1578,7 +1578,7 @@ namespace AgroBase.Forms.Operacoes
|
|||
|
||||
private void pnlInclinacao_Paint(object sender, PaintEventArgs e)
|
||||
{
|
||||
var Log = LogsWt901C.FirstOrDefault(x => x.Momento == MomentoAtual);
|
||||
var Log = LogsSensoriamento.FirstOrDefault(x => x.Momento == MomentoAtual).SensoresIMU.FirstOrDefault();
|
||||
|
||||
Graphics g = e.Graphics;
|
||||
int centerX = pnlInclinacao.Width / 2;
|
||||
|
|
@ -1628,8 +1628,8 @@ namespace AgroBase.Forms.Operacoes
|
|||
}
|
||||
|
||||
// Calcular a posição do círculo com base nos ângulos
|
||||
int circlePosX = centerX + (int)((Log?.AngleX ?? 0) * (pnlInclinacao.Width / 2 - radius) / 90);
|
||||
int circlePosY = centerY - (int)((Log?.AngleY ?? 0) * (pnlInclinacao.Height / 2 - radius) / 90);
|
||||
int circlePosX = centerX + (int)((Log?.Roll ?? 0) * (pnlInclinacao.Width / 2 - radius) / 90);
|
||||
int circlePosY = centerY - (int)((Log?.Pitch ?? 0) * (pnlInclinacao.Height / 2 - radius) / 90);
|
||||
|
||||
// Desenhar o círculo
|
||||
Brush brush = new SolidBrush(Color.Red);
|
||||
|
|
|
|||
|
|
@ -56,12 +56,6 @@ namespace AgroBase.Forms
|
|||
lblUL_Pzm.Text = "Ultima Leitura PZM: " + PZEMService.UltimaLeitura.DataHora.ToString("HH:mm:ss");
|
||||
lblTensao.Text = "Bateria: " + PZEMService.UltimaLeitura.Tensao.ToString("0.00") + " V - " + PZEMService.UltimaLeitura.Corrente.ToString("0.00") + " A - " + PZEMService.UltimaLeitura.Potencia.ToString("0.00") + " W";
|
||||
}
|
||||
lblUL_Wit.ForeColor = WT901CService.Iniciado ? Color.Green : Color.Red;
|
||||
lblMagnetometro.ForeColor = WT901CService.Iniciado ? Color.Green : Color.Red;
|
||||
if (WT901CService.Iniciado)
|
||||
{
|
||||
lblUL_Wit.Text = "Ultima Leitura WIT: " + WT901CService.DadosLeitura.Momento.ToString("HH:mm:ss");
|
||||
}
|
||||
lblUL_A05.ForeColor = UltrasonicA05Service.Iniciado ? Color.Green : Color.Red;
|
||||
if (UltrasonicA05Service.Iniciado)
|
||||
{
|
||||
|
|
@ -79,10 +73,13 @@ namespace AgroBase.Forms
|
|||
AtualizarDadosSensorCorrente("AB12V", lblB12V);
|
||||
}
|
||||
|
||||
lblGPS.ForeColor = GPSService.Iniciado ? Color.Green : Color.Red;
|
||||
if (GPSService.Iniciado)
|
||||
lblMagnetometro.ForeColor = (Variaveis.OperacaoEmAndamento.DispSen?.Dados?.DadosLeitura?.SensoresIMU?.DefaultIfEmpty()?.FirstOrDefault()?.Iniciado ?? false) ? Color.Green : Color.Red;
|
||||
|
||||
var Gps = Variaveis.OperacaoEmAndamento.Sensoriamento.Gps;
|
||||
lblGPS.ForeColor = Gps.Inicializado ? Color.Green : Color.Red;
|
||||
if (Gps.Inicializado)
|
||||
{
|
||||
lblGPSDetalhes.Text = GPSService.UltimaLeitura.QualidadeFix.ToString() + " - " + GPSService.UltimaLeitura.PrecisaoCm.ToString("0.00") + " cm";
|
||||
lblGPSDetalhes.Text = Gps.QualidadeFix.ToString() + " - " + Gps.PrecisaoCm.ToString("0.00") + " cm";
|
||||
}
|
||||
|
||||
lblPerformance.Text = Variaveis.OperacaoEmAndamento.DadosPerformance.PerformanceStr;
|
||||
|
|
@ -393,9 +390,9 @@ namespace AgroBase.Forms
|
|||
|
||||
private void pnlOrientacaoMagnetometro_Paint(object sender, PaintEventArgs e)
|
||||
{
|
||||
double Angulo = Variaveis.OperacaoEmAndamento.Sensoriamento.WitMotion.AnguloCorrigido;
|
||||
double AnguloCorrigido = Variaveis.OperacaoEmAndamento.Sensoriamento.WitMotion.AnguloCorrigido;
|
||||
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)Angulo, -90, (float)AnguloCorrigido);
|
||||
var Imu = Variaveis.OperacaoEmAndamento.DispSen?.Dados?.DadosLeitura?.SensoresIMU?.DefaultIfEmpty()?.FirstOrDefault();
|
||||
double Angulo = Imu?.Yaw ?? 0;
|
||||
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)Angulo, -90);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -461,7 +461,7 @@ namespace AgroBase
|
|||
|
||||
private void btnWT901C_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (WT901CService.Iniciado)
|
||||
if (WT901CService.Iniciado || true)
|
||||
{
|
||||
frmWT901C frm = new frmWT901C();
|
||||
frm.Show();
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ using System.Drawing;
|
|||
using System.Windows.Forms;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Threading.Tasks;
|
||||
using System.Linq;
|
||||
|
||||
namespace AgroBase.Forms
|
||||
{
|
||||
|
|
@ -58,10 +59,11 @@ namespace AgroBase.Forms
|
|||
|
||||
private async Task tmrLeitura_Tick()
|
||||
{
|
||||
AnguloX = Variaveis.OperacaoEmAndamento.Sensoriamento.WitMotion.AngleX;
|
||||
AnguloY = Variaveis.OperacaoEmAndamento.Sensoriamento.WitMotion.AngleY;
|
||||
AnguloZ = Variaveis.OperacaoEmAndamento.Sensoriamento.WitMotion.AngleZ;
|
||||
OrientacaoMagnetica = Variaveis.OperacaoEmAndamento.Sensoriamento.WitMotion.AnguloCorrigido;
|
||||
var Imu = Variaveis.OperacaoEmAndamento.DispSen?.Dados?.DadosLeitura?.SensoresIMU?.FirstOrDefault();
|
||||
AnguloX = Imu?.Roll ?? 0;
|
||||
AnguloY = Imu?.Pitch ?? 0;
|
||||
AnguloZ = Imu?.Yaw ?? 0;
|
||||
OrientacaoMagnetica = Imu?.YawFixed ?? 0;
|
||||
|
||||
AtualizarDadosTela();
|
||||
}
|
||||
|
|
@ -229,46 +231,46 @@ namespace AgroBase.Forms
|
|||
txtY.Text = AnguloY.ToString("0.00");
|
||||
txtZ.Text = AnguloZ.ToString("0.00");
|
||||
|
||||
gridDados.Rows[0].Cells[1].Value = WT901CService.DadosLeitura.Versao;
|
||||
gridDados.Rows[1].Cells[1].Value = WT901CService.DadosLeitura.Modelo;
|
||||
gridDados.Rows[2].Cells[1].Value = WT901CService.DadosLeitura.DataHora.ToString("dd/MM/yyyy");
|
||||
gridDados.Rows[3].Cells[1].Value = WT901CService.DadosLeitura.DataHora.ToString("HH:mm:ss");
|
||||
gridDados.Rows[4].Cells[1].Value = WT901CService.DadosLeitura.AccX;
|
||||
gridDados.Rows[5].Cells[1].Value = WT901CService.DadosLeitura.AccY;
|
||||
gridDados.Rows[6].Cells[1].Value = WT901CService.DadosLeitura.AccZ;
|
||||
gridDados.Rows[7].Cells[1].Value = WT901CService.DadosLeitura.AccM;
|
||||
gridDados.Rows[8].Cells[1].Value = WT901CService.DadosLeitura.AsX;
|
||||
gridDados.Rows[9].Cells[1].Value = WT901CService.DadosLeitura.AsY;
|
||||
gridDados.Rows[10].Cells[1].Value = WT901CService.DadosLeitura.AsZ;
|
||||
gridDados.Rows[11].Cells[1].Value = WT901CService.DadosLeitura.AsM;
|
||||
gridDados.Rows[12].Cells[1].Value = WT901CService.DadosLeitura.AngleX;
|
||||
gridDados.Rows[13].Cells[1].Value = WT901CService.DadosLeitura.AngleY;
|
||||
gridDados.Rows[14].Cells[1].Value = WT901CService.DadosLeitura.AngleZ;
|
||||
gridDados.Rows[15].Cells[1].Value = WT901CService.DadosLeitura.HX;
|
||||
gridDados.Rows[16].Cells[1].Value = WT901CService.DadosLeitura.HY;
|
||||
gridDados.Rows[17].Cells[1].Value = WT901CService.DadosLeitura.HZ;
|
||||
gridDados.Rows[18].Cells[1].Value = WT901CService.DadosLeitura.HM;
|
||||
gridDados.Rows[19].Cells[1].Value = WT901CService.DadosLeitura.Temperatura;
|
||||
gridDados.Rows[20].Cells[1].Value = WT901CService.DadosLeitura.Pressao;
|
||||
gridDados.Rows[21].Cells[1].Value = WT901CService.DadosLeitura.Altitude;
|
||||
/*gridDados.Rows[0].Cells[1].Value = WT901CService._DadosLeitura.Versao;
|
||||
gridDados.Rows[1].Cells[1].Value = WT901CService._DadosLeitura.Modelo;
|
||||
gridDados.Rows[2].Cells[1].Value = WT901CService._DadosLeitura.DataHora.ToString("dd/MM/yyyy");
|
||||
gridDados.Rows[3].Cells[1].Value = WT901CService._DadosLeitura.DataHora.ToString("HH:mm:ss");
|
||||
gridDados.Rows[4].Cells[1].Value = WT901CService._DadosLeitura.AccX;
|
||||
gridDados.Rows[5].Cells[1].Value = WT901CService._DadosLeitura.AccY;
|
||||
gridDados.Rows[6].Cells[1].Value = WT901CService._DadosLeitura.AccZ;
|
||||
gridDados.Rows[7].Cells[1].Value = WT901CService._DadosLeitura.AccM;
|
||||
gridDados.Rows[8].Cells[1].Value = WT901CService._DadosLeitura.AsX;
|
||||
gridDados.Rows[9].Cells[1].Value = WT901CService._DadosLeitura.AsY;
|
||||
gridDados.Rows[10].Cells[1].Value = WT901CService._DadosLeitura.AsZ;
|
||||
gridDados.Rows[11].Cells[1].Value = WT901CService._DadosLeitura.AsM;
|
||||
gridDados.Rows[12].Cells[1].Value = WT901CService._DadosLeitura.AngleX;
|
||||
gridDados.Rows[13].Cells[1].Value = WT901CService._DadosLeitura.AngleY;
|
||||
gridDados.Rows[14].Cells[1].Value = WT901CService._DadosLeitura.AngleZ;
|
||||
gridDados.Rows[15].Cells[1].Value = WT901CService._DadosLeitura.HX;
|
||||
gridDados.Rows[16].Cells[1].Value = WT901CService._DadosLeitura.HY;
|
||||
gridDados.Rows[17].Cells[1].Value = WT901CService._DadosLeitura.HZ;
|
||||
gridDados.Rows[18].Cells[1].Value = WT901CService._DadosLeitura.HM;
|
||||
gridDados.Rows[19].Cells[1].Value = WT901CService._DadosLeitura.Temperatura;
|
||||
gridDados.Rows[20].Cells[1].Value = WT901CService._DadosLeitura.Pressao;
|
||||
gridDados.Rows[21].Cells[1].Value = WT901CService._DadosLeitura.Altitude;
|
||||
gridDados.Rows[22].Cells[1].Value = "";
|
||||
gridDados.Rows[23].Cells[1].Value = WT901CService.DadosLeitura.D0;
|
||||
gridDados.Rows[24].Cells[1].Value = WT901CService.DadosLeitura.D1;
|
||||
gridDados.Rows[25].Cells[1].Value = WT901CService.DadosLeitura.D2;
|
||||
gridDados.Rows[26].Cells[1].Value = WT901CService.DadosLeitura.D3;
|
||||
gridDados.Rows[27].Cells[1].Value = WT901CService.DadosLeitura.Q0;
|
||||
gridDados.Rows[28].Cells[1].Value = WT901CService.DadosLeitura.Q1;
|
||||
gridDados.Rows[29].Cells[1].Value = WT901CService.DadosLeitura.Q2;
|
||||
gridDados.Rows[30].Cells[1].Value = WT901CService.DadosLeitura.Q3;
|
||||
gridDados.Rows[31].Cells[1].Value = WT901CService.DadosLeitura.Longitude;
|
||||
gridDados.Rows[32].Cells[1].Value = WT901CService.DadosLeitura.Latitude;
|
||||
gridDados.Rows[33].Cells[1].Value = WT901CService.DadosLeitura.GPS_Altitude;
|
||||
gridDados.Rows[34].Cells[1].Value = WT901CService.DadosLeitura.GPS_Orientacao;
|
||||
gridDados.Rows[35].Cells[1].Value = WT901CService.DadosLeitura.GPS_Velcodiade;
|
||||
gridDados.Rows[36].Cells[1].Value = WT901CService.DadosLeitura.GPS_NumeroSatelites;
|
||||
gridDados.Rows[37].Cells[1].Value = WT901CService.DadosLeitura.PDOP;
|
||||
gridDados.Rows[38].Cells[1].Value = WT901CService.DadosLeitura.HDOP;
|
||||
gridDados.Rows[39].Cells[1].Value = WT901CService.DadosLeitura.VDOP;
|
||||
gridDados.Rows[23].Cells[1].Value = WT901CService._DadosLeitura.D0;
|
||||
gridDados.Rows[24].Cells[1].Value = WT901CService._DadosLeitura.D1;
|
||||
gridDados.Rows[25].Cells[1].Value = WT901CService._DadosLeitura.D2;
|
||||
gridDados.Rows[26].Cells[1].Value = WT901CService._DadosLeitura.D3;
|
||||
gridDados.Rows[27].Cells[1].Value = WT901CService._DadosLeitura.Q0;
|
||||
gridDados.Rows[28].Cells[1].Value = WT901CService._DadosLeitura.Q1;
|
||||
gridDados.Rows[29].Cells[1].Value = WT901CService._DadosLeitura.Q2;
|
||||
gridDados.Rows[30].Cells[1].Value = WT901CService._DadosLeitura.Q3;
|
||||
gridDados.Rows[31].Cells[1].Value = WT901CService._DadosLeitura.Longitude;
|
||||
gridDados.Rows[32].Cells[1].Value = WT901CService._DadosLeitura.Latitude;
|
||||
gridDados.Rows[33].Cells[1].Value = WT901CService._DadosLeitura.GPS_Altitude;
|
||||
gridDados.Rows[34].Cells[1].Value = WT901CService._DadosLeitura.GPS_Orientacao;
|
||||
gridDados.Rows[35].Cells[1].Value = WT901CService._DadosLeitura.GPS_Velcodiade;
|
||||
gridDados.Rows[36].Cells[1].Value = WT901CService._DadosLeitura.GPS_NumeroSatelites;
|
||||
gridDados.Rows[37].Cells[1].Value = WT901CService._DadosLeitura.PDOP;
|
||||
gridDados.Rows[38].Cells[1].Value = WT901CService._DadosLeitura.HDOP;
|
||||
gridDados.Rows[39].Cells[1].Value = WT901CService._DadosLeitura.VDOP;*/
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1748,6 +1748,61 @@ namespace AgroBase.Models.Modules
|
|||
public double Roll { get; set; }
|
||||
public double Pitch { get; set; }
|
||||
public double Yaw { get; set; }
|
||||
public double YawFixed
|
||||
{
|
||||
get
|
||||
{
|
||||
double angulo = Yaw;
|
||||
|
||||
// ✅ Aplica o offset armazenado
|
||||
return GPSUtils.NormalizarAngulo(GPSUtils.NormalizarAngulo(angulo) + Offset);
|
||||
}
|
||||
}
|
||||
|
||||
public double Offset { get; set; } = 0.0;
|
||||
private DateTime ultimaAtualizacaoOffset = DateTime.MinValue;
|
||||
public void AtualizarOffset(GPSModel UltimaLeitura)
|
||||
{
|
||||
// Verifica se a qualidade do GPS é boa
|
||||
if (UltimaLeitura.QualidadeFix == TiposCorrecaoGPS.RTKFixo || UltimaLeitura.QualidadeFix == TiposCorrecaoGPS.RTKFlutuante)
|
||||
{
|
||||
// Só atualiza o offset se a última atualização foi há pelo menos 2 segundos (evita variações rápidas)
|
||||
if ((DateTime.Now - ultimaAtualizacaoOffset).TotalSeconds > 2)
|
||||
{
|
||||
// Suaviza a mudança do offset para evitar grandes variações
|
||||
double novoOffset = UltimaLeitura.OrientacaoReal - YawFixed;
|
||||
Offset = (Offset * 0.8) + (novoOffset * 0.2); // Filtro exponencial
|
||||
|
||||
// Atualiza o tempo da última atualização
|
||||
ultimaAtualizacaoOffset = DateTime.Now;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public FirmwareSensorIMU Clone()
|
||||
{
|
||||
return new FirmwareSensorIMU()
|
||||
{
|
||||
ID = ID,
|
||||
Iniciado = Iniciado,
|
||||
Pitch = Pitch,
|
||||
Roll = Roll,
|
||||
Yaw = Yaw,
|
||||
Temperatura = Temperatura,
|
||||
Altitude = Altitude,
|
||||
Pressao = Pressao,
|
||||
AccX = AccX,
|
||||
AccY = AccY,
|
||||
AccZ = AccZ,
|
||||
MagX = MagX,
|
||||
MagY = MagY,
|
||||
MagZ = MagZ,
|
||||
GyrX = GyrX,
|
||||
GyrY = GyrY,
|
||||
GyrZ = GyrZ,
|
||||
Offset = Offset,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1780,6 +1835,12 @@ namespace AgroBase.Models.Modules
|
|||
return _value;
|
||||
}
|
||||
|
||||
private double ConverterValorEscala(byte[] data, int idx, double escala)
|
||||
{
|
||||
int raw = (data[idx] << 8) | data[idx + 1];
|
||||
return raw * escala;
|
||||
}
|
||||
|
||||
private S_Code DetectarComponenteDoID_Num(int ID_Num)
|
||||
{
|
||||
if (ID_Num == Variaveis.ID_Num_sMOD) return S_Code.sMOD;
|
||||
|
|
@ -2145,8 +2206,8 @@ namespace AgroBase.Models.Modules
|
|||
case S_Code.sIMU:
|
||||
{
|
||||
double temperatura = ConverterByteParaDouble(data, 2);
|
||||
double pressao = ConverterByteParaDouble(data, 4);
|
||||
double altitude = ConverterByteParaDouble(data, 6);
|
||||
double pressao = ConverterValorEscala(data, 4, 10);
|
||||
double altitude = ConverterValorEscala(data, 6, 10);
|
||||
DefinirOuCriar(ID_Num, posicao, componente, new List<dynamic>() { temperatura, pressao, altitude });
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1991,24 +1991,6 @@ namespace AgroBase.Models
|
|||
};
|
||||
SalvarLog(T_Code.Pzm.ToString(), logPzm, Fim);
|
||||
|
||||
WitSensoriamentoLogModel logWit = new WitSensoriamentoLogModel()
|
||||
{
|
||||
Momento = Agora,
|
||||
Inicializado = WT901CService.Iniciado,
|
||||
DataHora = WT901CService.DadosLeitura.DataHora,
|
||||
AccM = WT901CService.DadosLeitura.AccM,
|
||||
Altitude = WT901CService.DadosLeitura.Altitude,
|
||||
AngleX = WT901CService.DadosLeitura.AngleX,
|
||||
AngleY = WT901CService.DadosLeitura.AngleY,
|
||||
AngleZ = WT901CService.DadosLeitura.AngleZ,
|
||||
AsM = WT901CService.DadosLeitura.AsM,
|
||||
HM = WT901CService.DadosLeitura.HM,
|
||||
Pressao = WT901CService.DadosLeitura.Pressao,
|
||||
Temperatura = WT901CService.DadosLeitura.Temperatura,
|
||||
UltimoComandoRespondido = WT901CService.DadosLeitura.Momento,
|
||||
};
|
||||
SalvarLog(T_Code.Wit.ToString(), logWit, Fim);
|
||||
|
||||
UltrasonicA05Model logA05 = new UltrasonicA05Model()
|
||||
{
|
||||
Momento = Agora,
|
||||
|
|
@ -2987,7 +2969,6 @@ namespace AgroBase.Models
|
|||
public OperacaoSensoriamentoLogBateriaModel Bateria { get; set; }
|
||||
public OperacaoSensoriamentoLogTrajetoriaModel Trajetoria { get; set; }
|
||||
public GPSModel Gps { get; set; }
|
||||
public WT901CModel WitMotion { get; set; }
|
||||
public PerformanceModel DadosPerformance { get; set; } = new PerformanceModel();
|
||||
public OperacaoControleModel Controle { get; set; }
|
||||
public SonarCamModel Sonar { get; set; }
|
||||
|
|
@ -3080,8 +3061,6 @@ namespace AgroBase.Models
|
|||
|
||||
var dadosGps = GPSService.UltimaLeitura.Clone();
|
||||
|
||||
var dadosWitMotion = WT901CService.DadosLeitura.Clone();
|
||||
|
||||
var dadosSonar = Variaveis.OperacaoEmAndamento.CameraCaminho?.Sonar?.Clone();
|
||||
if (dadosSonar == null)
|
||||
{
|
||||
|
|
@ -3107,7 +3086,6 @@ namespace AgroBase.Models
|
|||
Bateria = dadosBateria,
|
||||
Trajetoria = dadosTrajetoria,
|
||||
Gps = dadosGps,
|
||||
WitMotion = dadosWitMotion,
|
||||
Sonar = dadosSonar,
|
||||
Controle = dadosControle,
|
||||
DadosPerformance = dadosPerformance
|
||||
|
|
@ -3132,7 +3110,6 @@ namespace AgroBase.Models
|
|||
Bateria = Bateria.Clone(),
|
||||
Trajetoria = Trajetoria.Clone(),
|
||||
Gps = Gps.Clone(),
|
||||
WitMotion = WitMotion.Clone(),
|
||||
Sonar = comSonar ? Sonar.Clone() : null,
|
||||
Controle = Controle.Clone(),
|
||||
DadosPerformance = DadosPerformance.Clone(),
|
||||
|
|
@ -3311,7 +3288,7 @@ namespace AgroBase.Models
|
|||
public DateTime UltimoComandoRespondido { get; set; }
|
||||
}
|
||||
|
||||
public class WitSensoriamentoLogModel
|
||||
public class ImuSensoriamentoLogModel
|
||||
{
|
||||
public DateTime Momento { get; set; }
|
||||
public DateTime DataHora { get; set; }
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using AgroBase.Models;
|
||||
using AgroBase.Models.Modules;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
@ -715,10 +716,10 @@ namespace AgroBase.Services
|
|||
{
|
||||
double anguloFinal = 0.0;
|
||||
|
||||
bool witIniciado = WT901CService.Iniciado;
|
||||
bool witIniciado = Variaveis.OperacaoEmAndamento.DispSen.Dados?.DadosLeitura?.SensoresIMU?.FirstOrDefault()?.Iniciado ?? false;
|
||||
bool gpsIniciado = Iniciado;
|
||||
|
||||
WT901CService.DadosLeitura.AtualizarOffset(UltimaLeitura);
|
||||
Variaveis.OperacaoEmAndamento.DispSen.Dados?.DadosLeitura?.SensoresIMU?.FirstOrDefault()?.AtualizarOffset(UltimaLeitura);
|
||||
|
||||
if (gpsIniciado)
|
||||
{
|
||||
|
|
@ -737,7 +738,7 @@ namespace AgroBase.Services
|
|||
else if (witIniciado)
|
||||
{
|
||||
// Apenas o WT901C está disponível
|
||||
anguloFinal = WT901CService.DadosLeitura.AnguloCorrigido;
|
||||
anguloFinal = Variaveis.OperacaoEmAndamento.DispSen.Dados?.DadosLeitura?.SensoresIMU?.FirstOrDefault()?.YawFixed ?? -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -787,7 +787,7 @@ namespace AgroBase.Services
|
|||
{
|
||||
if (Iniciado && !Variaveis.IsAgroMonitor)
|
||||
{
|
||||
double TemperaturaCampo = WT901CService.Iniciado ? WT901CService.DadosLeitura.Temperatura : 0;
|
||||
double TemperaturaCampo = Variaveis.OperacaoEmAndamento.DispSen.Dados?.DadosLeitura?.SensoresIMU?.FirstOrDefault()?.Temperatura ?? -1;
|
||||
|
||||
(bool dirOperante, List<string> dirModsFalha) = Variaveis.OperacaoEmAndamento.DispMvd.Dados.StatusModulosDIR(Variaveis.OperacaoEmAndamento.Controle.TipoMovimento);
|
||||
(bool movEsqOperante, List<string> movEsqModsFalha) = Variaveis.OperacaoEmAndamento.DispMvd.Dados.StatusModulosMOV(Direcao.Esquerda);
|
||||
|
|
|
|||
|
|
@ -16,13 +16,13 @@ namespace AgroBase.Services
|
|||
{
|
||||
get
|
||||
{
|
||||
return DadosLeitura.Momento.AddMilliseconds(ModbusService.TempoLimiteConexao) > DateTime.Now;
|
||||
return _DadosLeitura.Momento.AddMilliseconds(ModbusService.TempoLimiteConexao) > DateTime.Now;
|
||||
}
|
||||
}
|
||||
|
||||
public static byte slaveAddress = 0x50;
|
||||
private static Dictionary<string, object> DadosSensor { get; } = new Dictionary<string, object>();
|
||||
public static WT901CModel DadosLeitura { get; set; } = new WT901CModel();
|
||||
public static WT901CModel _DadosLeitura { get; set; } = new WT901CModel();
|
||||
public static byte[] ComandoAquisicao = new byte[8] { slaveAddress, 0x03, 0x00, 0x30, 0x00, 0x30, 0x48, 0x50 };
|
||||
private static byte[] RegistrosIniciais = new byte[]
|
||||
{
|
||||
|
|
@ -108,7 +108,7 @@ namespace AgroBase.Services
|
|||
Endereco = ModbusService._PortaModbus.PortName,
|
||||
Dispositivo = T_Code.Wit,
|
||||
Erro = !Iniciado,
|
||||
Versao = DadosLeitura.Versao,
|
||||
Versao = _DadosLeitura.Versao,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -243,7 +243,7 @@ namespace AgroBase.Services
|
|||
DadosSensor[key] = value;
|
||||
}
|
||||
|
||||
DadosLeitura.Momento = DateTime.Now;
|
||||
_DadosLeitura.Momento = DateTime.Now;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -270,7 +270,7 @@ namespace AgroBase.Services
|
|||
|
||||
private static void PreencherDadosLeitura()
|
||||
{
|
||||
var wt901CModel = DadosLeitura;
|
||||
var wt901CModel = _DadosLeitura;
|
||||
|
||||
// Versão
|
||||
var reg2e = GetDeviceData("2E"); // Versão
|
||||
|
|
|
|||
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
|
|
@ -25,7 +25,7 @@
|
|||
<meta name="viewport" content="width=device-width,
|
||||
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||
<style>
|
||||
#map_a4006f9d75d902d102b79944f8248919 {
|
||||
#map_95d095eb3279ac049b5a7920dc2e75dc {
|
||||
position: relative;
|
||||
width: 100.0%;
|
||||
height: 100.0%;
|
||||
|
|
@ -39,14 +39,14 @@
|
|||
<body>
|
||||
|
||||
|
||||
<div class="folium-map" id="map_a4006f9d75d902d102b79944f8248919" ></div>
|
||||
<div class="folium-map" id="map_95d095eb3279ac049b5a7920dc2e75dc" ></div>
|
||||
|
||||
</body>
|
||||
<script>
|
||||
|
||||
|
||||
var map_a4006f9d75d902d102b79944f8248919 = L.map(
|
||||
"map_a4006f9d75d902d102b79944f8248919",
|
||||
var map_95d095eb3279ac049b5a7920dc2e75dc = L.map(
|
||||
"map_95d095eb3279ac049b5a7920dc2e75dc",
|
||||
{
|
||||
center: [0.0, 0.0],
|
||||
crs: L.CRS.EPSG3857,
|
||||
|
|
@ -60,13 +60,13 @@
|
|||
|
||||
|
||||
|
||||
var tile_layer_39ecd34b01d19cdf7444ae1ecfb66d85 = L.tileLayer(
|
||||
var tile_layer_4f15be748757bce19bb9f40c8cb7d7a5 = 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_39ecd34b01d19cdf7444ae1ecfb66d85.addTo(map_a4006f9d75d902d102b79944f8248919);
|
||||
tile_layer_4f15be748757bce19bb9f40c8cb7d7a5.addTo(map_95d095eb3279ac049b5a7920dc2e75dc);
|
||||
|
||||
</script>
|
||||
|
||||
|
|
@ -87,7 +87,7 @@
|
|||
}
|
||||
trajeto_json_add({"features": []});
|
||||
|
||||
trajeto_json.addTo(map_a4006f9d75d902d102b79944f8248919);
|
||||
trajeto_json.addTo(map_95d095eb3279ac049b5a7920dc2e75dc);
|
||||
|
||||
function adicionarGeometria(novaGeometria) {
|
||||
trajeto_json.addData(novaGeometria);
|
||||
|
|
@ -145,7 +145,7 @@
|
|||
|
||||
var marcadorDinamico = L.marker([0, 0], {
|
||||
icon: customIcon
|
||||
}).addTo(map_a4006f9d75d902d102b79944f8248919);
|
||||
}).addTo(map_95d095eb3279ac049b5a7920dc2e75dc);
|
||||
|
||||
// Conectar ao broker MQTT
|
||||
const client = mqtt.connect('ws://localhost:9001'); // Use wss para conexão segura
|
||||
|
|
@ -183,7 +183,7 @@
|
|||
marcadorDinamico.setRotationAngle(angulo);
|
||||
|
||||
adicionarCoordenada("Tj", [novaLongitude, novaLatitude]);
|
||||
map_a4006f9d75d902d102b79944f8248919.setView(novaPosicao, map_a4006f9d75d902d102b79944f8248919.getZoom());
|
||||
map_95d095eb3279ac049b5a7920dc2e75dc.setView(novaPosicao, map_95d095eb3279ac049b5a7920dc2e75dc.getZoom());
|
||||
});
|
||||
|
||||
function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) {
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -482,4 +482,4 @@ C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.csproj.GenerateR
|
|||
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.csproj.CoreCompileInputs.cache
|
||||
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.exe
|
||||
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\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
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -106,13 +106,13 @@ class SensorIMU {
|
|||
}
|
||||
|
||||
void RequisitarDados() {
|
||||
Serial.print("Temp: "); Serial.println(Temp);
|
||||
/*Serial.print("Temp: "); Serial.println(Temp);
|
||||
Serial.print("Pressao: "); Serial.println(Pressao);
|
||||
Serial.print("Altitude: "); Serial.println(Altitude);
|
||||
Serial.print("Roll: "); Serial.println(Roll);
|
||||
Serial.print("Pitch: "); Serial.println(Pitch);
|
||||
Serial.print("Yaw: "); Serial.println(Yaw);
|
||||
Serial.println();
|
||||
Serial.println();*/
|
||||
}
|
||||
|
||||
std::vector<uint8_t> MontarMensagemCAN(CanMessagePosicaoDados posicao) {
|
||||
|
|
@ -140,7 +140,7 @@ class SensorIMU {
|
|||
case CanMessagePosicaoDados::Dados2: { // Temp, Pressão, Altitude
|
||||
int16_t temp = Temp * 100;
|
||||
uint16_t pressao = Pressao / 10; // Ex: 100000 Pa → 10000 (precisão: 10 Pa)
|
||||
int16_t altitude = Altitude * 100;
|
||||
int16_t altitude = Altitude / 10;
|
||||
|
||||
data.push_back(temp >> 8); data.push_back(temp & 0xFF);
|
||||
data.push_back(pressao >> 8); data.push_back(pressao & 0xFF);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,123 @@
|
|||
#include <Wire.h>
|
||||
#include <MPU9250_WE.h>
|
||||
#include <Adafruit_BMP280.h>
|
||||
#include <MadgwickAHRS.h>
|
||||
|
||||
#include <MPU9250_asukiaaa.h>
|
||||
|
||||
MPU9250_asukiaaa mySensor;
|
||||
|
||||
// Endereços típicos dos sensores
|
||||
#define ADDR_MPU 0x68
|
||||
#define ADDR_BMP 0x76
|
||||
|
||||
MPU9250_WE mpu = MPU9250_WE(ADDR_MPU);
|
||||
Adafruit_BMP280 bmp;
|
||||
Madgwick filter;
|
||||
|
||||
float AccX = 0, AccY = 0, AccZ = 0;
|
||||
float GyroX = 0, GyroY = 0, GyroZ = 0;
|
||||
float MagX = 0, MagY = 0, MagZ = 0;
|
||||
float Temp = 0;
|
||||
float Pressao = 0;
|
||||
float Altitude = 0;
|
||||
float Roll = 0;
|
||||
float Pitch = 0;
|
||||
float Yaw = 0;
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
delay(500);
|
||||
Wire.begin(1, 2);
|
||||
|
||||
Serial.println("🔍 Iniciando Scanner I2C...");
|
||||
for (byte address = 1; address < 127; address++) {
|
||||
Wire.beginTransmission(address);
|
||||
if (Wire.endTransmission() == 0) {
|
||||
Serial.print("📍 Dispositivo encontrado no endereco 0x");
|
||||
Serial.println(address, HEX);
|
||||
}
|
||||
}
|
||||
Serial.println("✅ Scanner finalizado.\n");
|
||||
|
||||
Serial.println("🎯 Iniciando sensores...");
|
||||
|
||||
Serial.print("WHO_AM_I: 0x");
|
||||
Serial.println(mpu.whoAmI(), HEX);
|
||||
|
||||
mySensor.setWire(&Wire);
|
||||
mySensor.beginAccel();
|
||||
mySensor.beginGyro();
|
||||
mySensor.beginMag(); // tenta usar AK8963 se existir
|
||||
|
||||
/*bool mpuIniciado = mpu.init();
|
||||
// MPU9250
|
||||
if (!mpuIniciado) {
|
||||
Serial.println("MPU9250 NAO encontrado!");
|
||||
} else {
|
||||
mpu.autoOffsets();
|
||||
mpu.setSampleRateDivider(5);
|
||||
mpu.setAccRange(MPU9250_ACC_RANGE_2G);
|
||||
mpu.enableAccDLPF(true);
|
||||
mpu.setAccDLPF(MPU9250_DLPF_6);
|
||||
Serial.println("MPU9250 OK");
|
||||
}*/
|
||||
|
||||
// BMP280
|
||||
if (!bmp.begin(ADDR_BMP)) {
|
||||
Serial.println("BMP280 NAO encontrado!");
|
||||
} else {
|
||||
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,
|
||||
Adafruit_BMP280::SAMPLING_X2,
|
||||
Adafruit_BMP280::SAMPLING_X16,
|
||||
Adafruit_BMP280::FILTER_X16,
|
||||
Adafruit_BMP280::STANDBY_MS_500);
|
||||
Serial.println("BMP280 OK");
|
||||
}
|
||||
|
||||
// Madgwick
|
||||
filter.begin(100); // 100 Hz
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// Atualizar dados do MPU
|
||||
/*xyzFloat acc = mpu.getGValues();
|
||||
xyzFloat gyr = mpu.getGyrValues();
|
||||
xyzFloat mag = mpu.getMagValues();
|
||||
|
||||
AccX = acc.x; AccY = acc.y; AccZ = acc.z;
|
||||
GyroX = gyr.x; GyroY = gyr.y; GyroZ = gyr.z;
|
||||
MagX = mag.x; MagY = mag.y; MagZ = mag.z;*/
|
||||
|
||||
mySensor.accelUpdate();
|
||||
mySensor.gyroUpdate();
|
||||
mySensor.magUpdate(); // pode falhar se não tiver magnetômetro
|
||||
|
||||
AccX = mySensor.accelX(); AccY = mySensor.accelY(); AccZ = mySensor.accelZ();
|
||||
GyroX = mySensor.gyroX(); GyroY = mySensor.gyroY(); GyroZ = mySensor.gyroZ();
|
||||
MagX = mySensor.magX(); MagY = mySensor.magY(); MagZ = mySensor.magZ();
|
||||
|
||||
// Atualizar dados do BMP
|
||||
Temp = bmp.readTemperature();
|
||||
Pressao = bmp.readPressure();
|
||||
Altitude = bmp.readAltitude();
|
||||
|
||||
// Filtro Madgwick
|
||||
filter.update(GyroX, GyroY, GyroZ, AccX, AccY, AccZ, MagX, MagY, MagZ);
|
||||
Roll = filter.getRoll();
|
||||
Pitch = filter.getPitch();
|
||||
Yaw = filter.getYaw();
|
||||
|
||||
// Exibir no Serial
|
||||
Serial.println("---- AMOSTRAGEM ----");
|
||||
Serial.print("Temp: "); Serial.println(Temp);
|
||||
Serial.print("Pressao: "); Serial.println(Pressao);
|
||||
Serial.print("Altitude: "); Serial.println(Altitude);
|
||||
|
||||
Serial.print("Roll: "); Serial.println(Roll);
|
||||
Serial.print("Pitch: "); Serial.println(Pitch);
|
||||
Serial.print("Yaw: "); Serial.println(Yaw);
|
||||
Serial.println();
|
||||
|
||||
delay(1000);
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
#include <Wire.h>
|
||||
#include <LSM6.h>
|
||||
|
||||
LSM6 imu;
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
Wire.begin(1, 2);
|
||||
|
||||
if (!imu.init()) {
|
||||
Serial.println("Falha ao detectar o LSM6!");
|
||||
while (1);
|
||||
}
|
||||
|
||||
imu.enableDefault();
|
||||
Serial.println("LSM6DS33 inicializado com sucesso!");
|
||||
}
|
||||
|
||||
void loop() {
|
||||
imu.read();
|
||||
|
||||
Serial.print("Acel: ");
|
||||
Serial.print(imu.a.x); Serial.print('\t');
|
||||
Serial.print(imu.a.y); Serial.print('\t');
|
||||
Serial.print(imu.a.z); Serial.print('\n');
|
||||
|
||||
Serial.print("Gyro: ");
|
||||
Serial.print(imu.g.x); Serial.print('\t');
|
||||
Serial.print(imu.g.y); Serial.print('\t');
|
||||
Serial.print(imu.g.z); Serial.print('\n');
|
||||
|
||||
delay(500);
|
||||
}
|
||||
Loading…
Reference in New Issue