iniciado resultados da operacao

This commit is contained in:
Diego Freitas 2024-05-17 09:49:47 -03:00
parent 37d865168c
commit 5a811047cd
235 changed files with 3117 additions and 656 deletions

Binary file not shown.

View File

@ -3,16 +3,20 @@
"WorkspaceRootPath": "C:\\ZendionINC\\agrobot_base\\AgroBase\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\forms\\frmkinect.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\forms\\frmkinect.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\forms\\operacoes\\frmresultadosoperacao.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\forms\\operacoes\\frmresultadosoperacao.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\forms\\frmkinect.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\forms\\frmkinect.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|C:\\ZendionINC\\agrobot_base\\AgroBase\\agrobase\\models\\operacoes\\operacaomodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\operacoes\\operacaomodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\forms\\frmpinout.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\forms\\frmpinout.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\models\\graficointerativomodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\graficointerativomodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|C:\\ZendionINC\\agrobot_base\\AgroBase\\agrobase\\forms\\operacoes\\frmresultadosoperacao.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\forms\\operacoes\\frmresultadosoperacao.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
}
],
"DocumentGroupContainers": [
@ -22,44 +26,59 @@
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 0,
"SelectedChildIndex": 1,
"Children": [
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "frmKinect.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmKinect.cs",
"RelativeDocumentMoniker": "AgroBase\\Forms\\frmKinect.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmKinect.cs",
"RelativeToolTip": "AgroBase\\Forms\\frmKinect.cs",
"ViewState": "AQIAAAsBAAAAAAAAAADwv4sAAAAMAAAA",
"DocumentIndex": 3,
"Title": "frmResultadosOperacao.cs [Design]",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\Operacoes\\frmResultadosOperacao.cs",
"RelativeDocumentMoniker": "AgroBase\\Forms\\Operacoes\\frmResultadosOperacao.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\Operacoes\\frmResultadosOperacao.cs [Design]",
"RelativeToolTip": "AgroBase\\Forms\\Operacoes\\frmResultadosOperacao.cs [Design]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-05-13T16:12:47.193Z",
"WhenOpened": "2024-05-16T12:05:37.337Z",
"IsPinned": true,
"EditorCaption": " [Design]"
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "frmResultadosOperacao.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\Operacoes\\frmResultadosOperacao.cs",
"RelativeDocumentMoniker": "AgroBase\\Forms\\Operacoes\\frmResultadosOperacao.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\Operacoes\\frmResultadosOperacao.cs",
"RelativeToolTip": "AgroBase\\Forms\\Operacoes\\frmResultadosOperacao.cs",
"ViewState": "AQIAAEkAAAAAAAAAAAAAAOIAAAAiAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-05-16T17:45:26.13Z",
"IsPinned": true,
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "GraficoInterativoModel.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\GraficoInterativoModel.cs",
"RelativeDocumentMoniker": "AgroBase\\Models\\GraficoInterativoModel.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\GraficoInterativoModel.cs",
"RelativeToolTip": "AgroBase\\Models\\GraficoInterativoModel.cs",
"ViewState": "AQIAAFMAAAAAAAAAAAAkwI4AAAA7AAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-05-17T11:53:55.974Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "frmKinect.cs [Design]",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmKinect.cs",
"RelativeDocumentMoniker": "AgroBase\\Forms\\frmKinect.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmKinect.cs [Design]",
"RelativeToolTip": "AgroBase\\Forms\\frmKinect.cs [Design]",
"Title": "OperacaoModel.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Operacoes\\OperacaoModel.cs",
"RelativeDocumentMoniker": "AgroBase\\Models\\Operacoes\\OperacaoModel.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Operacoes\\OperacaoModel.cs",
"RelativeToolTip": "AgroBase\\Models\\Operacoes\\OperacaoModel.cs",
"ViewState": "AQIAAF0AAAAAAAAAAAA1wHECAAAoAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-05-13T16:12:16.688Z",
"EditorCaption": " [Design]"
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "frmPinout.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmPinout.cs",
"RelativeDocumentMoniker": "AgroBase\\Forms\\frmPinout.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmPinout.cs",
"RelativeToolTip": "AgroBase\\Forms\\frmPinout.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAEBAABbAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-05-10T11:31:13.293Z",
"WhenOpened": "2024-05-16T14:00:24.714Z",
"EditorCaption": ""
}
]

File diff suppressed because one or more lines are too long

View File

@ -301,6 +301,12 @@
<Compile Include="Forms\Operacoes\frmParametrizacaoOperacao.Designer.cs">
<DependentUpon>frmParametrizacaoOperacao.cs</DependentUpon>
</Compile>
<Compile Include="Forms\Operacoes\frmResultadosOperacao.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\Operacoes\frmResultadosOperacao.Designer.cs">
<DependentUpon>frmResultadosOperacao.cs</DependentUpon>
</Compile>
<Compile Include="Forms\Sensoriamento\frmSenCamera.cs">
<SubType>Form</SubType>
</Compile>
@ -324,6 +330,7 @@
<Compile Include="Models\CameraModel.cs" />
<Compile Include="Models\CameraSoloModel.cs" />
<Compile Include="Models\GPSModel.cs" />
<Compile Include="Models\GraficoInterativoModel.cs" />
<Compile Include="Models\MapasModel.cs" />
<Compile Include="Models\MensagemFilaModel.cs" />
<Compile Include="Models\Modules\AtuadorModel.cs" />
@ -366,6 +373,7 @@
<Content Include="Imagens\loading.gif" />
<None Include="Imagens\robo_superior.jpg" />
<None Include="Imagens\mcp.jpg" />
<Content Include="Imagens\roda_superior.png" />
<Content Include="Imagens\rosa_dos_ventos.png" />
<Content Include="Imagens\transferidor.png" />
<Content Include="Python\Models\deeplabv3plus\backbone\hrnetv2.py">
@ -584,6 +592,9 @@
<EmbeddedResource Include="Forms\Operacoes\frmParametrizacaoOperacao.resx">
<DependentUpon>frmParametrizacaoOperacao.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\Operacoes\frmResultadosOperacao.resx">
<DependentUpon>frmResultadosOperacao.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\Sensoriamento\frmSenCamera.resx">
<DependentUpon>frmSenCamera.cs</DependentUpon>
</EmbeddedResource>

View File

@ -411,16 +411,19 @@ namespace AgroBase.Forms.Operacoes
private void videoSourceRua_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone();
Variaveis.OperacaoEmAndamento.DispSen.Dados.ultimoFrameCaminho = bitmap;
picCameraRua.Image = bitmap;
}
private void videoSourceSoloE_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone();
Variaveis.OperacaoEmAndamento.DispSen.Dados.ultimoFrameSoloE = bitmap;
picCameraSoloE.Image = bitmap;
}
private void videoSourceSoloD_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone();
Variaveis.OperacaoEmAndamento.DispSen.Dados.ultimoFrameSoleD = bitmap;
picCameraSoloD.Image = bitmap;
}
@ -433,7 +436,7 @@ namespace AgroBase.Forms.Operacoes
try
{
double angulo = GPSService.CalcularOrientacao(GPSService.PenultimaLeitura, GPSService.UltimaLeitura);
DesenharInclinacao((Panel)sender, e, (float)angulo, -90);
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, -90);
}
catch { }
}
@ -443,67 +446,11 @@ namespace AgroBase.Forms.Operacoes
try
{
double angulo = Variaveis.OperacaoEmAndamento.Sensoriamento.AnguloCarroBussola;
DesenharInclinacao((Panel)sender, e, (float)angulo, -90);
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, -90);
}
catch { }
}
private void DesenharInclinacao(Panel pnlBussola, PaintEventArgs e, float anguloInclinacao, float anguloSub)
{
if (!(anguloInclinacao >= 0 || anguloInclinacao <= 0))
{
anguloInclinacao = 0;
}
Graphics g = e.Graphics;
// Desenha o círculo da bússola
int diameter = Math.Min(pnlBussola.Width - 1, pnlBussola.Height - 1);
Point centro = new Point((pnlBussola.Width - 1) / 2, (pnlBussola.Height - 1) / 2);
//g.DrawEllipse(Pens.Black, centro.X - diameter / 2, centro.Y - diameter / 2, diameter, diameter);
// Escreve o ângulo no centro do círculo
string anguloTexto = $"{anguloInclinacao.ToString("0")}°";
Font fonteAngulo = new Font("Arial", 7); // Ajuste o tamanho da fonte conforme necessário
SizeF textSize = e.Graphics.MeasureString(anguloTexto, fonteAngulo);
// Calcula a posição para o texto ser centralizado no círculo
float textX = 0;
float textY = 0;
// Define a cor do texto
Brush textBrush = Brushes.Black;
// Desenha o texto no Graphics do painel
g.DrawString(anguloTexto, fonteAngulo, textBrush, textX, textY);
// A linha será desenhada do centro do círculo
PointF pontoCentral = new PointF(centro.X, centro.Y);
// O comprimento da linha será metade do diâmetro do círculo (raio)
float comprimentoLinha = diameter / 3;
// Ajustar o ângulo para que 0 graus esteja para cima e aumente no sentido horário
//float anguloRadianos = (anguloInclinacao - 90) * (float)(Math.PI / 180.0);
float anguloRadianos = (anguloInclinacao - anguloSub) * (float)(Math.PI / 180.0);
// Calcular o ponto final da linha baseado no ângulo de inclinação
PointF pontoFinal = new PointF(
pontoCentral.X + comprimentoLinha * (float)Math.Cos(anguloRadianos),
pontoCentral.Y + comprimentoLinha * (float)Math.Sin(anguloRadianos)
);
// Desenhar a linha de inclinação
g.DrawLine(Pens.Red, pontoCentral, pontoFinal);
// Opcional: Desenhar uma ponta de seta na linha para indicar direção
using (AdjustableArrowCap bigArrow = new AdjustableArrowCap(4, 4))
{
using (Pen pen = new Pen(Color.Red, 2))
{
pen.CustomEndCap = bigArrow;
g.DrawLine(pen, pontoCentral, pontoFinal);
}
}
}
#endregion

View File

@ -796,7 +796,7 @@ namespace AgroBase.Forms.Operacoes
try
{
//DesenharInclinacao((Panel)sender, e, (float)cameraCaminho.Angulo);
DesenharInclinacao((Panel)sender, e, (float)(Variaveis.OperacaoEmAndamento.OpMapaGPS.Controle.Angulo), 90);
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)(Variaveis.OperacaoEmAndamento.OpMapaGPS.Controle.Angulo), 90);
}
catch { }
}
@ -806,7 +806,7 @@ namespace AgroBase.Forms.Operacoes
try
{
//DesenharInclinacao((Panel)sender, e, (float)cameraCaminho.Angulo);
DesenharInclinacao((Panel)sender, e, (float)(Variaveis.OperacaoEmAndamento.OpMapaGPS.Sensoriamento.AnguloRuaCamera), 90);
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)(Variaveis.OperacaoEmAndamento.OpMapaGPS.Sensoriamento.AnguloRuaCamera), 90);
}
catch { }
}
@ -816,69 +816,11 @@ namespace AgroBase.Forms.Operacoes
try
{
double angulo = Variaveis.OperacaoEmAndamento.Sensoriamento.AnguloCarro;
DesenharInclinacao((Panel)sender, e, (float)angulo, -90);
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, -90);
}
catch { }
}
private void DesenharInclinacao(Panel pnlBussola, PaintEventArgs e, float anguloInclinacao, float anguloSub)
{
if (!(anguloInclinacao >= 0 || anguloInclinacao <= 0))
{
anguloInclinacao = 0;
}
Graphics g = e.Graphics;
// Desenha o círculo da bússola
int diameter = Math.Min(pnlBussola.Width - 1, pnlBussola.Height - 1);
Point centro = new Point((pnlBussola.Width - 1) / 2, (pnlBussola.Height - 1) / 2);
//g.DrawEllipse(Pens.Black, centro.X - diameter / 2, centro.Y - diameter / 2, diameter, diameter);
// Escreve o ângulo no centro do círculo
string anguloTexto = $"{anguloInclinacao.ToString("0")}°";
Font fonteAngulo = new Font("Arial", 7); // Ajuste o tamanho da fonte conforme necessário
SizeF textSize = e.Graphics.MeasureString(anguloTexto, fonteAngulo);
// Calcula a posição para o texto ser centralizado no círculo
float textX = 0;
float textY = 0;
// Define a cor do texto
Brush textBrush = Brushes.Black;
// Desenha o texto no Graphics do painel
g.DrawString(anguloTexto, fonteAngulo, textBrush, textX, textY);
// A linha será desenhada do centro do círculo
PointF pontoCentral = new PointF(centro.X, centro.Y);
// O comprimento da linha será metade do diâmetro do círculo (raio)
float comprimentoLinha = diameter / 3;
// Ajustar o ângulo para que 0 graus esteja para cima e aumente no sentido horário
//float anguloRadianos = (anguloInclinacao - 90) * (float)(Math.PI / 180.0);
float anguloRadianos = (anguloInclinacao - anguloSub) * (float)(Math.PI / 180.0);
// Calcular o ponto final da linha baseado no ângulo de inclinação
PointF pontoFinal = new PointF(
pontoCentral.X + comprimentoLinha * (float)Math.Cos(anguloRadianos),
pontoCentral.Y + comprimentoLinha * (float)Math.Sin(anguloRadianos)
);
// Desenhar a linha de inclinação
g.DrawLine(Pens.Red, pontoCentral, pontoFinal);
// Opcional: Desenhar uma ponta de seta na linha para indicar direção
using (AdjustableArrowCap bigArrow = new AdjustableArrowCap(4, 4))
{
using (Pen pen = new Pen(Color.Red, 2))
{
pen.CustomEndCap = bigArrow;
g.DrawLine(pen, pontoCentral, pontoFinal);
}
}
}
#endregion

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,451 @@
using AgroBase.Models;
using AgroBase.Properties;
using AgroBase.Services;
using CefSharp.DevTools.Page;
using Emgu.CV;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
namespace AgroBase.Forms.Operacoes
{
public partial class frmResultadosOperacao : Form
{
List<OperacaoSensoriamentoLogModel> LogsOperacao = new List<OperacaoSensoriamentoLogModel>();
List<GPSModel> LogsGPS = new List<GPSModel>();
List<DirSensoriamentoLogModel> LogsDirecional = new List<DirSensoriamentoLogModel>();
List<MovSensoriamentoLogModel> LogsMovimentacao = new List<MovSensoriamentoLogModel>();
List<AtuSensoriamentoLogModel> LogsAtuador = new List<AtuSensoriamentoLogModel>();
List<SenSensoriamentoLogModel> LogsSensoriamento = new List<SenSensoriamentoLogModel>();
List<PzmSensoriamentoLogModel> LogsPzem = new List<PzmSensoriamentoLogModel>();
string pathImagensCaminho = "";
string pathImagensSoloE = "";
string pathImagensSoloD = "";
DateTime MomentoAtual = DateTime.Now;
Timer tmrPlay = new Timer() { Interval = 1000 };
MapasModel Mapa = new MapasModel();
bool[] SeriesVisiveisAtuador = new bool[] { false, true, true, true, true, false };
GraficoInterativoModel graficoAtu;
GraficoInterativoModel graficoSen;
public frmResultadosOperacao()
{
InitializeComponent();
}
private void frmResultadosOperacao_Load(object sender, EventArgs e)
{
tmrPlay.Tick += TmrPlay_Tick;
picDIR_DF.Image = FuncoesGlobais.EspelharImagemHorizontalmente(Resources.roda_superior);
picDIR_DT.Image = FuncoesGlobais.EspelharImagemHorizontalmente(Resources.roda_superior);
}
private void TmrPlay_Tick(object sender, EventArgs e)
{
if (trbMomento.Value < trbMomento.Maximum)
{
trbMomento.Value++;
}
else
{
tmrPlay.Stop();
}
}
private void trbMomento_ValueChanged(object sender, EventArgs e)
{
MomentoAtual = LogsOperacao.Skip(trbMomento.Value).FirstOrDefault().Momento;
AtualizarDadosMomento();
}
private void btnPlay_Click(object sender, EventArgs e)
{
tmrPlay.Enabled = !tmrPlay.Enabled;
btnPlay.Text = tmrPlay.Enabled ? "Pause" : "Pay";
}
private void btnCarregarOperacao_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Arquivos de Operação|*.lgop";
ofd.InitialDirectory = Application.StartupPath + Variaveis.CaminhoOperacoes;
if (ofd.ShowDialog() == DialogResult.OK)
{
OperacaoDadosModel data = JsonConvert.DeserializeObject<OperacaoDadosModel>(File.ReadAllText(ofd.FileName));
LogsOperacao = JsonConvert.DeserializeObject<OperacaoSensoriamentoLogModel[]>(DeserializarDadosOperacao(ofd.FileName, data.operacao)).ToList();
LogsGPS = JsonConvert.DeserializeObject<GPSModel[]>(DeserializarDadosOperacao(ofd.FileName, data.gps)).ToList();
LogsDirecional = JsonConvert.DeserializeObject<DirSensoriamentoLogModel[]>(DeserializarDadosOperacao(ofd.FileName, data.dir)).ToList();
LogsMovimentacao = JsonConvert.DeserializeObject<MovSensoriamentoLogModel[]>(DeserializarDadosOperacao(ofd.FileName, data.mov)).ToList();
LogsAtuador = JsonConvert.DeserializeObject<AtuSensoriamentoLogModel[]>(DeserializarDadosOperacao(ofd.FileName, data.atu)).ToList();
LogsSensoriamento = JsonConvert.DeserializeObject<SenSensoriamentoLogModel[]>(DeserializarDadosOperacao(ofd.FileName, data.sen)).ToList();
LogsPzem = JsonConvert.DeserializeObject<PzmSensoriamentoLogModel[]>(DeserializarDadosOperacao(ofd.FileName, data.pzm)).ToList();
pathImagensCaminho = ofd.FileName.Replace("data.lgop", data.caminho + "/");
pathImagensSoloE = ofd.FileName.Replace("data.lgop", data.soloE + "/");
pathImagensSoloD = ofd.FileName.Replace("data.lgop", data.soloD + "/");
Mapa = new MapasModel()
{
pnlMapa = pnlMapa
};
MapasService.CriarArquivoMapa(new List<List<GPSModel>>() { LogsGPS }, 1517, data.id);
Mapa.btnCarregar_Click(sender, e, Variaveis.CaminhoSistema + "/" + Variaveis.CaminhoMapasConvertidos + data.id + ".json");
trbMomento.Maximum = LogsOperacao.Count - 1;
trbMomento.Minimum = 0;
trbMomento.Value = 0;
MomentoAtual = LogsOperacao[0].Momento;
this.Text = "Resultados da Operação " + LogsOperacao[0].Momento.ToString("dd/MM/yyyy");
InicializarGraficos();
AtualizarDadosMomento();
}
}
private void InicializarGraficos()
{
var Momentos = LogsOperacao.Select(x => x.Momento.ToString("mm:ss:fff")).ToList();
graficoAtu = new GraficoInterativoModel(chartAtuador, Momentos, new List<GraficoInterativoSerieModel>()
{
new GraficoInterativoSerieModel()
{
Titulo = "Pressão SP",
Valores = LogsAtuador.Select(x => x?.PressaoLinha_SP ?? 0).ToList(),
Visivel = false,
},
new GraficoInterativoSerieModel()
{
Titulo = "Pressão",
Valores = LogsAtuador.Select(x => x?.PressaoLinha ?? 0).ToList(),
Visivel = true,
},
new GraficoInterativoSerieModel()
{
Titulo = "Potência",
Valores = LogsAtuador.Select(x => x?.PotenciaBomba ?? 0).ToList(),
Visivel = true,
},
new GraficoInterativoSerieModel()
{
Titulo = "Volume",
Valores = LogsAtuador.Select(x => x?.VolumeReservatorio ?? 0).ToList(),
Visivel = true,
},
new GraficoInterativoSerieModel()
{
Titulo = "Percentual",
Valores = LogsAtuador.Select(x => x?.PercentualReservatorio ?? 0).ToList(),
Visivel = true,
},
new GraficoInterativoSerieModel()
{
Titulo = "Vazão",
Valores = LogsAtuador.Select(x => x?.VazaoFluxoMLpS ?? 0).ToList(),
Visivel = true,
}
});
graficoSen = new GraficoInterativoModel(chartSensoriamento, Momentos, new List<GraficoInterativoSerieModel>()
{
new GraficoInterativoSerieModel()
{
Titulo = "V 3v3",
Valores = LogsSensoriamento.Select(x => x?.Barramento3v3Tensao ?? 0).ToList(),
Visivel = false,
},
new GraficoInterativoSerieModel()
{
Titulo = "A 3v3",
Valores = LogsSensoriamento.Select(x => x?.Barramento3v3Corrente ?? 0).ToList(),
Visivel = false,
},
new GraficoInterativoSerieModel()
{
Titulo = "V 5v0",
Valores = LogsSensoriamento.Select(x => x?.Barramento5vTensao ?? 0).ToList(),
Visivel = false,
},
new GraficoInterativoSerieModel()
{
Titulo = "A 5v0",
Valores = LogsSensoriamento.Select(x => x?.Barramento5vCorrente ?? 0).ToList(),
Visivel = false,
},
new GraficoInterativoSerieModel()
{
Titulo = "V 7v2",
Valores = LogsSensoriamento.Select(x => x?.Barramento7v2Tensao ?? 0).ToList(),
Visivel = false,
},
new GraficoInterativoSerieModel()
{
Titulo = "A 7v2",
Valores = LogsSensoriamento.Select(x => x?.Barramento7v2Corrente ?? 0).ToList(),
Visivel = false,
},
new GraficoInterativoSerieModel()
{
Titulo = "V 12v",
Valores = LogsSensoriamento.Select(x => x?.Barramento12vTensao ?? 0).ToList(),
Visivel = true,
},
new GraficoInterativoSerieModel()
{
Titulo = "A 12v",
Valores = LogsSensoriamento.Select(x => x?.Barramento12vCorrente ?? 0).ToList(),
Visivel = true,
},
new GraficoInterativoSerieModel()
{
Titulo = "V Bat",
Valores = LogsPzem.Select(x => x?.Tensao ?? 0).ToList(),
Visivel = true,
},
new GraficoInterativoSerieModel()
{
Titulo = "A Bat",
Valores = LogsPzem.Select(x => x?.Corrente ?? 0).ToList(),
Visivel = true,
}
});
}
private string DeserializarDadosOperacao(string caminho, string arquivo)
{
string opPath = caminho.Replace("data.lgop", arquivo) + ".json";
string opStr = File.ReadAllText(opPath) + "]";
return opStr;
}
private void CarregarImagemCamera(PictureBox pic, string Caminho)
{
if (File.Exists(Caminho + trbMomento.Value + ".jpg"))
{
pic.Image = Image.FromFile(Caminho + trbMomento.Value + ".jpg");
}
else
{
Bitmap frame = new Bitmap(1, 1);
using (Graphics g = Graphics.FromImage(frame))
{
g.Clear(Color.Black);
}
pic.Image = frame;
}
}
private void AtualizarDadosMomento()
{
if (!LogsOperacao.Any())
{
return;
}
txtMomento.Text = LogsOperacao.FirstOrDefault(x => x.Momento == MomentoAtual).Momento.ToString("HH:mm:ss");
CarregarImagemCamera(picCameraCaminho, pathImagensCaminho);
CarregarImagemCamera(picCameraSoloE, pathImagensSoloE);
CarregarImagemCamera(picCameraSoloD, pathImagensSoloD);
AtualizarInformacoesGPS();
AtualizarInformacoesMotorDirecional("DF");
AtualizarInformacoesMotorDirecional("DT");
AtualizarInformacoesMotorDirecional("EF");
AtualizarInformacoesMotorDirecional("ET");
pnlOrientacaoDirecional.Invalidate();
AtualizarInformacoesAtuador();
AtualizarInformacoesSensoriamento();
pnlOrientacaoMagnetometro.Invalidate();
}
private void AtualizarInformacoesMotorDirecional(string ID)
{
var Log = LogsDirecional.Where(x => x.ComponenteID == ID).FirstOrDefault(x => x.Momento == MomentoAtual);
double Angulo = Log?.Angulo ?? 0;
double Multiplicador = (Log?.Sentido ?? Enuns.Sentido.Parado) == Enuns.Sentido.Antihorario ? -1 : 1;
Image img = Resources.roda_superior;
if (ID.StartsWith("D"))
{
img = FuncoesGlobais.EspelharImagemHorizontalmente(img);
}
PictureBox pic = FuncoesGlobais.FindControlRecursive<PictureBox>(tabDirecional, "picDIR_" + ID);
pic.Image = FuncoesGlobais.RotacionarImagem(img, Angulo * Multiplicador);
Label lbl = FuncoesGlobais.FindControlRecursive<Label>(tabDirecional, "lblDIR_" + ID);
lbl.ForeColor = Log.Inicializado ? Color.Green : Color.Red;
TextBox txtAnguloSP = FuncoesGlobais.FindControlRecursive<TextBox>(tabDirecional, "txtDIR_AnguloSP_" + ID);
txtAnguloSP.Text = (Log?.Angulo_SP ?? 0).ToString();
TextBox txtAngulo = FuncoesGlobais.FindControlRecursive<TextBox>(tabDirecional, "txtDIR_Angulo_" + ID);
txtAngulo.Text = (Log?.Angulo ?? 0).ToString();
TextBox txtSentidoSP = FuncoesGlobais.FindControlRecursive<TextBox>(tabDirecional, "txtDIR_SentidoSP_" + ID);
txtSentidoSP.Text = (Log?.Sentido_SP ?? Enuns.Sentido.Parado).ToString();
TextBox txtSentido = FuncoesGlobais.FindControlRecursive<TextBox>(tabDirecional, "txtDIR_Sentido_" + ID);
txtSentido.Text = (Log?.Sentido ?? Enuns.Sentido.Parado).ToString();
TextBox txtVelocidade = FuncoesGlobais.FindControlRecursive<TextBox>(tabDirecional, "txtDIR_Velocidade_" + ID);
txtVelocidade.Text = (Log?.Velocidade ?? 0).ToString();
TextBox txtControlar = FuncoesGlobais.FindControlRecursive<TextBox>(tabDirecional, "txtDIR_Controlar_" + ID);
txtControlar.Text = (Log?.Controlar ?? false) ? "Sim" : "Não";
}
private void AtualizarInformacoesGPS()
{
var Log = LogsGPS.FirstOrDefault(x => x.Momento == MomentoAtual);
txtGPS_Altitude.Text = (Log?.Altitude ?? 0).ToString();
txtGPS_Data.Text = (Log?.DataHora ?? MomentoAtual).ToString("dd/MM HH:mm:ss");
txtGPS_Latitude.Text = (Log?.Latitude ?? 0).ToString();
txtGPS_Longitude.Text = (Log?.Longitude ?? 0).ToString();
txtGPS_Orientacao.Text = (Log?.Orientacao ?? 0).ToString();
txtGPS_Precisao.Text = (Log?.PrecisaoHorizontal ?? 0).ToString();
txtGPS_Satelites.Text = (Log?.NumeroSatelites ?? 0).ToString();
txtGPS_Velocidade.Text = (Log?.Velocidade ?? 0).ToString();
GPSService.EnviarCoordenadasParaMapa(Log?.Latitude ?? 0, Log?.Longitude ?? 0, Log?.Orientacao ?? 0);
pnlOrientacaoGPS.Invalidate();
}
private void AtualizarInformacoesAtuador()
{
var LogsModulo = LogsAtuador.ToList();
var Log = LogsModulo.FirstOrDefault(x => x.Momento == MomentoAtual);
graficoAtu.AtualizarDados(LogsModulo.IndexOf(Log));
pnlAtuadores.Invalidate();
}
private void AtualizarInformacoesSensoriamento()
{
var LogsModulo = LogsSensoriamento.ToList();
var Log = LogsModulo.FirstOrDefault(x => x.Momento == MomentoAtual);
graficoSen.AtualizarDados(LogsModulo.IndexOf(Log));
}
private void pnlOrientacaoDirecional_Paint(object sender, PaintEventArgs e)
{
var Logs = LogsDirecional.Where(x => x.Momento == MomentoAtual).ToList();
double Angulo = Logs.Any() ? Logs.Average(x => x.Angulo_SP) : 0;
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)Angulo, 90);
}
private void pnlOrientacaoGPS_Paint(object sender, PaintEventArgs e)
{
var Log = LogsGPS.FirstOrDefault(x => x.Momento == MomentoAtual);
double Angulo = Log?.Orientacao ?? 0;
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)Angulo, -90);
}
private void pnlOrientacaoMagnetometro_Paint(object sender, PaintEventArgs e)
{
var Log = LogsSensoriamento.FirstOrDefault(x => x.Momento == MomentoAtual);
double Angulo = Log?.OrientacaoMagnetica ?? 0;
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)Angulo, -90);
}
private void pnlAtuadores_Paint(object sender, PaintEventArgs e)
{
var Log = LogsAtuador.FirstOrDefault(x => x.Momento == MomentoAtual);
if (Log == null)
{
return;
}
Graphics g = e.Graphics;
Panel myPanel = (Panel)sender;
int panelWidth = myPanel.Width;
int circleDiameter = 40; // Diâmetro dos círculos grandes
int smallCircleDiameter = circleDiameter / 2; // Diâmetro dos círculos pequenos
int spaceBetweenCircles = (panelWidth - (circleDiameter * Log.QuantidadeBicos)) / (Log.QuantidadeBicos + 1);
int yPosition = (myPanel.Height - circleDiameter) / 3; // Centralizado verticalmente
for (int i = 0; i < Log.QuantidadeBicos; i++)
{
// Calcula a posição x do círculo
int xPosition = spaceBetweenCircles + (i * (circleDiameter + spaceBetweenCircles));
// Desenha o contorno do círculo
g.DrawEllipse(Pens.Red, xPosition, yPosition, circleDiameter, circleDiameter);
// Se o bico estiver aceso, preenche o círculo
if (Log.Bicos[i].Atuado)
{
g.FillEllipse(Brushes.Red, xPosition, yPosition, circleDiameter, circleDiameter);
}
// Define a string que representa o número do bico
string bicoNumero = Log.Bicos[i].ID;
// Define a fonte para o texto
Font font = new Font("Arial", 10, FontStyle.Bold);
// Mede o tamanho do texto
SizeF stringSize = g.MeasureString(bicoNumero, font);
// Calcula as posições x e y para centralizar o texto no círculo
float textXPosition = xPosition + (circleDiameter - stringSize.Width) / 2;
float textYPosition = yPosition + (circleDiameter - stringSize.Height) / 2;
// Desenha o número do bico
g.DrawString(bicoNumero, font, Brushes.Black, textXPosition, textYPosition);
// Define a string que representa a atuacao do bico
string bicoAtuacao = Log.Bicos[i].Atuacoes.ToString("000");
// Define a fonte para o texto
Font fontA = new Font("Arial", 8, FontStyle.Bold);
// Mede o tamanho do texto
SizeF stringSizeA = g.MeasureString(bicoAtuacao, fontA);
// Calcula as posições x e y para centralizar o texto no círculo
float textXPositionA = xPosition + (circleDiameter - stringSizeA.Width) / 2;
float textYPositionA = circleDiameter + yPosition + 5;
// Desenha as atuacoes do bico
g.DrawString(bicoAtuacao, fontA, Brushes.Black, textXPositionA, textYPositionA);
// Calcula a posição x e y do círculo pequeno
int smallCircleXPosition = Convert.ToInt32(xPosition + circleDiameter - smallCircleDiameter / 1.3);
int smallCircleYPosition = Convert.ToInt32(yPosition + circleDiameter - smallCircleDiameter / 1.3);
// Define a cor de contorno e preenchimento para o círculo pequeno
Pen smallCirclePen = Pens.Blue; // Cor do contorno
Brush smallCircleBrush = Brushes.Transparent; // Cor de preenchimento padrão
// Se o status do bico for true, altera a cor de preenchimento para azul
if (Log.Bicos[i].StatusBico)
{
smallCircleBrush = Brushes.Blue;
}
// Desenha o contorno do círculo pequeno
g.DrawEllipse(smallCirclePen, smallCircleXPosition, smallCircleYPosition, smallCircleDiameter, smallCircleDiameter);
// Preenche o círculo pequeno se o status do bico for true
g.FillEllipse(smallCircleBrush, smallCircleXPosition, smallCircleYPosition, smallCircleDiameter, smallCircleDiameter);
}
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -78,6 +78,7 @@ namespace AgroBase
this.gpbJoystick = new System.Windows.Forms.GroupBox();
this.gpbControleDirecional = new System.Windows.Forms.GroupBox();
this.gpbAtalhos = new System.Windows.Forms.GroupBox();
this.btnKinect = new System.Windows.Forms.Button();
this.btnSimulador = new System.Windows.Forms.Button();
this.btnSonar = new System.Windows.Forms.Button();
this.btnAtuCalibragem = new System.Windows.Forms.Button();
@ -90,7 +91,7 @@ namespace AgroBase
this.btnIniciarOperacao = new System.Windows.Forms.Button();
this.lblModoOperacao = new System.Windows.Forms.Label();
this.cmbModoOperacao = new System.Windows.Forms.ComboBox();
this.btnKinect = new System.Windows.Forms.Button();
this.btnResultados = new System.Windows.Forms.Button();
this.gpbAcoes.SuspendLayout();
this.erroStrip.SuspendLayout();
this.pnlLateral.SuspendLayout();
@ -163,7 +164,7 @@ namespace AgroBase
//
this.chbConexaoautomatica.AutoSize = true;
this.chbConexaoautomatica.Location = new System.Drawing.Point(229, 34);
this.chbConexaoautomatica.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.chbConexaoautomatica.Margin = new System.Windows.Forms.Padding(4);
this.chbConexaoautomatica.Name = "chbConexaoautomatica";
this.chbConexaoautomatica.Size = new System.Drawing.Size(152, 20);
this.chbConexaoautomatica.TabIndex = 21;
@ -534,7 +535,7 @@ namespace AgroBase
//
// btnDiagnosticos
//
this.btnDiagnosticos.Location = new System.Drawing.Point(5, 21);
this.btnDiagnosticos.Location = new System.Drawing.Point(5, 16);
this.btnDiagnosticos.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnDiagnosticos.Name = "btnDiagnosticos";
this.btnDiagnosticos.Size = new System.Drawing.Size(112, 25);
@ -545,7 +546,7 @@ namespace AgroBase
//
// btnAcompanhamento
//
this.btnAcompanhamento.Location = new System.Drawing.Point(5, 52);
this.btnAcompanhamento.Location = new System.Drawing.Point(5, 47);
this.btnAcompanhamento.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnAcompanhamento.Name = "btnAcompanhamento";
this.btnAcompanhamento.Size = new System.Drawing.Size(112, 25);
@ -556,7 +557,7 @@ namespace AgroBase
//
// btnAtuCamera
//
this.btnAtuCamera.Location = new System.Drawing.Point(5, 82);
this.btnAtuCamera.Location = new System.Drawing.Point(5, 77);
this.btnAtuCamera.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnAtuCamera.Name = "btnAtuCamera";
this.btnAtuCamera.Size = new System.Drawing.Size(112, 25);
@ -567,7 +568,7 @@ namespace AgroBase
//
// btnMapas
//
this.btnMapas.Location = new System.Drawing.Point(5, 145);
this.btnMapas.Location = new System.Drawing.Point(5, 140);
this.btnMapas.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnMapas.Name = "btnMapas";
this.btnMapas.Size = new System.Drawing.Size(112, 25);
@ -578,7 +579,7 @@ namespace AgroBase
//
// btnSenCamera
//
this.btnSenCamera.Location = new System.Drawing.Point(5, 114);
this.btnSenCamera.Location = new System.Drawing.Point(5, 109);
this.btnSenCamera.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnSenCamera.Name = "btnSenCamera";
this.btnSenCamera.Size = new System.Drawing.Size(112, 25);
@ -612,13 +613,14 @@ namespace AgroBase
this.gpbControleDirecional.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.gpbControleDirecional.Name = "gpbControleDirecional";
this.gpbControleDirecional.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.gpbControleDirecional.Size = new System.Drawing.Size(440, 183);
this.gpbControleDirecional.Size = new System.Drawing.Size(440, 196);
this.gpbControleDirecional.TabIndex = 19;
this.gpbControleDirecional.TabStop = false;
this.gpbControleDirecional.Text = "Controle Direcional";
//
// gpbAtalhos
//
this.gpbAtalhos.Controls.Add(this.btnResultados);
this.gpbAtalhos.Controls.Add(this.btnKinect);
this.gpbAtalhos.Controls.Add(this.btnSimulador);
this.gpbAtalhos.Controls.Add(this.btnSonar);
@ -634,14 +636,25 @@ namespace AgroBase
this.gpbAtalhos.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.gpbAtalhos.Name = "gpbAtalhos";
this.gpbAtalhos.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.gpbAtalhos.Size = new System.Drawing.Size(124, 359);
this.gpbAtalhos.Size = new System.Drawing.Size(124, 374);
this.gpbAtalhos.TabIndex = 20;
this.gpbAtalhos.TabStop = false;
this.gpbAtalhos.Text = "Atalhos";
//
// btnKinect
//
this.btnKinect.Location = new System.Drawing.Point(5, 314);
this.btnKinect.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnKinect.Name = "btnKinect";
this.btnKinect.Size = new System.Drawing.Size(112, 25);
this.btnKinect.TabIndex = 24;
this.btnKinect.Text = "Kinect";
this.btnKinect.UseVisualStyleBackColor = true;
this.btnKinect.Click += new System.EventHandler(this.btnKinect_Click);
//
// btnSimulador
//
this.btnSimulador.Location = new System.Drawing.Point(5, 290);
this.btnSimulador.Location = new System.Drawing.Point(5, 285);
this.btnSimulador.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnSimulador.Name = "btnSimulador";
this.btnSimulador.Size = new System.Drawing.Size(112, 25);
@ -652,7 +665,7 @@ namespace AgroBase
//
// btnSonar
//
this.btnSonar.Location = new System.Drawing.Point(5, 262);
this.btnSonar.Location = new System.Drawing.Point(5, 257);
this.btnSonar.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnSonar.Name = "btnSonar";
this.btnSonar.Size = new System.Drawing.Size(112, 25);
@ -663,7 +676,7 @@ namespace AgroBase
//
// btnAtuCalibragem
//
this.btnAtuCalibragem.Location = new System.Drawing.Point(5, 233);
this.btnAtuCalibragem.Location = new System.Drawing.Point(5, 228);
this.btnAtuCalibragem.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnAtuCalibragem.Name = "btnAtuCalibragem";
this.btnAtuCalibragem.Size = new System.Drawing.Size(112, 25);
@ -674,7 +687,7 @@ namespace AgroBase
//
// btnContornos
//
this.btnContornos.Location = new System.Drawing.Point(5, 204);
this.btnContornos.Location = new System.Drawing.Point(5, 199);
this.btnContornos.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnContornos.Name = "btnContornos";
this.btnContornos.Size = new System.Drawing.Size(112, 25);
@ -685,7 +698,7 @@ namespace AgroBase
//
// btnGPS
//
this.btnGPS.Location = new System.Drawing.Point(5, 175);
this.btnGPS.Location = new System.Drawing.Point(5, 170);
this.btnGPS.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnGPS.Name = "btnGPS";
this.btnGPS.Size = new System.Drawing.Size(112, 25);
@ -702,18 +715,18 @@ namespace AgroBase
this.gpbOperacao.Controls.Add(this.btnIniciarOperacao);
this.gpbOperacao.Controls.Add(this.lblModoOperacao);
this.gpbOperacao.Controls.Add(this.cmbModoOperacao);
this.gpbOperacao.Location = new System.Drawing.Point(12, 378);
this.gpbOperacao.Location = new System.Drawing.Point(12, 388);
this.gpbOperacao.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.gpbOperacao.Name = "gpbOperacao";
this.gpbOperacao.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.gpbOperacao.Size = new System.Drawing.Size(571, 124);
this.gpbOperacao.Size = new System.Drawing.Size(571, 119);
this.gpbOperacao.TabIndex = 21;
this.gpbOperacao.TabStop = false;
this.gpbOperacao.Text = "Operação";
//
// btnIHM
//
this.btnIHM.Location = new System.Drawing.Point(395, 78);
this.btnIHM.Location = new System.Drawing.Point(395, 72);
this.btnIHM.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnIHM.Name = "btnIHM";
this.btnIHM.Size = new System.Drawing.Size(163, 41);
@ -724,7 +737,7 @@ namespace AgroBase
//
// btnConfigurarOperacao
//
this.btnConfigurarOperacao.Location = new System.Drawing.Point(161, 78);
this.btnConfigurarOperacao.Location = new System.Drawing.Point(161, 72);
this.btnConfigurarOperacao.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnConfigurarOperacao.Name = "btnConfigurarOperacao";
this.btnConfigurarOperacao.Size = new System.Drawing.Size(163, 41);
@ -736,7 +749,7 @@ namespace AgroBase
// chbDebugMode
//
this.chbDebugMode.AutoSize = true;
this.chbDebugMode.Location = new System.Drawing.Point(179, 49);
this.chbDebugMode.Location = new System.Drawing.Point(179, 43);
this.chbDebugMode.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.chbDebugMode.Name = "chbDebugMode";
this.chbDebugMode.Size = new System.Drawing.Size(135, 20);
@ -746,7 +759,7 @@ namespace AgroBase
//
// btnIniciarOperacao
//
this.btnIniciarOperacao.Location = new System.Drawing.Point(9, 78);
this.btnIniciarOperacao.Location = new System.Drawing.Point(9, 72);
this.btnIniciarOperacao.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnIniciarOperacao.Name = "btnIniciarOperacao";
this.btnIniciarOperacao.Size = new System.Drawing.Size(145, 41);
@ -758,7 +771,7 @@ namespace AgroBase
// lblModoOperacao
//
this.lblModoOperacao.AutoSize = true;
this.lblModoOperacao.Location = new System.Drawing.Point(5, 27);
this.lblModoOperacao.Location = new System.Drawing.Point(5, 21);
this.lblModoOperacao.Name = "lblModoOperacao";
this.lblModoOperacao.Size = new System.Drawing.Size(42, 16);
this.lblModoOperacao.TabIndex = 13;
@ -768,23 +781,23 @@ namespace AgroBase
//
this.cmbModoOperacao.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbModoOperacao.FormattingEnabled = true;
this.cmbModoOperacao.Location = new System.Drawing.Point(9, 47);
this.cmbModoOperacao.Location = new System.Drawing.Point(9, 41);
this.cmbModoOperacao.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.cmbModoOperacao.Name = "cmbModoOperacao";
this.cmbModoOperacao.Size = new System.Drawing.Size(145, 24);
this.cmbModoOperacao.TabIndex = 13;
this.cmbModoOperacao.SelectedIndexChanged += new System.EventHandler(this.cmbModoOperacao_SelectedIndexChanged);
//
// btnKinect
// btnResultados
//
this.btnKinect.Location = new System.Drawing.Point(5, 319);
this.btnKinect.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnKinect.Name = "btnKinect";
this.btnKinect.Size = new System.Drawing.Size(112, 25);
this.btnKinect.TabIndex = 24;
this.btnKinect.Text = "Kinect";
this.btnKinect.UseVisualStyleBackColor = true;
this.btnKinect.Click += new System.EventHandler(this.btnKinect_Click);
this.btnResultados.Location = new System.Drawing.Point(5, 343);
this.btnResultados.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnResultados.Name = "btnResultados";
this.btnResultados.Size = new System.Drawing.Size(112, 25);
this.btnResultados.TabIndex = 25;
this.btnResultados.Text = "Resultados";
this.btnResultados.UseVisualStyleBackColor = true;
this.btnResultados.Click += new System.EventHandler(this.btnResultados_Click);
//
// frmPrincipal
//
@ -900,6 +913,7 @@ namespace AgroBase
private System.Windows.Forms.Button btnSonar;
private System.Windows.Forms.Button btnSimulador;
private System.Windows.Forms.Button btnKinect;
private System.Windows.Forms.Button btnResultados;
}
}

View File

@ -325,5 +325,11 @@ namespace AgroBase
frmKinect frmKinect = new frmKinect();
frmKinect.Show();
}
private void btnResultados_Click(object sender, EventArgs e)
{
frmResultadosOperacao frmResultadosOperacao = new frmResultadosOperacao();
frmResultadosOperacao.Show();
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

View File

@ -10,6 +10,7 @@ namespace AgroBase.Models
{
public class GPSModel
{
public DateTime Momento { get; set; }
public double Latitude { get; set; }
public double Longitude { get; set; }
public DateTime DataHora { get; set; }

View File

@ -0,0 +1,154 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
namespace AgroBase.Models
{
public class GraficoInterativoModel
{
public GraficoInterativoModel(Chart _chart, List<string> _momentos, List<GraficoInterativoSerieModel> _series)
{
chart = _chart;
chart.MouseClick += chart_MouseClick;
chart.MouseDoubleClick += chart_MouseDoubleClick;
Momentos = _momentos;
Series = _series;
}
public Chart chart { get; set; }
public string Titulo { get; set; }
public double Minimo { get; set; }
public double Maximo { get; set; }
public List<string> Momentos { get; set; }
public List<GraficoInterativoSerieModel> Series { get; set; }
public int Idx { get; set; }
private Chart Inicializar(Chart chart)
{
chart.Titles.Clear();
chart.Series.Clear();
chart.ChartAreas[0].CursorX.IsUserEnabled = true;
chart.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
chart.ChartAreas[0].CursorX.Interval = 0;
chart.ChartAreas[0].CursorY.IsUserEnabled = true;
chart.ChartAreas[0].CursorY.IsUserSelectionEnabled = true;
chart.ChartAreas[0].CursorY.Interval = 0;
chart.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
chart.ChartAreas[0].AxisY.ScaleView.Zoomable = true;
chart.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = true;
chart.ChartAreas[0].AxisY.ScrollBar.IsPositionedInside = true;
return chart;
}
private void chart_MouseClick(object sender, MouseEventArgs e)
{
var chart = sender as Chart;
if (chart == null) return;
var hit = chart.HitTest(e.X, e.Y);
if (hit.ChartElementType == ChartElementType.LegendItem)
{
var seriesName = hit.Series.Name;
var series = chart.Series[seriesName];
int idxSerie = chart.Series.IndexOf(series);
Series[idxSerie].Visivel = !Series[idxSerie].Visivel;
AtualizarDados(Idx);
}
}
private void chart_MouseDoubleClick(object sender, MouseEventArgs e)
{
var chart = sender as Chart;
if (chart != null)
{
chart.ChartAreas[0].AxisX.ScaleView.ZoomReset();
chart.ChartAreas[0].AxisY.ScaleView.ZoomReset();
}
}
public void AtualizarDados(int _idx)
{
Idx = _idx;
int startIdx, endIdx;
(startIdx, endIdx) = DefineInicioFimLogs(Idx, Momentos.Count());
Minimo = 0;
Maximo = 0;
chart = Inicializar(chart);
foreach (var Serie in Series)
{
var _valores = Serie.Valores.Skip(startIdx).Take(endIdx + 1).ToList();
PopularSerieGrafico(chart, Serie.Titulo, Momentos, _valores);
}
}
private (int, int) DefineInicioFimLogs(int idxLog, int total)
{
int qtdLogs = 11;
// Determina os limites do intervalo
int startIdx = Math.Max(idxLog - (qtdLogs / 2), 0);
int endIdx = Math.Min(idxLog + (qtdLogs / 2), total - 1);
// Ajusta startIdx e endIdx para garantir que temos qtdLogs itens se possível
if (endIdx - startIdx + 1 < qtdLogs)
{
if (startIdx == 0)
{
endIdx = Math.Min(startIdx + qtdLogs - 1, total - 1);
}
else if (endIdx == total - 1)
{
startIdx = Math.Max(endIdx - qtdLogs + 1, 0);
}
}
return (startIdx, endIdx);
}
private void PopularSerieGrafico(Chart chart, string Titulo, List<string> Momentos, List<double> Valores)
{
bool Visivel = Series[chart.Series.Count].Visivel;
Valores = Visivel ? Valores : Momentos.Select(x => 0.0).ToList();
var serie = new Series(Titulo);
serie.Points.DataBindXY(Momentos, Valores);
serie.ChartType = SeriesChartType.Line;
serie.BorderWidth = Visivel ? 1 : 0;
serie.BorderDashStyle = Visivel ? ChartDashStyle.Solid : ChartDashStyle.Dot;
chart.Series.Add(serie);
chart.Legends.Last().Docking = Docking.Right;
Minimo = Valores.Min() < Minimo ? Valores.Min() : Minimo;
Maximo = Valores.Min() > Maximo ? Valores.Max() : Maximo;
chart.ChartAreas[0].AxisY.Minimum = Minimo - 5;
chart.ChartAreas[0].AxisY.Maximum = Maximo + 5;
}
}
public class GraficoInterativoSerieModel
{
public string Titulo { get; set; }
public List<double> Valores { get; set; }
public bool Visivel { get; set; }
}
}

View File

@ -284,9 +284,9 @@ namespace AgroBase.Models
}
}
public void btnCarregar_Click(object sender, EventArgs e)
public void btnCarregar_Click(object sender, EventArgs e, string caminhoArquivo = "")
{
mapaService.CarregarMapa(MapasVariaveisModel.NomeArquivoMapaInterativo, MapasVariaveisModel.NomeArquivoMapaInterativoSaida);
mapaService.CarregarMapa(MapasVariaveisModel.NomeArquivoMapaInterativo, MapasVariaveisModel.NomeArquivoMapaInterativoSaida, caminhoArquivo);
if (mapaService.MapaUrl != "")
{

View File

@ -443,5 +443,4 @@ namespace AgroBase.Models.Modules
public Sentido Sentido { get; set; }
}
}

View File

@ -430,8 +430,6 @@ namespace AgroBase.Models
public int RPM_SP { get; set; } = 0;
public double Potencia { get; set; } = 0;
public double Potencia_SP { get; set; } = 0;
public int Rampa { get; set; } = 0;
public int Precisao { get; set; } = 0;
public Sentido Sentido_SP { get; set; } = Sentido.Parado;
public Sentido Sentido { get; set; } = Sentido.Parado;
public StatusMotor Aceleracao { get; set; } = StatusMotor.Estavel;

View File

@ -5,6 +5,7 @@ using Emgu.CV.Structure;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
@ -39,8 +40,11 @@ namespace AgroBase.Models.Modules
public List<SensorModel> Sensores { get; set; }
public List<SensorSinaleiroModel> Sinaleiros { get; set; }
public string CameraID_Caminho { get; set; }
public Bitmap ultimoFrameCaminho { get; set; }
public string CameraID_SoloE { get; set; }
public Bitmap ultimoFrameSoloE { get; set; }
public string CameraID_SoloD { get; set; }
public Bitmap ultimoFrameSoleD { get; set; }
public static SensoriamentoModel CarregarParametrosIniciais()

View File

@ -31,7 +31,6 @@ namespace AgroBase.Models.Operacoes
public OperacaoMapaGPSSensoriamentoModel Sensoriamento { get; set; } = new OperacaoMapaGPSSensoriamentoModel();
public OperacaoControleModel Controle { get; set; } = new OperacaoControleModel();
public OperacaoControleModel ControleAnterior { get; set; } = new OperacaoControleModel();
public List<OperacaoMapaGPSSensoriamentoModel> Logs { get; set; } = new List<OperacaoMapaGPSSensoriamentoModel>();
public List<StatusCarroMapa> StatusDentroRua = new List<StatusCarroMapa>()
{
StatusCarroMapa.EntrandoRua,
@ -178,44 +177,6 @@ namespace AgroBase.Models.Operacoes
}
public void SalvarLog(bool Fim)
{
Logs.Add(new OperacaoMapaGPSSensoriamentoModel()
{
Momento = DateTime.Now,
AtuacoesPorBico = new List<int>(Sensoriamento.AtuacoesPorBico),
ErvasNoRadar = Sensoriamento.ErvasNoRadar,
HerbicidaConsumido = Sensoriamento.HerbicidaConsumido,
HerbicidaPorErva = Sensoriamento.HerbicidaPorErva,
ProgressoTrajeto = Sensoriamento.ProgressoTrajeto,
ProgressoRua = Sensoriamento.ProgressoRua,
Status = ReferencialRuaGPS.StatusAtual,
Direcao = ReferencialRuaGPS.Direcao,
AnguloCarro = Variaveis.OperacaoEmAndamento.Sensoriamento.AnguloCarro,
AnguloRua = Variaveis.OperacaoEmAndamento.Mapa.AnguloCaminho,
DentroDaRua = ReferencialRuaGPS.DentroDaRua,
IdxPontoAproximadoRua = ReferencialRuaGPS.IdxPontoAproximadoRua,
IdxRuaAtual = Variaveis.OperacaoEmAndamento.Mapa.IdxRuaAtual,
AnguloDif = Sensoriamento.AnguloDif,
AnguloRuaCamera = Sensoriamento.AnguloRuaCamera,
});
if (!Directory.Exists(Variaveis.CaminhoOperacoes + Variaveis.OperacaoEmAndamento.ID))
{
Directory.CreateDirectory(Variaveis.CaminhoOperacoes + Variaveis.OperacaoEmAndamento.ID);
}
if (!File.Exists(Variaveis.CaminhoOperacoes + Variaveis.OperacaoEmAndamento.ID + "/logs.json"))
{
string jsonLog = JsonConvert.SerializeObject(Logs, Formatting.None);
File.WriteAllText(Variaveis.CaminhoOperacoes + Variaveis.OperacaoEmAndamento.ID + "/logs.json", jsonLog.Substring(0, jsonLog.Length - 1));
}
else
{
string jsonLog = JsonConvert.SerializeObject(Logs[Logs.Count - 1], Formatting.None);
File.AppendAllText(Variaveis.CaminhoOperacoes + Variaveis.OperacaoEmAndamento.ID + "/logs.json", "," + jsonLog + (Fim ? "]" : ""));
}
}
public void AtualizarControleAtuadores()
{
Controle.BicosAtuados = Variaveis.OperacaoEmAndamento.DispAtu.Dados.BicosPulverizadores;

View File

@ -1,4 +1,6 @@
using AgroBase.Comum;
using AForge.Video.DirectShow;
using AForge.Video;
using AgroBase.Comum;
using AgroBase.Forms;
using AgroBase.Forms.Operacoes;
using AgroBase.Models.Modules;
@ -15,6 +17,8 @@ using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using static AgroBase.Models.Enuns;
using CefSharp.DevTools.Page;
using System.Drawing;
namespace AgroBase.Models
{
@ -89,7 +93,7 @@ namespace AgroBase.Models
public DispositivosService<DirecionalModel> DispDir { get; set; }
public DispositivosService<AtuadorModel> DispAtu { get; set; }
public MapasModel Mapa { get; set; } = new MapasModel();
public OperacaoSensoriamentoModel Sensoriamento { get; set; }
public OperacaoSensoriamentoLogModel Sensoriamento { get; set; }
public Form frmOperacao { get; set; }
private StatusOperacao _EtapaAtual;
private StatusOperacao _EtapaAnteriorParada = StatusOperacao.Parado;
@ -235,7 +239,6 @@ namespace AgroBase.Models
public List<OperacaoModulosMandatoriosModel> ModulosMandatorios { get; set; } = new List<OperacaoModulosMandatoriosModel>();
public List<OperacaoParametrosMandatoriosModel> ParametrosMandatorios { get; set; } = new List<OperacaoParametrosMandatoriosModel>();
public List<OperacaoSensoriamentoModel> Logs { get; set; } = new List<OperacaoSensoriamentoModel>();
public List<GPSModel> GPSTrajetoria { get; set; } = new List<GPSModel>();
public List<List<GPSModel>> GPSTrajetoriaRua { get; set; } = new List<List<GPSModel>>();
public int QuantidadeCamerasSolo { get; set; } = 2;
@ -243,7 +246,7 @@ namespace AgroBase.Models
public CameraCaminhoModel CameraCaminho { get; set; }
public int TempoIniciarOperacao { get; set; } = 25;
public string ID { get; set; }
public Timer tmrLogs = new Timer() { Interval = 5000 };
public Timer tmrLogs = new Timer() { Interval = 1000 };
public static OperacaoModel CarregarParametrosOperacaoPadrao(ModoOperacao Modo)
@ -264,8 +267,7 @@ namespace AgroBase.Models
DispDir = DirConectado,
DispMov = MovConectado,
DispSen = SenConectado,
Logs = new List<OperacaoSensoriamentoModel>(),
Sensoriamento = new OperacaoSensoriamentoModel(),
Sensoriamento = new OperacaoSensoriamentoLogModel(),
};
@ -318,7 +320,6 @@ namespace AgroBase.Models
break;
case ModoOperacao.MapaGPS:
OperacaoCarregar.frmOperacao = (Form)Activator.CreateInstance(Variaveis.OperacaoEmAndamento.OpMapaGPS.frmOperacao.GetType());
OperacaoCarregar.Logs = new List<OperacaoSensoriamentoModel>();
OperacaoCarregar.OpMapaGPS.ControleAnterior = new OperacaoControleModel();
OperacaoCarregar.OpMapaGPS.Controle = new OperacaoControleModel()
{
@ -489,7 +490,6 @@ namespace AgroBase.Models
if (Modo == ModoOperacao.MapaGPS)
{
OpMapaGPS.Sensoriamento = new OperacaoMapaGPSSensoriamentoModel();
OpMapaGPS.Logs = new List<OperacaoMapaGPSSensoriamentoModel>();
if (DispAtu != null)
{
DispAtu.Dados.BombaPressurizadora.BombaAtuada = false;
@ -513,9 +513,9 @@ namespace AgroBase.Models
OpMapaGPS.Controle = controle;
}
}
Logs = new List<OperacaoSensoriamentoModel>();
GPSTrajetoria = new List<GPSModel>();
ID = (new DateTime(TimestampInicio)).ToString("dd_MM_yyyy_HH_mm_ss");
idxLog = 0;
Directory.CreateDirectory(Variaveis.CaminhoOperacoes + ID + "/");
@ -553,7 +553,7 @@ namespace AgroBase.Models
//tmrLogs.Stop();
//tmrParametrizacao.Start();
SalvarLog(true);
SalvarLogs(false);
GPSService.PararRecepcaoDados();
@ -608,59 +608,241 @@ namespace AgroBase.Models
}
}
public void SalvarLog(bool Fim)
{
if (!string.IsNullOrEmpty(ID))
{
Logs.Add(new OperacaoSensoriamentoModel()
{
Momento = DateTime.Now,
BateriaConsumida = Sensoriamento.BateriaConsumida,
DistanciaDireita = Sensoriamento.DistanciaDireita,
DistanciaEsquerda = Sensoriamento.DistanciaEsquerda,
DistanciaPercorrida = new List<double>(Sensoriamento.DistanciaPercorrida),
PorcentagemBateria = Sensoriamento.PorcentagemBateria,
AnguloCarroBussola = Sensoriamento.AnguloCarroBussola
});
if (!Directory.Exists(Variaveis.CaminhoOperacoes + ID))
{
Directory.CreateDirectory(Variaveis.CaminhoOperacoes + ID);
}
if (!File.Exists(Variaveis.CaminhoOperacoes + ID + "/logsGerais.json"))
{
string jsonLog = JsonConvert.SerializeObject(Logs, Formatting.None);
File.WriteAllText(Variaveis.CaminhoOperacoes + ID + "/logsGerais.json", jsonLog.Substring(0, jsonLog.Length - 1));
}
else
{
string jsonLog = JsonConvert.SerializeObject(Logs[Logs.Count - 1], Formatting.None);
File.AppendAllText(Variaveis.CaminhoOperacoes + ID + "/logsGerais.json", "," + jsonLog + (Fim ? "]" : ""));
}
#region REGISTRO DE LOGS
try
{
File.WriteAllText(Variaveis.CaminhoOperacoes + ID + "/trajetoria.json", JsonConvert.SerializeObject(GPSTrajetoria, Formatting.None));
}
catch
{
}
}
}
private int idxLog = 0;
private void TmrLogs_Tick(object sender, EventArgs e)
{
if (Iniciado)
{
SalvarLog(false);
SalvarLogs(false);
}
AtualizarSinaleiroOperacao();
}
public void SalvarLogs(bool Fim)
{
if (!string.IsNullOrEmpty(ID))
{
DateTime Agora = DateTime.Now;
OperacaoSensoriamentoLogModel logGeral = new OperacaoSensoriamentoLogModel()
{
Momento = Agora,
BateriaConsumida = Sensoriamento.BateriaConsumida,
DistanciaDireita = Sensoriamento.DistanciaDireita,
DistanciaEsquerda = Sensoriamento.DistanciaEsquerda,
DistanciaPercorrida = new List<double>(Sensoriamento.DistanciaPercorrida),
PorcentagemBateria = Sensoriamento.PorcentagemBateria,
AnguloCarroBussola = Sensoriamento.AnguloCarroBussola,
TempoMovimento = DispMov.Dados.TempoEmAtividade,
StatusOperacao = _EtapaAtual,
StatusCarro = OpMapaGPS.ReferencialRuaGPS.StatusAtual,
ErvasIdentificadas = OpMapaGPS.Sensoriamento.AtuacoesPorBico.Sum(),
ErvasNoRadar = Sensoriamento.ErvasNoRadar,
HerbicidaConsumido = Sensoriamento.HerbicidaConsumido,
HerbicidaPorErva = Sensoriamento.HerbicidaPorErva,
ProgressoTrajeto = Sensoriamento.ProgressoTrajeto,
ProgressoRua = Sensoriamento.ProgressoRua,
Direcao = OpMapaGPS.ReferencialRuaGPS.Direcao,
AnguloRua = Mapa.AnguloCaminho,
DentroDaRua = OpMapaGPS.ReferencialRuaGPS.DentroDaRua,
IdxPontoAproximadoRua = OpMapaGPS.ReferencialRuaGPS.IdxPontoAproximadoRua,
IdxRuaAtual = Mapa.IdxRuaAtual,
AnguloDif = Sensoriamento.AnguloDif,
};
SalvarLog("operacao", logGeral, Fim);
GPSModel logGps = new GPSModel()
{
Momento = Agora,
DataHora = GPSService.UltimaLeitura.DataHora,
Altitude = GPSService.UltimaLeitura.Altitude,
DirecaoTrecho = GPSService.UltimaLeitura.DirecaoTrecho,
idxRua = GPSService.UltimaLeitura.idxRua,
Latitude = GPSService.UltimaLeitura.Latitude,
Longitude = GPSService.UltimaLeitura.Longitude,
NumeroSatelites = GPSService.UltimaLeitura.NumeroSatelites,
Orientacao = GPSService.UltimaLeitura.Orientacao,
PrecisaoHorizontal = GPSService.UltimaLeitura.PrecisaoHorizontal,
Velocidade = GPSService.UltimaLeitura.Velocidade
};
SalvarLog(T_Code.Gps.ToString(), logGps, Fim);
DispDir.Dados.Motores.ForEach(Motor =>
{
DirSensoriamentoLogModel log = new DirSensoriamentoLogModel()
{
Momento = Agora,
ComponenteID = Motor.ID,
Inicializado = Motor.Inicializado,
Controlar = Motor.Controlar,
Angulo_SP = Motor.Angulo_SP,
Angulo = Motor.Angulo,
Sentido_SP = Motor.Sentido_SP,
Sentido = Motor.Sentido,
Velocidade = Motor.Velocidade,
};
SalvarLog(DispDir.Dispositivo.ToString(), log, false);
});
DispMov.Dados.Motores.ForEach(Motor =>
{
MovSensoriamentoLogModel log = new MovSensoriamentoLogModel()
{
Momento = Agora,
ComponenteID = Motor.ID,
Inicializado = Motor.Inicializado,
Alarme = Motor.Alarme,
Aceleracao = Motor.Aceleracao,
RPM_SP = Motor.RPM_SP,
RPM = Motor.RPM,
Corrente = Motor.Corrente,
Potencia = Motor.Potencia,
Potencia_Offset = Motor.RPM_Offset,
Temperatura = Motor.Temperatura,
Tensao = Motor.Tensao,
Sentido_SP = Motor.Sentido_SP,
Sentido = Motor.Sentido,
Velocidade = Motor.VelocidadeInstantanea,
};
SalvarLog(DispMov.Dispositivo.ToString(), log, false);
});
AtuSensoriamentoLogModel logAtu = new AtuSensoriamentoLogModel()
{
Momento = Agora,
MassaReservatorio = DispAtu.Dados.MassaReservatorio,
PercentualReservatorio = DispAtu.Dados.PercentualReservatorio,
VolumeReservatorio = DispAtu.Dados.VolumeReservatorio,
PressaoLinha_SP = DispAtu.Dados.BombaPressurizadora.PressaoSP,
PressaoLinha = DispAtu.Dados.PressaoLinha,
PotenciaBomba = DispAtu.Dados.BombaPressurizadora.Potencia,
VazaoFluxoMLpS = DispAtu.Dados.VazaoFluxoMLpS,
VolumeVazaoML = DispAtu.Dados.VolumeVazaoML,
QuantidadeBicos = DispAtu.Dados.QuantidadeBicos,
Bicos = DispAtu.Dados.BicosPulverizadores.Select(Bico => new AtuBicoSensoriamentoLogModel()
{
ID = Bico.ID,
Inicializado = Bico.Inicializado,
Comandar = Bico.Comandar,
Atuado = Bico.Atuado,
MediaNivelFluxo = Bico.MediaNivelFluxo,
Posicao = Bico.Posicao,
StatusBico = Bico.StatusBico,
Atuacoes = OpMapaGPS.Sensoriamento.AtuacoesPorBico.Count > Bico.Posicao ? OpMapaGPS.Sensoriamento.AtuacoesPorBico[Bico.Posicao] : 0,
}).ToList()
};
SalvarLog(DispAtu.Dispositivo.ToString(), logAtu, false);
SenSensoriamentoLogModel logSen = new SenSensoriamentoLogModel()
{
Momento = Agora,
Barramento3v3Corrente = DispSen.Dados.Sensores.FirstOrDefault(x => x.ID == "AB3V" && x.Inicializado)?.Leituras[0] ?? -1,
Barramento3v3Tensao = DispSen.Dados.Sensores.FirstOrDefault(x => x.ID == "AB3V" && x.Inicializado)?.Leituras[1] ?? -1,
Barramento5vCorrente = DispSen.Dados.Sensores.FirstOrDefault(x => x.ID == "AB5V" && x.Inicializado)?.Leituras[0] ?? -1,
Barramento5vTensao = DispSen.Dados.Sensores.FirstOrDefault(x => x.ID == "AB5V" && x.Inicializado)?.Leituras[1] ?? -1,
Barramento7v2Corrente = DispSen.Dados.Sensores.FirstOrDefault(x => x.ID == "AB7V2" && x.Inicializado)?.Leituras[0] ?? -1,
Barramento7v2Tensao = DispSen.Dados.Sensores.FirstOrDefault(x => x.ID == "AB7V2" && x.Inicializado)?.Leituras[1] ?? -1,
Barramento12vCorrente = DispSen.Dados.Sensores.FirstOrDefault(x => x.ID == "AB12V" && x.Inicializado)?.Leituras[0] ?? -1,
Barramento12vTensao = DispSen.Dados.Sensores.FirstOrDefault(x => x.ID == "AB12V" && x.Inicializado)?.Leituras[1] ?? -1,
OrientacaoMagnetica = DispSen.Dados.Sensores.FirstOrDefault(x => x.ID == "SMAG" && x.Inicializado)?.Leituras[0] ?? -1,
};
SalvarLog(DispSen.Dispositivo.ToString(), logSen, false);
PzmSensoriamentoLogModel logPzm = new PzmSensoriamentoLogModel()
{
Momento = Agora,
DataHora = PZEMService.UltimaLeitura.DataHora,
Tensao = PZEMService.UltimaLeitura.Tensao,
Corrente = PZEMService.UltimaLeitura.Corrente,
Potencia = PZEMService.UltimaLeitura.Potencia,
Energia = PZEMService.UltimaLeitura.Energia,
AlarmeTensaoMin = PZEMService.UltimaLeitura.AlarmeTensaoMin,
AlarmeTensaoMax = PZEMService.UltimaLeitura.AlarmeTensaoMax
};
SalvarLog(T_Code.Pzm.ToString(), logPzm, Fim);
SalvarLogCamera("caminho", DispSen.Dados.ultimoFrameCaminho);
SalvarLogCamera("soloE", DispSen.Dados.ultimoFrameSoloE);
SalvarLogCamera("soloD", DispSen.Dados.ultimoFrameSoleD);
string ArquivoOp = Variaveis.CaminhoOperacoes + ID + "/data.lgop";
if (!File.Exists(ArquivoOp))
{
var data = new OperacaoDadosModel()
{
id = ID,
operacao = "operacao",
gps = T_Code.Gps.ToString(),
dir = T_Code.Dir.ToString(),
mov = T_Code.Mov.ToString(),
atu = T_Code.Atu.ToString(),
sen = T_Code.Sen.ToString(),
pzm = T_Code.Pzm.ToString(),
caminho = "caminho",
soloE = "soloE",
soloD = "soloD"
};
File.WriteAllText(ArquivoOp, JsonConvert.SerializeObject(data));
}
idxLog++;
}
}
private void SalvarLog<T>(string Arquivo, T Objeto, bool Fim)
{
var Caminho = Variaveis.CaminhoOperacoes + ID;
if (!Directory.Exists(Caminho))
{
Directory.CreateDirectory(Caminho);
}
Caminho += "/" + Arquivo + ".json";
if (!File.Exists(Caminho))
{
string jsonLog = JsonConvert.SerializeObject(Objeto, Formatting.None);
File.WriteAllText(Caminho, "[" + jsonLog);
}
else
{
string jsonLog = JsonConvert.SerializeObject(Objeto, Formatting.None);
File.AppendAllText(Caminho, "," + jsonLog + (Fim ? "]" : ""));
}
}
private void SalvarLogCamera(string Camera, Bitmap frame)
{
var Caminho = Variaveis.CaminhoOperacoes + ID + "/" + Camera;
if (!Directory.Exists(Caminho))
{
Directory.CreateDirectory(Caminho);
}
Caminho += "/" + idxLog + ".jpg";
// Se o frame for nulo, cria um novo bitmap representando uma tela preta
if (frame == null)
{
frame = new Bitmap(1, 1);
using (Graphics g = Graphics.FromImage(frame))
{
g.Clear(Color.Black);
}
}
FuncoesGlobais.SalvarFrameJPEG(frame, Caminho);
}
#endregion
public void AtualizarSinaleiroOperacao()
{
if (DispSen != null && DispSen.Dados.Conectado)
@ -719,7 +901,66 @@ namespace AgroBase.Models
}
public class OperacaoSensoriamentoModel
public class OperacaoControleModel
{
public int RPM_Max { get; set; } = 45;
public int RPM_Min { get; set; } = 15;
public double Angulo_Max { get; set; } = 30;
public double Angulo_Min { get; set; } = -30;
public double VelocidadeMP { get; set; } = 50;
public double Angulo { get; set; } = 0;
public int RPM { get; set; } = 0;
public Direcao Direcao { get; set; } = Direcao.Parado;
public List<AtuadorBicoModel> BicosAtuados { get; set; } = new List<AtuadorBicoModel>();
public List<OperacaoControleTipoModel> TiposControle { get; set; }
public PIDModel PIDdirecional { get; set; } = new PIDModel();
}
public class OperacaoControleTipoModel
{
public T_Code Tipo { get; set; }
public int DelayEnvioComando { get; set; }
public DateTime UltimoComando { get; set; }
public List<string> Comandos { get; set; }
}
public class OperacaoModulosMandatoriosModel
{
public T_Code Dispositivo { get; set; }
public bool Mandatorio { get; set; }
public bool Utilizar { get; set; }
public bool Conectado { get; set; }
}
public class OperacaoParametrosMandatoriosModel
{
public ParametrosOperacao Parametro { get; set; }
public bool Mandatorio { get; set; }
public bool Utilizar { get; set; }
public bool Pronto { get; set; }
}
public class OperacaoDadosModel
{
public string id { get; set; }
public string operacao { get; set; }
public string gps { get; set; }
public string dir { get; set; }
public string mov { get; set; }
public string atu { get; set; }
public string sen { get; set; }
public string pzm { get; set; }
public string caminho { get; set; }
public string soloE { get; set; }
public string soloD { get; set; }
}
public class OperacaoSensoriamentoLogModel
{
public DateTime Momento { get; set; }
public double VelocidadeMedia
@ -783,52 +1024,109 @@ namespace AgroBase.Models
}
}
public SonarModel SonarFrontal { get; set; }
public double TempoMovimento { get;set; }
public StatusOperacao StatusOperacao { get; set; }
public StatusCarroMapa StatusCarro { get; set; }
public int ErvasNoRadar { get; set; } = 0;
public double HerbicidaConsumido { get; set; } = 0;
public double HerbicidaPorErva { get; set; } = 0;
public int ErvasIdentificadas { get; set; } = 0;
public double ProgressoTrajeto { get; set; } = 0;
public double ProgressoRua { get; set; } = 0;
public double AnguloRua { get; set; } = 0;
public double AnguloRuaCamera { get; set; } = 0;
public double AnguloDif { get; set; } = 0;
public DirecaoCarroRua Direcao { get; set; } = DirecaoCarroRua.Parado;
public bool DentroDaRua { get; set; } = false;
public int IdxPontoAproximadoRua { get; set; } = 0;
public int IdxRuaAtual { get; set; } = 0;
}
public class OperacaoControleModel
public class PzmSensoriamentoLogModel
{
public int RPM_Max { get; set; } = 45;
public int RPM_Min { get; set; } = 15;
public double Angulo_Max { get; set; } = 30;
public double Angulo_Min { get; set; } = -30;
public double VelocidadeMP { get; set; } = 50;
public double Angulo { get; set; } = 0;
public int RPM { get; set; } = 0;
public Direcao Direcao { get; set; } = Direcao.Parado;
public List<AtuadorBicoModel> BicosAtuados { get; set; } = new List<AtuadorBicoModel>();
public List<OperacaoControleTipoModel> TiposControle { get; set; }
public PIDModel PIDdirecional { get; set; } = new PIDModel();
public DateTime Momento { get; set; }
public DateTime DataHora { get; set; }
public double Tensao { get; set; }
public double Corrente { get; set; }
public double Potencia { get; set; }
public double Energia { get; set; }
public bool AlarmeTensaoMax { get; set; }
public bool AlarmeTensaoMin { get; set; }
}
public class OperacaoControleTipoModel
public class DirSensoriamentoLogModel
{
public T_Code Tipo { get; set; }
public int DelayEnvioComando { get; set; }
public DateTime UltimoComando { get; set; }
public List<string> Comandos { get; set; }
public DateTime Momento { get; set; }
public string ComponenteID { get; set; }
public bool Inicializado { get; set; }
public bool Controlar { get; set; }
public double Angulo_SP { get; set; }
public double Angulo { get; set; }
public Sentido Sentido_SP { get; set; }
public Sentido Sentido { get; set; }
public double Velocidade { get; set; }
}
public class OperacaoModulosMandatoriosModel
public class MovSensoriamentoLogModel
{
public T_Code Dispositivo { get; set; }
public bool Mandatorio { get; set; }
public bool Utilizar { get; set; }
public bool Conectado { get; set; }
public DateTime Momento { get; set; }
public string ComponenteID { get; set; }
public bool Inicializado { get; set; }
public bool Alarme { get; set; }
public double RPM_SP { get; set; }
public double RPM { get; set; }
public double Velocidade { get; set; }
public double Potencia { get; set; }
public double Potencia_Offset { get; set; }
public Sentido Sentido_SP { get; set; }
public Sentido Sentido { get; set; }
public double Temperatura { get; set; }
public StatusMotor Aceleracao { get; set; } = StatusMotor.Estavel;
public double Corrente { get; set; }
public double Tensao { get; set; }
}
public class OperacaoParametrosMandatoriosModel
public class AtuSensoriamentoLogModel
{
public ParametrosOperacao Parametro { get; set; }
public bool Mandatorio { get; set; }
public bool Utilizar { get; set; }
public bool Pronto { get; set; }
public DateTime Momento { get; set; }
public double MassaReservatorio { get; set; }
public double PressaoLinha_SP { get; set; }
public double PressaoLinha { get; set; }
public double VolumeReservatorio { get; set; }
public double PercentualReservatorio { get; set; }
public double PotenciaBomba { get; set; }
public double VazaoFluxoMLpS { get; set; }
public double VolumeVazaoML { get; set; }
public int QuantidadeBicos { get; set; }
public List<AtuBicoSensoriamentoLogModel> Bicos { get; set; }
}
public class AtuBicoSensoriamentoLogModel
{
public string ID { get; set; }
public int Posicao { get; set; }
public bool Atuado { get; set; }
public bool Comandar { get; set; }
public bool Inicializado { get; set; }
public bool StatusBico { get; set; }
public double MediaNivelFluxo { get; set; }
public int Atuacoes { get; set; }
}
public class SenSensoriamentoLogModel
{
public DateTime Momento { get; set; }
public double Barramento3v3Tensao { get; set; }
public double Barramento3v3Corrente { get; set; }
public double Barramento5vTensao { get; set; }
public double Barramento5vCorrente { get; set; }
public double Barramento7v2Tensao { get; set; }
public double Barramento7v2Corrente { get; set; }
public double Barramento12vTensao { get; set; }
public double Barramento12vCorrente { get; set; }
public double OrientacaoMagnetica { get; set; }
}
}

View File

@ -8,6 +8,7 @@ namespace AgroBase.Models
{
public class PZEMModel
{
public DateTime DataHora { get; set; }
public double Tensao { get; set; }
public double Corrente { get; set; }
public double Potencia { get; set; }

View File

@ -3,11 +3,14 @@ using AgroBase.Models.Modules;
using AgroBase.Services;
using System;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static AgroBase.Models.Enuns;
using System.Drawing.Drawing2D;
namespace AgroBase.Models
{
@ -175,6 +178,138 @@ namespace AgroBase.Models
return altura;
}
// Método para salvar o frame atual em JPEG
public static void SalvarFrameJPEG(Bitmap frame, string caminhoArquivo)
{
// Define as opções de codificação JPEG (qualidade de 90%)
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 90L);
// Salva o bitmap em formato JPEG
ImageCodecInfo jpegCodec = GetEncoderInfo(ImageFormat.Jpeg);
frame.Save(caminhoArquivo, jpegCodec, encoderParams);
}
// Método auxiliar para obter informações do codec JPEG
private static ImageCodecInfo GetEncoderInfo(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
foreach (ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
public static Image EspelharImagemHorizontalmente(Image img)
{
// Cria uma cópia da imagem do PictureBox
Bitmap originalImage = new Bitmap(img);
// Cria uma nova imagem para conter a imagem espelhada
Bitmap mirroredImage = new Bitmap(originalImage.Width, originalImage.Height);
// Cria uma matriz de transformação para espelhar horizontalmente
Matrix matrix = new Matrix();
matrix.Scale(-1, 1);
// Cria um objeto Graphics para desenhar a imagem espelhada
using (Graphics g = Graphics.FromImage(mirroredImage))
{
// Espelha a imagem original na nova imagem
g.Transform = matrix;
g.DrawImage(originalImage, new Rectangle(-originalImage.Width, 0, originalImage.Width, originalImage.Height));
}
return mirroredImage;
}
// Método para rotacionar a imagem
public static Image RotacionarImagem(Image img, double rotationAngle)
{
// Calcula as novas dimensões do bitmap com base na rotação
double angleRad = rotationAngle / 180.0 * Math.PI;
double sin = Math.Abs(Math.Sin(angleRad));
double cos = Math.Abs(Math.Cos(angleRad));
int newWidth = (int)(img.Width * cos + img.Height * sin);
int newHeight = (int)(img.Width * sin + img.Height * cos);
// Cria um novo bitmap com as dimensões calculadas
Bitmap bmp = new Bitmap(newWidth, newHeight);
using (Graphics gfx = Graphics.FromImage(bmp))
{
gfx.Clear(Color.Transparent); // Define a cor de fundo como transparente
gfx.TranslateTransform(newWidth / 2f, newHeight / 2f); // Move o ponto de rotação para o centro do novo bitmap
gfx.RotateTransform((float)rotationAngle); // Aplica a rotação
gfx.TranslateTransform(-img.Width / 2f, -img.Height / 2f); // Move a imagem de volta para o centro
gfx.InterpolationMode = InterpolationMode.HighQualityBicubic;
gfx.DrawImage(img, 0, 0, img.Width, img.Height); // Desenha a imagem original no bitmap
}
return bmp;
}
public static void DesenharInclinacao(Panel pnlBussola, PaintEventArgs e, float anguloInclinacao, float anguloSub)
{
if (!(anguloInclinacao >= 0 || anguloInclinacao <= 0))
{
anguloInclinacao = 0;
}
Graphics g = e.Graphics;
// Desenha o círculo da bússola
int diameter = Math.Min(pnlBussola.Width - 1, pnlBussola.Height - 1);
Point centro = new Point((pnlBussola.Width - 1) / 2, (pnlBussola.Height - 1) / 2);
//g.DrawEllipse(Pens.Black, centro.X - diameter / 2, centro.Y - diameter / 2, diameter, diameter);
// Escreve o ângulo no centro do círculo
string anguloTexto = $"{anguloInclinacao.ToString("0")}°";
Font fonteAngulo = new Font("Arial", 7); // Ajuste o tamanho da fonte conforme necessário
SizeF textSize = e.Graphics.MeasureString(anguloTexto, fonteAngulo);
// Calcula a posição para o texto ser centralizado no círculo
float textX = 0;
float textY = 0;
// Define a cor do texto
Brush textBrush = Brushes.Black;
// Desenha o texto no Graphics do painel
g.DrawString(anguloTexto, fonteAngulo, textBrush, textX, textY);
// A linha será desenhada do centro do círculo
PointF pontoCentral = new PointF(centro.X, centro.Y);
// O comprimento da linha será metade do diâmetro do círculo (raio)
float comprimentoLinha = diameter / 3;
// Ajustar o ângulo para que 0 graus esteja para cima e aumente no sentido horário
//float anguloRadianos = (anguloInclinacao - 90) * (float)(Math.PI / 180.0);
float anguloRadianos = (anguloInclinacao - anguloSub) * (float)(Math.PI / 180.0);
// Calcular o ponto final da linha baseado no ângulo de inclinação
PointF pontoFinal = new PointF(
pontoCentral.X + comprimentoLinha * (float)Math.Cos(anguloRadianos),
pontoCentral.Y + comprimentoLinha * (float)Math.Sin(anguloRadianos)
);
// Desenhar a linha de inclinação
g.DrawLine(Pens.Red, pontoCentral, pontoFinal);
// Opcional: Desenhar uma ponta de seta na linha para indicar direção
using (AdjustableArrowCap bigArrow = new AdjustableArrowCap(4, 4))
{
using (Pen pen = new Pen(Color.Red, 2))
{
pen.CustomEndCap = bigArrow;
g.DrawLine(pen, pontoCentral, pontoFinal);
}
}
}
}

View File

@ -110,6 +110,16 @@ namespace AgroBase.Properties {
}
}
/// <summary>
/// Consulta um recurso localizado do tipo System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap roda_superior {
get {
object obj = ResourceManager.GetObject("roda_superior", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Consulta um recurso localizado do tipo System.Drawing.Bitmap.
/// </summary>

View File

@ -133,6 +133,9 @@
<data name="robo_superior" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Imagens\robo_superior.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="roda_superior" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Imagens\roda_superior.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="rosa_dos_ventos" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Imagens\rosa_dos_ventos.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>

View File

@ -494,15 +494,7 @@ namespace AgroBase.Services
public static void AtualizarCoordenadasGPS()
{
var Coordenadas = new
{
latitude = UltimaLeitura.Latitude,
longitude = UltimaLeitura.Longitude
};
Variaveis.MqttService.PublishAsync(
Variaveis.MqttService.Topicos.First(x => x.Topico == MapasVariaveisModel.TopicoCoordenadasGPS),
JsonConvert.SerializeObject(Coordenadas)
).ConfigureAwait(false);
EnviarCoordenadasParaMapa(UltimaLeitura.Latitude, UltimaLeitura.Longitude, UltimaLeitura.Orientacao);
Variaveis.OperacaoEmAndamento.GPSTrajetoria.Add(new GPSModel()
@ -536,6 +528,20 @@ namespace AgroBase.Services
}
}
public static void EnviarCoordenadasParaMapa(double Latitude, double Longitude, double Orientacao)
{
var Coordenadas = new
{
latitude = Latitude,
longitude = Longitude,
orientacao = Orientacao
};
Variaveis.MqttService.PublishAsync(
Variaveis.MqttService.Topicos.First(x => x.Topico == MapasVariaveisModel.TopicoCoordenadasGPS),
JsonConvert.SerializeObject(Coordenadas)
).ConfigureAwait(false);
}
public static void AtualizarTrajetoriaDinamica()
{
var Trajetoria = Variaveis.OperacaoEmAndamento.Mapa.TrajetoriaDinamica.Select(x => new

View File

@ -36,7 +36,7 @@ namespace AgroBase.Services
public bool Carregado = false;
public void CarregarMapa(string nomeArquivoMapa, string nomeArquivoSaida)
public void CarregarMapa(string nomeArquivoMapa, string nomeArquivoSaida, string caminhoArquivo = "")
{
NomeArquivoMapa = nomeArquivoMapa;
ArquivoSaida = nomeArquivoSaida;
@ -48,11 +48,15 @@ namespace AgroBase.Services
Title = "Selecionar arquivo de mapa"
};
if (opfMapa.ShowDialog() == DialogResult.OK)
if (caminhoArquivo != "" || opfMapa.ShowDialog() == DialogResult.OK)
{
string extensao = "." + opfMapa.FileName.Split('.')[opfMapa.FileName.Split('.').Length - 1];
NomeArquivos = opfMapa.FileName.Split('\\')[opfMapa.FileName.Split('\\').Length - 1].Replace(extensao, "");
CaminhoMapa = opfMapa.FileName.Replace(NomeArquivos, "").Replace(extensao, "").Replace("\\", "/");
if (caminhoArquivo == "")
{
caminhoArquivo = opfMapa.FileName;
}
string extensao = "." + caminhoArquivo.Split('.')[caminhoArquivo.Split('.').Length - 1];
NomeArquivos = caminhoArquivo.Split('\\')[caminhoArquivo.Split('\\').Length - 1].Replace(extensao, "");
CaminhoMapa = caminhoArquivo.Replace(NomeArquivos, "").Replace(extensao, "").Replace("\\", "/");
pythonProcess = PythonService.RunScript(PythonService.ScriptMapConverter, new string[]
{
@ -63,7 +67,7 @@ namespace AgroBase.Services
MapasVariaveisModel.TopicoCoordenadasGPS,
MapasVariaveisModel.TopicoSelecaoRuasMapa,
MapasVariaveisModel.TopicoTrajetoriaDinamica,
opfMapa.FileName.Split('.')[1] == "json" ? "1" : "0"
caminhoArquivo.Split('.')[1] == "json" ? "1" : "0"
});
MapaUrl = new Uri(CaminhoSaida + NomeArquivoMapa).AbsoluteUri;

View File

@ -278,7 +278,10 @@ namespace AgroBase.Services
int numBytes = resposta[2];
if (numBytes == 16) // Se o número de bytes de dados for 16
{
PZEMModel modelo = new PZEMModel();
PZEMModel modelo = new PZEMModel()
{
DataHora = DateTime.Now,
};
var tensao_raw = "0x" + resposta[3].ToString("X") + resposta[4].ToString("X");
modelo.Tensao = Convert.ToInt32(tensao_raw, 16) * 0.02; // 0.01;
var corrente_raw = "0x" + resposta[5].ToString("X") + resposta[6].ToString("X");

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"Id":"1517","Name":"16_05_2024_14_59_25","Length":14.899224374909538,"Dist1":0.0,"Dist2":0.0},"geometry":{"id":null,"type":"LineString","coordinates":[[-47.381473333333332,-22.215007833333335],[-47.38148833333333,-22.2150205],[-47.381501833333331,-22.215029],[-47.381497333333336,-22.215033833333333],[-47.381534,-22.215062666666668],[-47.381526833333332,-22.215055833333334],[-47.38153066666667,-22.215061833333333],[-47.3815335,-22.215054333333335],[-47.381534666666667,-22.215051833333334],[-47.381556833333335,-22.215059333333333],[-47.381556833333335,-22.215059333333333]]}}]}

View File

@ -1 +0,0 @@
[{"Momento":"2024-05-06T10:49:39.4832413-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":-226.83333333333334,"BateriaConsumida":0.0,"DistanciaPercorrida":[],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":0.0,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-06T10:49:44.4983744-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":-227.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[0.0],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":0.0,"AnguloCarroBussola":0.0,"AnguloCarro":0.0,"SonarFrontal":null},{"Momento":"2024-05-06T10:49:49.4983432-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":-227.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[0.0],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":0.0,"AnguloCarroBussola":0.0,"AnguloCarro":0.0,"SonarFrontal":null},{"Momento":"2024-05-06T10:49:54.1155221-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":-227.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[0.0],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":0.0,"AnguloCarroBussola":0.0,"AnguloCarro":0.0,"SonarFrontal":null}]

View File

@ -1 +0,0 @@
[{"Latitude":-22.213107666666666,"Longitude":-47.381568333333334,"DataHora":"2024-05-06T10:49:30","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"idxRua":-1,"DirecaoTrecho":0,"Passado":false},{"Latitude":-22.213107666666666,"Longitude":-47.381568333333334,"DataHora":"2024-05-06T10:49:31","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"idxRua":-1,"DirecaoTrecho":0,"Passado":false},{"Latitude":-22.213107666666666,"Longitude":-47.381568333333334,"DataHora":"2024-05-06T10:49:32","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"idxRua":-1,"DirecaoTrecho":0,"Passado":false},{"Latitude":-22.213107666666666,"Longitude":-47.381568333333334,"DataHora":"2024-05-06T10:49:33","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"idxRua":-1,"DirecaoTrecho":0,"Passado":false},{"Latitude":-22.213107666666666,"Longitude":-47.381568333333334,"DataHora":"2024-05-06T10:49:34","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"idxRua":-1,"DirecaoTrecho":0,"Passado":false},{"Latitude":-22.213107666666666,"Longitude":-47.381568333333334,"DataHora":"2024-05-06T10:49:35","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"idxRua":-1,"DirecaoTrecho":0,"Passado":false},{"Latitude":-22.213107666666666,"Longitude":-47.381568333333334,"DataHora":"2024-05-06T10:49:36","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"idxRua":-1,"DirecaoTrecho":0,"Passado":false},{"Latitude":-22.213107666666666,"Longitude":-47.381568333333334,"DataHora":"2024-05-06T10:49:37","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"idxRua":-1,"DirecaoTrecho":0,"Passado":false},{"Latitude":-22.213107666666666,"Longitude":-47.381568333333334,"DataHora":"2024-05-06T10:49:38","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"idxRua":-1,"DirecaoTrecho":0,"Passado":false},{"Latitude":-22.213107666666666,"Longitude":-47.381568333333334,"DataHora":"2024-05-06T10:49:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"idxRua":-1,"DirecaoTrecho":0,"Passado":false}]

View File

@ -1 +0,0 @@
[{"Momento":"2024-05-06T10:50:24.9175688-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":-227.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":0.0,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null}

View File

@ -1 +0,0 @@
[{"Momento":"2024-05-06T10:50:31.0242704-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":-227.16666666666666,"BateriaConsumida":0.0,"DistanciaPercorrida":[],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":0.0,"AnguloCarroBussola":0.0,"AnguloCarro":0.0,"SonarFrontal":null},{"Momento":"2024-05-06T10:50:34.8649539-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":-227.66666666666666,"BateriaConsumida":0.0,"DistanciaPercorrida":[],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":0.0,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null}]

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 +0,0 @@
[{"Momento":"2024-05-07T09:52:51.2146126-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":87.833333333333329,"BateriaConsumida":0.0,"DistanciaPercorrida":[1.6853113469813925],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":0.0,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T09:53:00.969167-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":87.833333333333329,"BateriaConsumida":0.0,"DistanciaPercorrida":[1.6853113469813925],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":229.96541901035945,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null}]

View File

@ -1 +0,0 @@
[{"Latitude":-22.213093666666666,"Longitude":-47.3815025,"DataHora":"2024-05-07T09:39:38","Altitude":627.0,"Velocidade":1.911264,"NumeroSatelites":8,"PrecisaoHorizontal":1.06,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.2130975,"Longitude":-47.381505666666669,"DataHora":"2024-05-07T09:39:39","Altitude":627.0,"Velocidade":2.16684,"NumeroSatelites":7,"PrecisaoHorizontal":2.27,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213100833333332,"Longitude":-47.381509,"DataHora":"2024-05-07T09:39:40","Altitude":626.8,"Velocidade":1.542716,"NumeroSatelites":7,"PrecisaoHorizontal":2.27,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213102833333334,"Longitude":-47.381509833333332,"DataHora":"2024-05-07T09:39:41","Altitude":626.9,"Velocidade":0.883404,"NumeroSatelites":7,"PrecisaoHorizontal":2.27,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213105166666665,"Longitude":-47.381512833333332,"DataHora":"2024-05-07T09:39:42","Altitude":627.0,"Velocidade":1.409372,"NumeroSatelites":7,"PrecisaoHorizontal":2.27,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0}]

View File

@ -1 +0,0 @@
[{"Momento":"2024-05-07T09:53:27.6690689-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":88.000000000000014,"BateriaConsumida":0.0,"DistanciaPercorrida":[],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":229.96541901035945,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null}

View File

@ -1 +0,0 @@
[{"Momento":"2024-05-07T09:57:45.0236065-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":85.666666666666671,"BateriaConsumida":0.0,"DistanciaPercorrida":[0.62526653144541955],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":81.467945501200347,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T09:57:49.0756622-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":85.333333333333357,"BateriaConsumida":0.0,"DistanciaPercorrida":[1.5628748431793145],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":277.68961334238628,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T09:57:54.0471488-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":85.333333333333357,"BateriaConsumida":0.0,"DistanciaPercorrida":[2.3266873663668832],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":72.513053899569,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T09:57:59.067028-03:00","VelocidadeMedia":0.0025,"PorcentagemBateria":85.499999999999986,"BateriaConsumida":0.0,"DistanciaPercorrida":[3.4918437518891166],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":93.862198705988874,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T09:58:53.125304-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":84.833333333333329,"BateriaConsumida":0.0,"DistanciaPercorrida":[4.2398822531054021],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":76.96759051894071,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T09:58:54.117946-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":84.833333333333329,"BateriaConsumida":0.0,"DistanciaPercorrida":[4.2398822531054021],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":76.96759051894071,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T09:58:59.0462561-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":85.000000000000014,"BateriaConsumida":0.0,"DistanciaPercorrida":[5.06465528160699],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":65.768965591740084,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T09:59:04.0576249-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":85.166666666666657,"BateriaConsumida":0.0,"DistanciaPercorrida":[6.6995914228318965],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":298.37272098328873,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T09:59:09.0574526-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":84.833333333333329,"BateriaConsumida":0.0,"DistanciaPercorrida":[7.83589682505383],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":72.045100003551966,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T09:59:14.0478768-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":85.166666666666657,"BateriaConsumida":0.0,"DistanciaPercorrida":[10.070815275648767],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":75.3866345233825,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T09:59:19.0658316-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":84.6666666666667,"BateriaConsumida":0.0,"DistanciaPercorrida":[12.24472030306932],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":73.838385174649375,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T09:59:24.0569853-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":85.000000000000014,"BateriaConsumida":0.0,"DistanciaPercorrida":[13.226341437661704],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":42.793023212049434,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T09:59:28.4125265-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":85.166666666666657,"BateriaConsumida":0.0,"DistanciaPercorrida":[13.440851127670419],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":42.793024755324836,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null}],{"Momento":"2024-05-07T09:59:38.7013939-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":85.000000000000014,"BateriaConsumida":0.0,"DistanciaPercorrida":[13.440851127670419],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":42.793024755324836,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null}]

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
[{"Momento":"2024-05-07T10:02:45.703269-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":70.198321038788436,"AnguloCarroBussola":0.0,"AnguloCarro":70.198321038788436,"SonarFrontal":null},{"Momento":"2024-05-07T10:02:50.6463898-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[0.96761566228770768],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":137.20698509575618,"AnguloCarroBussola":0.0,"AnguloCarro":137.20698509575618,"SonarFrontal":null},{"Momento":"2024-05-07T10:02:55.7457575-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[2.6799472775081847],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":221.57973754411964,"AnguloCarroBussola":0.0,"AnguloCarro":221.57973754411964,"SonarFrontal":null},{"Momento":"2024-05-07T10:03:00.7233267-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[7.139992887194702],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":226.02195642068034,"AnguloCarroBussola":0.0,"AnguloCarro":226.02195642068034,"SonarFrontal":null},{"Momento":"2024-05-07T10:03:04.5337717-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[9.1534782519544127],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":269.99999983127896,"AnguloCarroBussola":0.0,"AnguloCarro":269.99999983127896,"SonarFrontal":null}]

View File

@ -1 +0,0 @@
[{"Latitude":-22.2131595,"Longitude":-47.38154766666667,"DataHora":"2024-05-07T10:02:26","Altitude":619.0,"Velocidade":0.16853200000000002,"NumeroSatelites":6,"PrecisaoHorizontal":1.44,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213163,"Longitude":-47.381549833333331,"DataHora":"2024-05-07T10:02:27","Altitude":619.3,"Velocidade":0.192608,"NumeroSatelites":6,"PrecisaoHorizontal":1.44,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213166166666667,"Longitude":-47.3815515,"DataHora":"2024-05-07T10:02:28","Altitude":619.9,"Velocidade":0.272244,"NumeroSatelites":6,"PrecisaoHorizontal":1.44,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213167,"Longitude":-47.381550666666669,"DataHora":"2024-05-07T10:02:29","Altitude":620.3,"Velocidade":0.387068,"NumeroSatelites":6,"PrecisaoHorizontal":1.44,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213166,"Longitude":-47.381548833333333,"DataHora":"2024-05-07T10:02:30","Altitude":620.6,"Velocidade":0.70931600000000006,"NumeroSatelites":6,"PrecisaoHorizontal":1.44,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213167833333333,"Longitude":-47.381551,"DataHora":"2024-05-07T10:02:31","Altitude":620.6,"Velocidade":0.49818800000000008,"NumeroSatelites":7,"PrecisaoHorizontal":1.29,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213175833333334,"Longitude":-47.381558666666663,"DataHora":"2024-05-07T10:02:32","Altitude":621.8,"Velocidade":0.533376,"NumeroSatelites":8,"PrecisaoHorizontal":1.11,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213184833333333,"Longitude":-47.381569666666664,"DataHora":"2024-05-07T10:02:33","Altitude":623.4,"Velocidade":0.692648,"NumeroSatelites":7,"PrecisaoHorizontal":1.11,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213190833333332,"Longitude":-47.381578833333336,"DataHora":"2024-05-07T10:02:34","Altitude":625.9,"Velocidade":1.113052,"NumeroSatelites":6,"PrecisaoHorizontal":3.03,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213202,"Longitude":-47.381591333333333,"DataHora":"2024-05-07T10:02:35","Altitude":628.7,"Velocidade":1.011192,"NumeroSatelites":5,"PrecisaoHorizontal":3.56,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213212833333333,"Longitude":-47.381605,"DataHora":"2024-05-07T10:02:36","Altitude":631.2,"Velocidade":1.5279,"NumeroSatelites":5,"PrecisaoHorizontal":3.56,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213213,"Longitude":-47.381605333333333,"DataHora":"2024-05-07T10:02:37","Altitude":631.1,"Velocidade":1.153796,"NumeroSatelites":4,"PrecisaoHorizontal":4.79,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213213,"Longitude":-47.3816065,"DataHora":"2024-05-07T10:02:38","Altitude":631.2,"Velocidade":0.80191600000000007,"NumeroSatelites":4,"PrecisaoHorizontal":4.78,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0}]

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 +0,0 @@
[{"Momento":"2024-05-07T13:20:07.4129019-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":77.833333333333357,"BateriaConsumida":0.0,"DistanciaPercorrida":[0.037106496837406293],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":0.0,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T13:20:12.4358655-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":76.166666666666671,"BateriaConsumida":0.0,"DistanciaPercorrida":[0.44768460862775217],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":328.31755309326104,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T13:20:17.4117264-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":76.833333333333329,"BateriaConsumida":0.0,"DistanciaPercorrida":[0.993199423649285],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":244.70587617972086,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null}

View File

@ -1 +0,0 @@
[{"Latitude":-22.213100333333333,"Longitude":-47.381521,"DataHora":"2024-05-07T13:19:57","Altitude":623.9,"Velocidade":0.198164,"NumeroSatelites":10,"PrecisaoHorizontal":0.94,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.2131,"Longitude":-47.381521,"DataHora":"2024-05-07T13:19:58","Altitude":624.1,"Velocidade":0.061116000000000004,"NumeroSatelites":8,"PrecisaoHorizontal":1.44,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213100666666666,"Longitude":-47.38152216666667,"DataHora":"2024-05-07T13:19:59","Altitude":623.9,"Velocidade":0.16853200000000002,"NumeroSatelites":8,"PrecisaoHorizontal":1.32,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213101,"Longitude":-47.381523166666668,"DataHora":"2024-05-07T13:20:00","Altitude":623.8,"Velocidade":0.14075200000000002,"NumeroSatelites":8,"PrecisaoHorizontal":0.94,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213100166666667,"Longitude":-47.381523333333334,"DataHora":"2024-05-07T13:20:01","Altitude":624.0,"Velocidade":0.092600000000000016,"NumeroSatelites":8,"PrecisaoHorizontal":0.94,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213099666666668,"Longitude":-47.381523666666666,"DataHora":"2024-05-07T13:20:03","Altitude":624.2,"Velocidade":0.24076000000000003,"NumeroSatelites":9,"PrecisaoHorizontal":0.94,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.2131,"Longitude":-47.381523666666666,"DataHora":"2024-05-07T13:20:04","Altitude":624.1,"Velocidade":0.17594,"NumeroSatelites":8,"PrecisaoHorizontal":0.94,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213101666666667,"Longitude":-47.3815245,"DataHora":"2024-05-07T13:20:06","Altitude":623.7,"Velocidade":0.12593600000000002,"NumeroSatelites":8,"PrecisaoHorizontal":0.94,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213102833333334,"Longitude":-47.381527166666665,"DataHora":"2024-05-07T13:20:08","Altitude":623.1,"Velocidade":0.070376000000000008,"NumeroSatelites":9,"PrecisaoHorizontal":0.91,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0}]

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 +0,0 @@
[{"Momento":"2024-05-07T13:39:21.3609736-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[0.16523405790633539],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":230.98823394669722,"AnguloCarroBussola":0.0,"AnguloCarro":0.0,"SonarFrontal":null},{"Momento":"2024-05-07T13:39:26.360952-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[0.47523659927015072],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":137.20697501380511,"AnguloCarroBussola":0.0,"AnguloCarro":0.0,"SonarFrontal":null},{"Momento":"2024-05-07T13:39:31.3619046-03:00","VelocidadeMedia":0.0375,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[0.93816591592308374],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":317.20697450988655,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T13:39:36.3668038-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[1.1231264516820827],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":270.0,"AnguloCarroBussola":0.0,"AnguloCarro":0.0,"SonarFrontal":null},{"Momento":"2024-05-07T13:39:41.3617011-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[1.4829798238587673],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":214.7737182561736,"AnguloCarroBussola":0.0,"AnguloCarro":0.0,"SonarFrontal":null},{"Momento":"2024-05-07T13:39:46.3756061-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[1.9618219453804517],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":327.34307535996027,"AnguloCarroBussola":0.0,"AnguloCarro":0.0,"SonarFrontal":null},{"Momento":"2024-05-07T13:39:51.3766008-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[2.2964114841661418],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":129.01176689735297,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T13:39:56.3755229-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[2.8902625771547421],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":13.03142772512615,"AnguloCarroBussola":0.0,"AnguloCarro":0.0,"SonarFrontal":null},{"Momento":"2024-05-07T13:40:01.3584829-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[3.6765139885636278],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":118.37271722506841,"AnguloCarroBussola":0.0,"AnguloCarro":0.0,"SonarFrontal":null},{"Momento":"2024-05-07T13:40:02.2661376-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[3.7526887469163608],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":13.03142700551507,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null}]

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

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 +0,0 @@
[{"Momento":"2024-05-07T14:12:41.686261-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[0.10113346384150065],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":42.793036321239981,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:12:46.6812399-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[0.56880576168354857],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":222.79303585569173,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:12:51.6682619-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[0.97164031361620851],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":17.149953723076806,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:12:56.6792464-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[1.2862396258189048],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":349.51009109820785,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:13:01.6691755-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[1.6570170557051924],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":42.793035777823775,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:13:06.696077-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[1.9698564319625289],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":234.24195884175543,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:13:11.6920285-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[2.2117637610626937],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":204.83904968454712,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:13:16.6719426-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[2.2837073311276739],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":250.19833226341717,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:13:21.678611-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[2.3654855106995392],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":335.16095086283764,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:13:26.6842069-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[2.3654855106995392],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":335.16095086283764,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:13:30.1327286-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[2.3654855106995392],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":335.16095086283764,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null}]

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 +0,0 @@
[{"Momento":"2024-05-07T14:16:51.443644-03:00","VelocidadeMedia":0.015,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":270.0,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:16:55.3511454-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[0.54235319705948049],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":70.198329073131674,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:17:00.3941719-03:00","VelocidadeMedia":0.15,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[0.97121526318595075],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":90.000000262454762,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:17:05.3451385-03:00","VelocidadeMedia":0.21,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[1.5034692996713148],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":170.4452883424791,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:17:10.3587026-03:00","VelocidadeMedia":0.83749999999999991,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[2.3164011769519282],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":132.79524470952708,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:17:15.3705918-03:00","VelocidadeMedia":3.81,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[3.0524123524181261],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":90.000000295261657,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:17:22.9313721-03:00","VelocidadeMedia":0.525,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[3.7899674993055674],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":127.65186326703122,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:17:25.3511289-03:00","VelocidadeMedia":1.0625,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[4.2861943135488083],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":84.3917153220043,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:17:30.3493148-03:00","VelocidadeMedia":0.145,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[5.0776250333773705],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":70.1983281620249,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:17:35.3546113-03:00","VelocidadeMedia":-0.59,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[5.6456666988853907],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":52.348137576921488,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:17:40.353385-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[5.9697422165326239],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":24.839046027977986,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:17:45.3512575-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[6.1932950831961948],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":42.79303028354326,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:17:50.3676356-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[6.5781180713295369],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":13.031430102381194,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:17:55.3772511-03:00","VelocidadeMedia":0.0875,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[6.7727288956246143],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":70.198329254378166,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:18:04.1637989-03:00","VelocidadeMedia":0.072500000000000009,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[7.0575365380060635],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":252.84879801850951,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:18:04.9865295-03:00","VelocidadeMedia":0.255,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[7.1710407434337151],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":310.83135344526812,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null}]

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
[{"Momento":"2024-05-07T14:18:05.3399664-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":310.83135344526812,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:18:07.1065482-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":310.83135344526812,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null}]

View File

@ -1 +0,0 @@
[{"Momento":"2024-05-07T14:18:36.3659862-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[0.042459669529649587],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":270.0,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:18:41.3489254-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[0.22537465613121596],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":204.83904659665646,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null},{"Momento":"2024-05-07T14:18:44.3824957-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"DistanciaPercorrida":[0.25972726651225275],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":90.0,"AnguloCarroBussola":360.0,"AnguloCarro":360.0,"SonarFrontal":null}]

View File

@ -1 +0,0 @@
[{"Latitude":-22.213086833333332,"Longitude":-47.381531,"DataHora":"2024-05-07T14:18:25","Altitude":630.3,"Velocidade":0.11482400000000001,"NumeroSatelites":7,"PrecisaoHorizontal":1.11,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213087,"Longitude":-47.381531166666669,"DataHora":"2024-05-07T14:18:26","Altitude":630.2,"Velocidade":0.048152,"NumeroSatelites":7,"PrecisaoHorizontal":1.11,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213087,"Longitude":-47.381531333333335,"DataHora":"2024-05-07T14:18:27","Altitude":630.2,"Velocidade":0.137048,"NumeroSatelites":8,"PrecisaoHorizontal":1.01,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.2130875,"Longitude":-47.381531666666667,"DataHora":"2024-05-07T14:18:28","Altitude":630.0,"Velocidade":0.06482,"NumeroSatelites":8,"PrecisaoHorizontal":1.01,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.2130875,"Longitude":-47.381531833333334,"DataHora":"2024-05-07T14:18:29","Altitude":630.1,"Velocidade":0.10371200000000001,"NumeroSatelites":8,"PrecisaoHorizontal":1.01,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213087333333334,"Longitude":-47.381531833333334,"DataHora":"2024-05-07T14:18:30","Altitude":630.1,"Velocidade":0.061116000000000004,"NumeroSatelites":8,"PrecisaoHorizontal":1.01,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213088,"Longitude":-47.381532166666666,"DataHora":"2024-05-07T14:18:32","Altitude":630.0,"Velocidade":0.051856000000000006,"NumeroSatelites":7,"PrecisaoHorizontal":1.11,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213088,"Longitude":-47.381532,"DataHora":"2024-05-07T14:18:33","Altitude":630.0,"Velocidade":0.183348,"NumeroSatelites":7,"PrecisaoHorizontal":1.11,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213088,"Longitude":-47.381531833333334,"DataHora":"2024-05-07T14:18:34","Altitude":629.9,"Velocidade":0.225944,"NumeroSatelites":8,"PrecisaoHorizontal":1.01,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0}]

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

Some files were not shown because too many files have changed in this diff Show More