Atualizado componentes pos refatoracao

This commit is contained in:
Diego Freitas 2024-01-18 13:40:29 -03:00
parent 34799f80fb
commit 966280da44
87 changed files with 8671 additions and 1646 deletions

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -186,6 +186,12 @@
<Compile Include="Forms\Atuador\frmAtuCamera.Designer.cs">
<DependentUpon>frmAtuCamera.cs</DependentUpon>
</Compile>
<Compile Include="Forms\frmGPS.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\frmGPS.Designer.cs">
<DependentUpon>frmGPS.cs</DependentUpon>
</Compile>
<Compile Include="Forms\frmMapa.cs">
<SubType>Form</SubType>
</Compile>
@ -240,7 +246,14 @@
<Compile Include="Forms\Sensoriamento\frmSenConfig.Designer.cs">
<DependentUpon>frmSenConfig.cs</DependentUpon>
</Compile>
<Compile Include="Forms\Sensoriamento\frmSenConfig2.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\Sensoriamento\frmSenConfig2.Designer.cs">
<DependentUpon>frmSenConfig2.cs</DependentUpon>
</Compile>
<Compile Include="Models\CameraModel.cs" />
<Compile Include="Models\GPSModel.cs" />
<Compile Include="Models\MapasModel.cs" />
<Compile Include="Models\Modules\AtuadorModel.cs" />
<Compile Include="Models\Modules\DirecionalModel.cs" />
@ -264,6 +277,7 @@
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Services\DispositivosServiceFactory.cs" />
<Compile Include="Services\GPSService.cs" />
<Compile Include="Services\IDispositivosService.cs" />
<Compile Include="Services\MapasService.cs" />
<Compile Include="Services\PythonService.cs" />
@ -284,6 +298,9 @@
<EmbeddedResource Include="Forms\Atuador\frmAtuCamera.resx">
<DependentUpon>frmAtuCamera.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmGPS.resx">
<DependentUpon>frmGPS.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmMapa.resx">
<DependentUpon>frmMapa.cs</DependentUpon>
</EmbeddedResource>
@ -314,6 +331,9 @@
<EmbeddedResource Include="Forms\Sensoriamento\frmSenConfig.resx">
<DependentUpon>frmSenConfig.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\Sensoriamento\frmSenConfig2.resx">
<DependentUpon>frmSenConfig2.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
@ -376,7 +396,7 @@
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<Content Include="Python\Scripts\face-recognize.py">
<Content Include="Python\Scripts\gps-viewer.py">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Python\Scripts\green-detector.py">
@ -391,9 +411,6 @@
<Content Include="Python\Scripts\map-load.py">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Python\Scripts\object-detector.py">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<Folder Include="Python\Output\" />

View File

@ -27,9 +27,9 @@ namespace AgroBase.Forms
private Timer tmrLeitura;
private int MaxLeituras = 10;
private string VideoPorta = "8080";
private string VideoPorta = VariaveisPortas.CameraSolo;
private string VideoUrl = "green_objects";
private string SocketPorta = "6536";
private string SocketPorta = VariaveisPortas.SocketSolo;
private string ArquivoLeitura = "objetos.json";
public frmAtuCamera()

View File

@ -84,59 +84,66 @@ namespace AgroBase.Forms.Atuador
//
this.cmbGND1.Enabled = false;
this.cmbGND1.FormattingEnabled = true;
this.cmbGND1.Location = new System.Drawing.Point(18, 719);
this.cmbGND1.Location = new System.Drawing.Point(14, 584);
this.cmbGND1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGND1.Name = "cmbGND1";
this.cmbGND1.Size = new System.Drawing.Size(148, 24);
this.cmbGND1.Size = new System.Drawing.Size(112, 21);
this.cmbGND1.TabIndex = 179;
//
// cmb5V
//
this.cmb5V.Enabled = false;
this.cmb5V.FormattingEnabled = true;
this.cmb5V.Location = new System.Drawing.Point(18, 689);
this.cmb5V.Location = new System.Drawing.Point(14, 560);
this.cmb5V.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmb5V.Name = "cmb5V";
this.cmb5V.Size = new System.Drawing.Size(148, 24);
this.cmb5V.Size = new System.Drawing.Size(112, 21);
this.cmb5V.TabIndex = 178;
//
// cmbGPIO14
//
this.cmbGPIO14.FormattingEnabled = true;
this.cmbGPIO14.Location = new System.Drawing.Point(18, 659);
this.cmbGPIO14.Location = new System.Drawing.Point(14, 535);
this.cmbGPIO14.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO14.Name = "cmbGPIO14";
this.cmbGPIO14.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO14.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO14.TabIndex = 177;
//
// cmbGND2
//
this.cmbGND2.Enabled = false;
this.cmbGND2.FormattingEnabled = true;
this.cmbGND2.Location = new System.Drawing.Point(584, 719);
this.cmbGND2.Location = new System.Drawing.Point(438, 584);
this.cmbGND2.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGND2.Name = "cmbGND2";
this.cmbGND2.Size = new System.Drawing.Size(148, 24);
this.cmbGND2.Size = new System.Drawing.Size(112, 21);
this.cmbGND2.TabIndex = 176;
//
// cmbGND3
//
this.cmbGND3.Enabled = false;
this.cmbGND3.FormattingEnabled = true;
this.cmbGND3.Location = new System.Drawing.Point(584, 689);
this.cmbGND3.Location = new System.Drawing.Point(438, 560);
this.cmbGND3.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGND3.Name = "cmbGND3";
this.cmbGND3.Size = new System.Drawing.Size(148, 24);
this.cmbGND3.Size = new System.Drawing.Size(112, 21);
this.cmbGND3.TabIndex = 175;
//
// cmbGPIO19
//
this.cmbGPIO19.FormattingEnabled = true;
this.cmbGPIO19.Location = new System.Drawing.Point(584, 659);
this.cmbGPIO19.Location = new System.Drawing.Point(438, 535);
this.cmbGPIO19.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO19.Name = "cmbGPIO19";
this.cmbGPIO19.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO19.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO19.TabIndex = 174;
//
// btnSalvar
//
this.btnSalvar.Location = new System.Drawing.Point(584, 786);
this.btnSalvar.Location = new System.Drawing.Point(438, 639);
this.btnSalvar.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnSalvar.Name = "btnSalvar";
this.btnSalvar.Size = new System.Drawing.Size(148, 40);
this.btnSalvar.Size = new System.Drawing.Size(111, 32);
this.btnSalvar.TabIndex = 173;
this.btnSalvar.Text = "Salvar";
this.btnSalvar.UseVisualStyleBackColor = true;
@ -145,319 +152,358 @@ namespace AgroBase.Forms.Atuador
// cmbGPIO20
//
this.cmbGPIO20.FormattingEnabled = true;
this.cmbGPIO20.Location = new System.Drawing.Point(584, 629);
this.cmbGPIO20.Location = new System.Drawing.Point(438, 511);
this.cmbGPIO20.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO20.Name = "cmbGPIO20";
this.cmbGPIO20.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO20.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO20.TabIndex = 172;
//
// cmbGPIO21
//
this.cmbGPIO21.FormattingEnabled = true;
this.cmbGPIO21.Location = new System.Drawing.Point(584, 599);
this.cmbGPIO21.Location = new System.Drawing.Point(438, 487);
this.cmbGPIO21.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO21.Name = "cmbGPIO21";
this.cmbGPIO21.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO21.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO21.TabIndex = 171;
//
// cmbGPIO47
//
this.cmbGPIO47.FormattingEnabled = true;
this.cmbGPIO47.Location = new System.Drawing.Point(584, 569);
this.cmbGPIO47.Location = new System.Drawing.Point(438, 462);
this.cmbGPIO47.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO47.Name = "cmbGPIO47";
this.cmbGPIO47.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO47.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO47.TabIndex = 170;
//
// cmbGPIO48
//
this.cmbGPIO48.FormattingEnabled = true;
this.cmbGPIO48.Location = new System.Drawing.Point(584, 539);
this.cmbGPIO48.Location = new System.Drawing.Point(438, 438);
this.cmbGPIO48.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO48.Name = "cmbGPIO48";
this.cmbGPIO48.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO48.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO48.TabIndex = 169;
//
// cmbGPIO45
//
this.cmbGPIO45.FormattingEnabled = true;
this.cmbGPIO45.Location = new System.Drawing.Point(584, 509);
this.cmbGPIO45.Location = new System.Drawing.Point(438, 414);
this.cmbGPIO45.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO45.Name = "cmbGPIO45";
this.cmbGPIO45.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO45.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO45.TabIndex = 168;
//
// cmbGPIO0
//
this.cmbGPIO0.FormattingEnabled = true;
this.cmbGPIO0.Location = new System.Drawing.Point(584, 479);
this.cmbGPIO0.Location = new System.Drawing.Point(438, 389);
this.cmbGPIO0.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO0.Name = "cmbGPIO0";
this.cmbGPIO0.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO0.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO0.TabIndex = 167;
//
// cmbGPIO35
//
this.cmbGPIO35.FormattingEnabled = true;
this.cmbGPIO35.Location = new System.Drawing.Point(584, 449);
this.cmbGPIO35.Location = new System.Drawing.Point(438, 365);
this.cmbGPIO35.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO35.Name = "cmbGPIO35";
this.cmbGPIO35.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO35.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO35.TabIndex = 166;
//
// cmbGPIO36
//
this.cmbGPIO36.FormattingEnabled = true;
this.cmbGPIO36.Location = new System.Drawing.Point(584, 419);
this.cmbGPIO36.Location = new System.Drawing.Point(438, 340);
this.cmbGPIO36.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO36.Name = "cmbGPIO36";
this.cmbGPIO36.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO36.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO36.TabIndex = 165;
//
// cmbGPIO37
//
this.cmbGPIO37.FormattingEnabled = true;
this.cmbGPIO37.Location = new System.Drawing.Point(584, 389);
this.cmbGPIO37.Location = new System.Drawing.Point(438, 316);
this.cmbGPIO37.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO37.Name = "cmbGPIO37";
this.cmbGPIO37.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO37.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO37.TabIndex = 164;
//
// cmbGPIO38
//
this.cmbGPIO38.FormattingEnabled = true;
this.cmbGPIO38.Location = new System.Drawing.Point(584, 359);
this.cmbGPIO38.Location = new System.Drawing.Point(438, 292);
this.cmbGPIO38.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO38.Name = "cmbGPIO38";
this.cmbGPIO38.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO38.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO38.TabIndex = 163;
//
// cmbGPIO39
//
this.cmbGPIO39.FormattingEnabled = true;
this.cmbGPIO39.Location = new System.Drawing.Point(584, 329);
this.cmbGPIO39.Location = new System.Drawing.Point(438, 267);
this.cmbGPIO39.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO39.Name = "cmbGPIO39";
this.cmbGPIO39.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO39.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO39.TabIndex = 162;
//
// cmbGPIO40
//
this.cmbGPIO40.FormattingEnabled = true;
this.cmbGPIO40.Location = new System.Drawing.Point(584, 299);
this.cmbGPIO40.Location = new System.Drawing.Point(438, 243);
this.cmbGPIO40.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO40.Name = "cmbGPIO40";
this.cmbGPIO40.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO40.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO40.TabIndex = 161;
//
// cmbGPIO41
//
this.cmbGPIO41.FormattingEnabled = true;
this.cmbGPIO41.Location = new System.Drawing.Point(584, 269);
this.cmbGPIO41.Location = new System.Drawing.Point(438, 219);
this.cmbGPIO41.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO41.Name = "cmbGPIO41";
this.cmbGPIO41.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO41.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO41.TabIndex = 160;
//
// cmbGPIO42
//
this.cmbGPIO42.FormattingEnabled = true;
this.cmbGPIO42.Location = new System.Drawing.Point(584, 239);
this.cmbGPIO42.Location = new System.Drawing.Point(438, 194);
this.cmbGPIO42.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO42.Name = "cmbGPIO42";
this.cmbGPIO42.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO42.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO42.TabIndex = 159;
//
// cmbGPIO2
//
this.cmbGPIO2.FormattingEnabled = true;
this.cmbGPIO2.Location = new System.Drawing.Point(584, 209);
this.cmbGPIO2.Location = new System.Drawing.Point(438, 170);
this.cmbGPIO2.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO2.Name = "cmbGPIO2";
this.cmbGPIO2.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO2.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO2.TabIndex = 158;
//
// cmbGPIO1
//
this.cmbGPIO1.FormattingEnabled = true;
this.cmbGPIO1.Location = new System.Drawing.Point(584, 179);
this.cmbGPIO1.Location = new System.Drawing.Point(438, 145);
this.cmbGPIO1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO1.Name = "cmbGPIO1";
this.cmbGPIO1.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO1.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO1.TabIndex = 157;
//
// cmbRX
//
this.cmbRX.Enabled = false;
this.cmbRX.FormattingEnabled = true;
this.cmbRX.Location = new System.Drawing.Point(584, 149);
this.cmbRX.Location = new System.Drawing.Point(438, 121);
this.cmbRX.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbRX.Name = "cmbRX";
this.cmbRX.Size = new System.Drawing.Size(148, 24);
this.cmbRX.Size = new System.Drawing.Size(112, 21);
this.cmbRX.TabIndex = 156;
//
// cmbTX
//
this.cmbTX.Enabled = false;
this.cmbTX.FormattingEnabled = true;
this.cmbTX.Location = new System.Drawing.Point(584, 119);
this.cmbTX.Location = new System.Drawing.Point(438, 97);
this.cmbTX.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbTX.Name = "cmbTX";
this.cmbTX.Size = new System.Drawing.Size(148, 24);
this.cmbTX.Size = new System.Drawing.Size(112, 21);
this.cmbTX.TabIndex = 155;
//
// cmbGND4
//
this.cmbGND4.Enabled = false;
this.cmbGND4.FormattingEnabled = true;
this.cmbGND4.Location = new System.Drawing.Point(584, 89);
this.cmbGND4.Location = new System.Drawing.Point(438, 72);
this.cmbGND4.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGND4.Name = "cmbGND4";
this.cmbGND4.Size = new System.Drawing.Size(148, 24);
this.cmbGND4.Size = new System.Drawing.Size(112, 21);
this.cmbGND4.TabIndex = 154;
//
// cmbGPIO13
//
this.cmbGPIO13.FormattingEnabled = true;
this.cmbGPIO13.Location = new System.Drawing.Point(18, 629);
this.cmbGPIO13.Location = new System.Drawing.Point(14, 511);
this.cmbGPIO13.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO13.Name = "cmbGPIO13";
this.cmbGPIO13.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO13.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO13.TabIndex = 153;
//
// cmbGPIO12
//
this.cmbGPIO12.FormattingEnabled = true;
this.cmbGPIO12.Location = new System.Drawing.Point(18, 599);
this.cmbGPIO12.Location = new System.Drawing.Point(14, 487);
this.cmbGPIO12.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO12.Name = "cmbGPIO12";
this.cmbGPIO12.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO12.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO12.TabIndex = 152;
//
// cmbGPIO11
//
this.cmbGPIO11.FormattingEnabled = true;
this.cmbGPIO11.Location = new System.Drawing.Point(18, 569);
this.cmbGPIO11.Location = new System.Drawing.Point(14, 462);
this.cmbGPIO11.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO11.Name = "cmbGPIO11";
this.cmbGPIO11.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO11.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO11.TabIndex = 151;
//
// cmbGPIO10
//
this.cmbGPIO10.FormattingEnabled = true;
this.cmbGPIO10.Location = new System.Drawing.Point(18, 539);
this.cmbGPIO10.Location = new System.Drawing.Point(14, 438);
this.cmbGPIO10.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO10.Name = "cmbGPIO10";
this.cmbGPIO10.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO10.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO10.TabIndex = 150;
//
// cmbGPIO9
//
this.cmbGPIO9.FormattingEnabled = true;
this.cmbGPIO9.Location = new System.Drawing.Point(18, 509);
this.cmbGPIO9.Location = new System.Drawing.Point(14, 414);
this.cmbGPIO9.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO9.Name = "cmbGPIO9";
this.cmbGPIO9.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO9.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO9.TabIndex = 149;
//
// cmbGPIO46
//
this.cmbGPIO46.FormattingEnabled = true;
this.cmbGPIO46.Location = new System.Drawing.Point(18, 479);
this.cmbGPIO46.Location = new System.Drawing.Point(14, 389);
this.cmbGPIO46.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO46.Name = "cmbGPIO46";
this.cmbGPIO46.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO46.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO46.TabIndex = 148;
//
// cmbGPIO3
//
this.cmbGPIO3.FormattingEnabled = true;
this.cmbGPIO3.Location = new System.Drawing.Point(18, 449);
this.cmbGPIO3.Location = new System.Drawing.Point(14, 365);
this.cmbGPIO3.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO3.Name = "cmbGPIO3";
this.cmbGPIO3.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO3.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO3.TabIndex = 147;
//
// cmbGPIO8
//
this.cmbGPIO8.FormattingEnabled = true;
this.cmbGPIO8.Location = new System.Drawing.Point(18, 419);
this.cmbGPIO8.Location = new System.Drawing.Point(14, 340);
this.cmbGPIO8.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO8.Name = "cmbGPIO8";
this.cmbGPIO8.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO8.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO8.TabIndex = 146;
//
// cmbGPIO18
//
this.cmbGPIO18.FormattingEnabled = true;
this.cmbGPIO18.Location = new System.Drawing.Point(18, 389);
this.cmbGPIO18.Location = new System.Drawing.Point(14, 316);
this.cmbGPIO18.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO18.Name = "cmbGPIO18";
this.cmbGPIO18.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO18.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO18.TabIndex = 145;
//
// cmbGPIO17
//
this.cmbGPIO17.FormattingEnabled = true;
this.cmbGPIO17.Location = new System.Drawing.Point(18, 359);
this.cmbGPIO17.Location = new System.Drawing.Point(14, 292);
this.cmbGPIO17.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO17.Name = "cmbGPIO17";
this.cmbGPIO17.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO17.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO17.TabIndex = 144;
//
// cmbGPIO16
//
this.cmbGPIO16.FormattingEnabled = true;
this.cmbGPIO16.Location = new System.Drawing.Point(18, 329);
this.cmbGPIO16.Location = new System.Drawing.Point(14, 267);
this.cmbGPIO16.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO16.Name = "cmbGPIO16";
this.cmbGPIO16.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO16.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO16.TabIndex = 143;
//
// cmbGPIO15
//
this.cmbGPIO15.FormattingEnabled = true;
this.cmbGPIO15.Location = new System.Drawing.Point(18, 299);
this.cmbGPIO15.Location = new System.Drawing.Point(14, 243);
this.cmbGPIO15.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO15.Name = "cmbGPIO15";
this.cmbGPIO15.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO15.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO15.TabIndex = 142;
//
// cmbGPIO7
//
this.cmbGPIO7.FormattingEnabled = true;
this.cmbGPIO7.Location = new System.Drawing.Point(18, 269);
this.cmbGPIO7.Location = new System.Drawing.Point(14, 219);
this.cmbGPIO7.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO7.Name = "cmbGPIO7";
this.cmbGPIO7.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO7.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO7.TabIndex = 141;
//
// cmbGPIO6
//
this.cmbGPIO6.FormattingEnabled = true;
this.cmbGPIO6.Location = new System.Drawing.Point(18, 239);
this.cmbGPIO6.Location = new System.Drawing.Point(14, 194);
this.cmbGPIO6.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO6.Name = "cmbGPIO6";
this.cmbGPIO6.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO6.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO6.TabIndex = 140;
//
// cmbGPIO5
//
this.cmbGPIO5.FormattingEnabled = true;
this.cmbGPIO5.Location = new System.Drawing.Point(18, 209);
this.cmbGPIO5.Location = new System.Drawing.Point(14, 170);
this.cmbGPIO5.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO5.Name = "cmbGPIO5";
this.cmbGPIO5.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO5.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO5.TabIndex = 139;
//
// cmbGPIO4
//
this.cmbGPIO4.FormattingEnabled = true;
this.cmbGPIO4.Location = new System.Drawing.Point(18, 179);
this.cmbGPIO4.Location = new System.Drawing.Point(14, 145);
this.cmbGPIO4.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO4.Name = "cmbGPIO4";
this.cmbGPIO4.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO4.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO4.TabIndex = 138;
//
// cmbRst
//
this.cmbRst.Enabled = false;
this.cmbRst.FormattingEnabled = true;
this.cmbRst.Location = new System.Drawing.Point(18, 149);
this.cmbRst.Location = new System.Drawing.Point(14, 121);
this.cmbRst.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbRst.Name = "cmbRst";
this.cmbRst.Size = new System.Drawing.Size(148, 24);
this.cmbRst.Size = new System.Drawing.Size(112, 21);
this.cmbRst.TabIndex = 137;
//
// cmb3v3_2
//
this.cmb3v3_2.Enabled = false;
this.cmb3v3_2.FormattingEnabled = true;
this.cmb3v3_2.Location = new System.Drawing.Point(18, 119);
this.cmb3v3_2.Location = new System.Drawing.Point(14, 97);
this.cmb3v3_2.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmb3v3_2.Name = "cmb3v3_2";
this.cmb3v3_2.Size = new System.Drawing.Size(148, 24);
this.cmb3v3_2.Size = new System.Drawing.Size(112, 21);
this.cmb3v3_2.TabIndex = 136;
//
// cmb3v3_1
//
this.cmb3v3_1.Enabled = false;
this.cmb3v3_1.FormattingEnabled = true;
this.cmb3v3_1.Location = new System.Drawing.Point(18, 89);
this.cmb3v3_1.Location = new System.Drawing.Point(14, 72);
this.cmb3v3_1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmb3v3_1.Name = "cmb3v3_1";
this.cmb3v3_1.Size = new System.Drawing.Size(148, 24);
this.cmb3v3_1.Size = new System.Drawing.Size(112, 21);
this.cmb3v3_1.TabIndex = 135;
//
// imgESP32
//
this.imgESP32.Image = ((System.Drawing.Image)(resources.GetObject("imgESP32.Image")));
this.imgESP32.Location = new System.Drawing.Point(172, -2);
this.imgESP32.Location = new System.Drawing.Point(129, -2);
this.imgESP32.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.imgESP32.Name = "imgESP32";
this.imgESP32.Size = new System.Drawing.Size(406, 847);
this.imgESP32.Size = new System.Drawing.Size(304, 688);
this.imgESP32.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.imgESP32.TabIndex = 134;
this.imgESP32.TabStop = false;
@ -465,18 +511,19 @@ namespace AgroBase.Forms.Atuador
// lblPinout
//
this.lblPinout.AutoSize = true;
this.lblPinout.Location = new System.Drawing.Point(15, 12);
this.lblPinout.Location = new System.Drawing.Point(11, 10);
this.lblPinout.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblPinout.Name = "lblPinout";
this.lblPinout.Size = new System.Drawing.Size(48, 17);
this.lblPinout.Size = new System.Drawing.Size(37, 13);
this.lblPinout.TabIndex = 180;
this.lblPinout.Text = "Pinout";
//
// frmAtuConfig
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.White;
this.ClientSize = new System.Drawing.Size(1285, 838);
this.ClientSize = new System.Drawing.Size(964, 693);
this.Controls.Add(this.lblPinout);
this.Controls.Add(this.cmbGND1);
this.Controls.Add(this.cmb5V);
@ -524,6 +571,7 @@ namespace AgroBase.Forms.Atuador
this.Controls.Add(this.cmb3v3_2);
this.Controls.Add(this.cmb3v3_1);
this.Controls.Add(this.imgESP32);
this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.Name = "frmAtuConfig";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Atuadores - Parametrização";

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -216,9 +216,9 @@ namespace AgroBase.Forms.Operacoes
{
string ArquivoLeitura = "angulos.json";
int MaxLeituras = 10;
string VideoPorta = "8081";
string VideoPorta = VariaveisPortas.CameraCaminho;
string VideoUrl = "line_angles";
string SocketPorta = "6536";
string SocketPorta = VariaveisPortas.SocketCaminho;
cameraCaminho.ArquivoLeitura = ArquivoLeitura;
cameraCaminho.IniciarCamera(

View File

@ -20,9 +20,9 @@ namespace AgroBase.Forms.Sensoriamento
private Timer tmrLeitura;
private int MaxLeituras = 10;
private string VideoPorta = "8081";
private string VideoPorta = VariaveisPortas.CameraCaminho;
private string VideoUrl = "line_angle";
private string SocketPorta = "6535";
private string SocketPorta = VariaveisPortas.SocketCaminho;
private bool MostrarDebug = true;
private string ArquivoLeitura = "leitura_angulo.json";

View File

@ -83,9 +83,10 @@ namespace AgroBase.Forms.Sensoriamento
// lblPinout
//
this.lblPinout.AutoSize = true;
this.lblPinout.Location = new System.Drawing.Point(15, 12);
this.lblPinout.Location = new System.Drawing.Point(11, 10);
this.lblPinout.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblPinout.Name = "lblPinout";
this.lblPinout.Size = new System.Drawing.Size(48, 17);
this.lblPinout.Size = new System.Drawing.Size(37, 13);
this.lblPinout.TabIndex = 134;
this.lblPinout.Text = "Pinout";
//
@ -93,59 +94,66 @@ namespace AgroBase.Forms.Sensoriamento
//
this.cmbGND1.Enabled = false;
this.cmbGND1.FormattingEnabled = true;
this.cmbGND1.Location = new System.Drawing.Point(18, 719);
this.cmbGND1.Location = new System.Drawing.Point(14, 584);
this.cmbGND1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGND1.Name = "cmbGND1";
this.cmbGND1.Size = new System.Drawing.Size(148, 24);
this.cmbGND1.Size = new System.Drawing.Size(112, 21);
this.cmbGND1.TabIndex = 133;
//
// cmb5V
//
this.cmb5V.Enabled = false;
this.cmb5V.FormattingEnabled = true;
this.cmb5V.Location = new System.Drawing.Point(18, 689);
this.cmb5V.Location = new System.Drawing.Point(14, 560);
this.cmb5V.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmb5V.Name = "cmb5V";
this.cmb5V.Size = new System.Drawing.Size(148, 24);
this.cmb5V.Size = new System.Drawing.Size(112, 21);
this.cmb5V.TabIndex = 132;
//
// cmbGPIO14
//
this.cmbGPIO14.FormattingEnabled = true;
this.cmbGPIO14.Location = new System.Drawing.Point(18, 659);
this.cmbGPIO14.Location = new System.Drawing.Point(14, 535);
this.cmbGPIO14.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO14.Name = "cmbGPIO14";
this.cmbGPIO14.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO14.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO14.TabIndex = 131;
//
// cmbGND2
//
this.cmbGND2.Enabled = false;
this.cmbGND2.FormattingEnabled = true;
this.cmbGND2.Location = new System.Drawing.Point(584, 719);
this.cmbGND2.Location = new System.Drawing.Point(438, 584);
this.cmbGND2.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGND2.Name = "cmbGND2";
this.cmbGND2.Size = new System.Drawing.Size(148, 24);
this.cmbGND2.Size = new System.Drawing.Size(112, 21);
this.cmbGND2.TabIndex = 130;
//
// cmbGND3
//
this.cmbGND3.Enabled = false;
this.cmbGND3.FormattingEnabled = true;
this.cmbGND3.Location = new System.Drawing.Point(584, 689);
this.cmbGND3.Location = new System.Drawing.Point(438, 560);
this.cmbGND3.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGND3.Name = "cmbGND3";
this.cmbGND3.Size = new System.Drawing.Size(148, 24);
this.cmbGND3.Size = new System.Drawing.Size(112, 21);
this.cmbGND3.TabIndex = 129;
//
// cmbGPIO19
//
this.cmbGPIO19.FormattingEnabled = true;
this.cmbGPIO19.Location = new System.Drawing.Point(584, 659);
this.cmbGPIO19.Location = new System.Drawing.Point(438, 535);
this.cmbGPIO19.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO19.Name = "cmbGPIO19";
this.cmbGPIO19.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO19.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO19.TabIndex = 128;
//
// btnSalvar
//
this.btnSalvar.Location = new System.Drawing.Point(584, 786);
this.btnSalvar.Location = new System.Drawing.Point(438, 639);
this.btnSalvar.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnSalvar.Name = "btnSalvar";
this.btnSalvar.Size = new System.Drawing.Size(148, 40);
this.btnSalvar.Size = new System.Drawing.Size(111, 32);
this.btnSalvar.TabIndex = 127;
this.btnSalvar.Text = "Salvar";
this.btnSalvar.UseVisualStyleBackColor = true;
@ -154,329 +162,368 @@ namespace AgroBase.Forms.Sensoriamento
// cmbGPIO20
//
this.cmbGPIO20.FormattingEnabled = true;
this.cmbGPIO20.Location = new System.Drawing.Point(584, 629);
this.cmbGPIO20.Location = new System.Drawing.Point(438, 511);
this.cmbGPIO20.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO20.Name = "cmbGPIO20";
this.cmbGPIO20.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO20.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO20.TabIndex = 126;
//
// cmbGPIO21
//
this.cmbGPIO21.FormattingEnabled = true;
this.cmbGPIO21.Location = new System.Drawing.Point(584, 599);
this.cmbGPIO21.Location = new System.Drawing.Point(438, 487);
this.cmbGPIO21.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO21.Name = "cmbGPIO21";
this.cmbGPIO21.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO21.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO21.TabIndex = 125;
//
// cmbGPIO47
//
this.cmbGPIO47.FormattingEnabled = true;
this.cmbGPIO47.Location = new System.Drawing.Point(584, 569);
this.cmbGPIO47.Location = new System.Drawing.Point(438, 462);
this.cmbGPIO47.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO47.Name = "cmbGPIO47";
this.cmbGPIO47.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO47.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO47.TabIndex = 124;
//
// cmbGPIO48
//
this.cmbGPIO48.FormattingEnabled = true;
this.cmbGPIO48.Location = new System.Drawing.Point(584, 539);
this.cmbGPIO48.Location = new System.Drawing.Point(438, 438);
this.cmbGPIO48.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO48.Name = "cmbGPIO48";
this.cmbGPIO48.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO48.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO48.TabIndex = 123;
//
// cmbGPIO45
//
this.cmbGPIO45.FormattingEnabled = true;
this.cmbGPIO45.Location = new System.Drawing.Point(584, 509);
this.cmbGPIO45.Location = new System.Drawing.Point(438, 414);
this.cmbGPIO45.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO45.Name = "cmbGPIO45";
this.cmbGPIO45.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO45.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO45.TabIndex = 122;
//
// cmbGPIO0
//
this.cmbGPIO0.FormattingEnabled = true;
this.cmbGPIO0.Location = new System.Drawing.Point(584, 479);
this.cmbGPIO0.Location = new System.Drawing.Point(438, 389);
this.cmbGPIO0.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO0.Name = "cmbGPIO0";
this.cmbGPIO0.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO0.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO0.TabIndex = 121;
//
// cmbGPIO35
//
this.cmbGPIO35.FormattingEnabled = true;
this.cmbGPIO35.Location = new System.Drawing.Point(584, 449);
this.cmbGPIO35.Location = new System.Drawing.Point(438, 365);
this.cmbGPIO35.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO35.Name = "cmbGPIO35";
this.cmbGPIO35.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO35.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO35.TabIndex = 120;
//
// cmbGPIO36
//
this.cmbGPIO36.FormattingEnabled = true;
this.cmbGPIO36.Location = new System.Drawing.Point(584, 419);
this.cmbGPIO36.Location = new System.Drawing.Point(438, 340);
this.cmbGPIO36.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO36.Name = "cmbGPIO36";
this.cmbGPIO36.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO36.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO36.TabIndex = 119;
//
// cmbGPIO37
//
this.cmbGPIO37.FormattingEnabled = true;
this.cmbGPIO37.Location = new System.Drawing.Point(584, 389);
this.cmbGPIO37.Location = new System.Drawing.Point(438, 316);
this.cmbGPIO37.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO37.Name = "cmbGPIO37";
this.cmbGPIO37.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO37.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO37.TabIndex = 118;
//
// cmbGPIO38
//
this.cmbGPIO38.FormattingEnabled = true;
this.cmbGPIO38.Location = new System.Drawing.Point(584, 359);
this.cmbGPIO38.Location = new System.Drawing.Point(438, 292);
this.cmbGPIO38.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO38.Name = "cmbGPIO38";
this.cmbGPIO38.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO38.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO38.TabIndex = 117;
//
// cmbGPIO39
//
this.cmbGPIO39.FormattingEnabled = true;
this.cmbGPIO39.Location = new System.Drawing.Point(584, 329);
this.cmbGPIO39.Location = new System.Drawing.Point(438, 267);
this.cmbGPIO39.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO39.Name = "cmbGPIO39";
this.cmbGPIO39.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO39.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO39.TabIndex = 116;
//
// cmbGPIO40
//
this.cmbGPIO40.FormattingEnabled = true;
this.cmbGPIO40.Location = new System.Drawing.Point(584, 299);
this.cmbGPIO40.Location = new System.Drawing.Point(438, 243);
this.cmbGPIO40.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO40.Name = "cmbGPIO40";
this.cmbGPIO40.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO40.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO40.TabIndex = 115;
//
// cmbGPIO41
//
this.cmbGPIO41.FormattingEnabled = true;
this.cmbGPIO41.Location = new System.Drawing.Point(584, 269);
this.cmbGPIO41.Location = new System.Drawing.Point(438, 219);
this.cmbGPIO41.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO41.Name = "cmbGPIO41";
this.cmbGPIO41.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO41.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO41.TabIndex = 114;
//
// cmbGPIO42
//
this.cmbGPIO42.FormattingEnabled = true;
this.cmbGPIO42.Location = new System.Drawing.Point(584, 239);
this.cmbGPIO42.Location = new System.Drawing.Point(438, 194);
this.cmbGPIO42.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO42.Name = "cmbGPIO42";
this.cmbGPIO42.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO42.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO42.TabIndex = 113;
//
// cmbGPIO2
//
this.cmbGPIO2.FormattingEnabled = true;
this.cmbGPIO2.Location = new System.Drawing.Point(584, 209);
this.cmbGPIO2.Location = new System.Drawing.Point(438, 170);
this.cmbGPIO2.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO2.Name = "cmbGPIO2";
this.cmbGPIO2.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO2.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO2.TabIndex = 112;
//
// cmbGPIO1
//
this.cmbGPIO1.FormattingEnabled = true;
this.cmbGPIO1.Location = new System.Drawing.Point(584, 179);
this.cmbGPIO1.Location = new System.Drawing.Point(438, 145);
this.cmbGPIO1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO1.Name = "cmbGPIO1";
this.cmbGPIO1.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO1.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO1.TabIndex = 111;
//
// cmbRX
//
this.cmbRX.Enabled = false;
this.cmbRX.FormattingEnabled = true;
this.cmbRX.Location = new System.Drawing.Point(584, 149);
this.cmbRX.Location = new System.Drawing.Point(438, 121);
this.cmbRX.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbRX.Name = "cmbRX";
this.cmbRX.Size = new System.Drawing.Size(148, 24);
this.cmbRX.Size = new System.Drawing.Size(112, 21);
this.cmbRX.TabIndex = 110;
//
// cmbTX
//
this.cmbTX.Enabled = false;
this.cmbTX.FormattingEnabled = true;
this.cmbTX.Location = new System.Drawing.Point(584, 119);
this.cmbTX.Location = new System.Drawing.Point(438, 97);
this.cmbTX.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbTX.Name = "cmbTX";
this.cmbTX.Size = new System.Drawing.Size(148, 24);
this.cmbTX.Size = new System.Drawing.Size(112, 21);
this.cmbTX.TabIndex = 109;
//
// cmbGND4
//
this.cmbGND4.Enabled = false;
this.cmbGND4.FormattingEnabled = true;
this.cmbGND4.Location = new System.Drawing.Point(584, 89);
this.cmbGND4.Location = new System.Drawing.Point(438, 72);
this.cmbGND4.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGND4.Name = "cmbGND4";
this.cmbGND4.Size = new System.Drawing.Size(148, 24);
this.cmbGND4.Size = new System.Drawing.Size(112, 21);
this.cmbGND4.TabIndex = 108;
//
// cmbGPIO13
//
this.cmbGPIO13.FormattingEnabled = true;
this.cmbGPIO13.Location = new System.Drawing.Point(18, 629);
this.cmbGPIO13.Location = new System.Drawing.Point(14, 511);
this.cmbGPIO13.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO13.Name = "cmbGPIO13";
this.cmbGPIO13.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO13.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO13.TabIndex = 107;
//
// cmbGPIO12
//
this.cmbGPIO12.FormattingEnabled = true;
this.cmbGPIO12.Location = new System.Drawing.Point(18, 599);
this.cmbGPIO12.Location = new System.Drawing.Point(14, 487);
this.cmbGPIO12.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO12.Name = "cmbGPIO12";
this.cmbGPIO12.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO12.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO12.TabIndex = 106;
//
// cmbGPIO11
//
this.cmbGPIO11.FormattingEnabled = true;
this.cmbGPIO11.Location = new System.Drawing.Point(18, 569);
this.cmbGPIO11.Location = new System.Drawing.Point(14, 462);
this.cmbGPIO11.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO11.Name = "cmbGPIO11";
this.cmbGPIO11.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO11.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO11.TabIndex = 105;
//
// cmbGPIO10
//
this.cmbGPIO10.FormattingEnabled = true;
this.cmbGPIO10.Location = new System.Drawing.Point(18, 539);
this.cmbGPIO10.Location = new System.Drawing.Point(14, 438);
this.cmbGPIO10.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO10.Name = "cmbGPIO10";
this.cmbGPIO10.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO10.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO10.TabIndex = 104;
//
// cmbGPIO9
//
this.cmbGPIO9.FormattingEnabled = true;
this.cmbGPIO9.Location = new System.Drawing.Point(18, 509);
this.cmbGPIO9.Location = new System.Drawing.Point(14, 414);
this.cmbGPIO9.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO9.Name = "cmbGPIO9";
this.cmbGPIO9.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO9.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO9.TabIndex = 103;
//
// cmbGPIO46
//
this.cmbGPIO46.FormattingEnabled = true;
this.cmbGPIO46.Location = new System.Drawing.Point(18, 479);
this.cmbGPIO46.Location = new System.Drawing.Point(14, 389);
this.cmbGPIO46.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO46.Name = "cmbGPIO46";
this.cmbGPIO46.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO46.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO46.TabIndex = 102;
//
// cmbGPIO3
//
this.cmbGPIO3.FormattingEnabled = true;
this.cmbGPIO3.Location = new System.Drawing.Point(18, 449);
this.cmbGPIO3.Location = new System.Drawing.Point(14, 365);
this.cmbGPIO3.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO3.Name = "cmbGPIO3";
this.cmbGPIO3.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO3.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO3.TabIndex = 101;
//
// cmbGPIO8
//
this.cmbGPIO8.FormattingEnabled = true;
this.cmbGPIO8.Location = new System.Drawing.Point(18, 419);
this.cmbGPIO8.Location = new System.Drawing.Point(14, 340);
this.cmbGPIO8.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO8.Name = "cmbGPIO8";
this.cmbGPIO8.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO8.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO8.TabIndex = 100;
//
// cmbGPIO18
//
this.cmbGPIO18.FormattingEnabled = true;
this.cmbGPIO18.Location = new System.Drawing.Point(18, 389);
this.cmbGPIO18.Location = new System.Drawing.Point(14, 316);
this.cmbGPIO18.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO18.Name = "cmbGPIO18";
this.cmbGPIO18.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO18.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO18.TabIndex = 99;
//
// cmbGPIO17
//
this.cmbGPIO17.FormattingEnabled = true;
this.cmbGPIO17.Location = new System.Drawing.Point(18, 359);
this.cmbGPIO17.Location = new System.Drawing.Point(14, 292);
this.cmbGPIO17.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO17.Name = "cmbGPIO17";
this.cmbGPIO17.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO17.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO17.TabIndex = 98;
//
// cmbGPIO16
//
this.cmbGPIO16.FormattingEnabled = true;
this.cmbGPIO16.Location = new System.Drawing.Point(18, 329);
this.cmbGPIO16.Location = new System.Drawing.Point(14, 267);
this.cmbGPIO16.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO16.Name = "cmbGPIO16";
this.cmbGPIO16.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO16.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO16.TabIndex = 97;
//
// cmbGPIO15
//
this.cmbGPIO15.FormattingEnabled = true;
this.cmbGPIO15.Location = new System.Drawing.Point(18, 299);
this.cmbGPIO15.Location = new System.Drawing.Point(14, 243);
this.cmbGPIO15.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO15.Name = "cmbGPIO15";
this.cmbGPIO15.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO15.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO15.TabIndex = 96;
//
// cmbGPIO7
//
this.cmbGPIO7.FormattingEnabled = true;
this.cmbGPIO7.Location = new System.Drawing.Point(18, 269);
this.cmbGPIO7.Location = new System.Drawing.Point(14, 219);
this.cmbGPIO7.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO7.Name = "cmbGPIO7";
this.cmbGPIO7.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO7.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO7.TabIndex = 95;
//
// cmbGPIO6
//
this.cmbGPIO6.FormattingEnabled = true;
this.cmbGPIO6.Location = new System.Drawing.Point(18, 239);
this.cmbGPIO6.Location = new System.Drawing.Point(14, 194);
this.cmbGPIO6.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO6.Name = "cmbGPIO6";
this.cmbGPIO6.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO6.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO6.TabIndex = 94;
//
// cmbGPIO5
//
this.cmbGPIO5.FormattingEnabled = true;
this.cmbGPIO5.Location = new System.Drawing.Point(18, 209);
this.cmbGPIO5.Location = new System.Drawing.Point(14, 170);
this.cmbGPIO5.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO5.Name = "cmbGPIO5";
this.cmbGPIO5.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO5.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO5.TabIndex = 93;
//
// cmbGPIO4
//
this.cmbGPIO4.FormattingEnabled = true;
this.cmbGPIO4.Location = new System.Drawing.Point(18, 179);
this.cmbGPIO4.Location = new System.Drawing.Point(14, 145);
this.cmbGPIO4.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbGPIO4.Name = "cmbGPIO4";
this.cmbGPIO4.Size = new System.Drawing.Size(148, 24);
this.cmbGPIO4.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO4.TabIndex = 92;
//
// cmbRst
//
this.cmbRst.Enabled = false;
this.cmbRst.FormattingEnabled = true;
this.cmbRst.Location = new System.Drawing.Point(18, 149);
this.cmbRst.Location = new System.Drawing.Point(14, 121);
this.cmbRst.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbRst.Name = "cmbRst";
this.cmbRst.Size = new System.Drawing.Size(148, 24);
this.cmbRst.Size = new System.Drawing.Size(112, 21);
this.cmbRst.TabIndex = 91;
//
// cmb3v3_2
//
this.cmb3v3_2.Enabled = false;
this.cmb3v3_2.FormattingEnabled = true;
this.cmb3v3_2.Location = new System.Drawing.Point(18, 119);
this.cmb3v3_2.Location = new System.Drawing.Point(14, 97);
this.cmb3v3_2.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmb3v3_2.Name = "cmb3v3_2";
this.cmb3v3_2.Size = new System.Drawing.Size(148, 24);
this.cmb3v3_2.Size = new System.Drawing.Size(112, 21);
this.cmb3v3_2.TabIndex = 90;
//
// cmb3v3_1
//
this.cmb3v3_1.Enabled = false;
this.cmb3v3_1.FormattingEnabled = true;
this.cmb3v3_1.Location = new System.Drawing.Point(18, 89);
this.cmb3v3_1.Location = new System.Drawing.Point(14, 72);
this.cmb3v3_1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmb3v3_1.Name = "cmb3v3_1";
this.cmb3v3_1.Size = new System.Drawing.Size(148, 24);
this.cmb3v3_1.Size = new System.Drawing.Size(112, 21);
this.cmb3v3_1.TabIndex = 89;
//
// imgESP32
//
this.imgESP32.Image = ((System.Drawing.Image)(resources.GetObject("imgESP32.Image")));
this.imgESP32.Location = new System.Drawing.Point(172, -2);
this.imgESP32.Location = new System.Drawing.Point(129, -2);
this.imgESP32.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.imgESP32.Name = "imgESP32";
this.imgESP32.Size = new System.Drawing.Size(406, 847);
this.imgESP32.Size = new System.Drawing.Size(304, 688);
this.imgESP32.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.imgESP32.TabIndex = 88;
this.imgESP32.TabStop = false;
//
// frmSenConfig
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.White;
this.ClientSize = new System.Drawing.Size(1285, 838);
this.ClientSize = new System.Drawing.Size(964, 693);
this.Controls.Add(this.lblPinout);
this.Controls.Add(this.cmbGND1);
this.Controls.Add(this.cmb5V);
@ -524,6 +571,7 @@ namespace AgroBase.Forms.Sensoriamento
this.Controls.Add(this.cmb3v3_2);
this.Controls.Add(this.cmb3v3_1);
this.Controls.Add(this.imgESP32);
this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.Name = "frmSenConfig";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Sensoriamento - Parametrização";

View File

@ -0,0 +1,633 @@
namespace AgroBase.Forms.Sensoriamento
{
partial class frmSenConfig2
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmSenConfig2));
this.lblPinout = new System.Windows.Forms.Label();
this.cmbGND1 = new System.Windows.Forms.ComboBox();
this.cmb5V = new System.Windows.Forms.ComboBox();
this.cmbGPIO14 = new System.Windows.Forms.ComboBox();
this.cmbGND2 = new System.Windows.Forms.ComboBox();
this.cmbGND3 = new System.Windows.Forms.ComboBox();
this.cmbGPIO19 = new System.Windows.Forms.ComboBox();
this.btnSalvar = new System.Windows.Forms.Button();
this.cmbGPIO20 = new System.Windows.Forms.ComboBox();
this.cmbGPIO21 = new System.Windows.Forms.ComboBox();
this.cmbGPIO47 = new System.Windows.Forms.ComboBox();
this.cmbGPIO48 = new System.Windows.Forms.ComboBox();
this.cmbGPIO45 = new System.Windows.Forms.ComboBox();
this.cmbGPIO0 = new System.Windows.Forms.ComboBox();
this.cmbGPIO35 = new System.Windows.Forms.ComboBox();
this.cmbGPIO36 = new System.Windows.Forms.ComboBox();
this.cmbGPIO37 = new System.Windows.Forms.ComboBox();
this.cmbGPIO38 = new System.Windows.Forms.ComboBox();
this.cmbGPIO39 = new System.Windows.Forms.ComboBox();
this.cmbGPIO40 = new System.Windows.Forms.ComboBox();
this.cmbGPIO41 = new System.Windows.Forms.ComboBox();
this.cmbGPIO42 = new System.Windows.Forms.ComboBox();
this.cmbGPIO2 = new System.Windows.Forms.ComboBox();
this.cmbGPIO1 = new System.Windows.Forms.ComboBox();
this.cmbRX = new System.Windows.Forms.ComboBox();
this.cmbTX = new System.Windows.Forms.ComboBox();
this.cmbGND4 = new System.Windows.Forms.ComboBox();
this.cmbGPIO13 = new System.Windows.Forms.ComboBox();
this.cmbGPIO12 = new System.Windows.Forms.ComboBox();
this.cmbGPIO11 = new System.Windows.Forms.ComboBox();
this.cmbGPIO10 = new System.Windows.Forms.ComboBox();
this.cmbGPIO9 = new System.Windows.Forms.ComboBox();
this.cmbGPIO46 = new System.Windows.Forms.ComboBox();
this.cmbGPIO3 = new System.Windows.Forms.ComboBox();
this.cmbGPIO8 = new System.Windows.Forms.ComboBox();
this.cmbGPIO18 = new System.Windows.Forms.ComboBox();
this.cmbGPIO17 = new System.Windows.Forms.ComboBox();
this.cmbGPIO16 = new System.Windows.Forms.ComboBox();
this.cmbGPIO15 = new System.Windows.Forms.ComboBox();
this.cmbGPIO7 = new System.Windows.Forms.ComboBox();
this.cmbGPIO6 = new System.Windows.Forms.ComboBox();
this.cmbGPIO5 = new System.Windows.Forms.ComboBox();
this.cmbGPIO4 = new System.Windows.Forms.ComboBox();
this.cmbRst = new System.Windows.Forms.ComboBox();
this.cmb3v3_2 = new System.Windows.Forms.ComboBox();
this.cmb3v3_1 = new System.Windows.Forms.ComboBox();
this.imgESP32 = new System.Windows.Forms.PictureBox();
((System.ComponentModel.ISupportInitialize)(this.imgESP32)).BeginInit();
this.SuspendLayout();
//
// lblPinout
//
this.lblPinout.AutoSize = true;
this.lblPinout.Location = new System.Drawing.Point(11, 10);
this.lblPinout.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblPinout.Name = "lblPinout";
this.lblPinout.Size = new System.Drawing.Size(37, 13);
this.lblPinout.TabIndex = 181;
this.lblPinout.Text = "Pinout";
//
// cmbGND1
//
this.cmbGND1.Enabled = false;
this.cmbGND1.FormattingEnabled = true;
this.cmbGND1.Location = new System.Drawing.Point(14, 584);
this.cmbGND1.Margin = new System.Windows.Forms.Padding(2);
this.cmbGND1.Name = "cmbGND1";
this.cmbGND1.Size = new System.Drawing.Size(112, 21);
this.cmbGND1.TabIndex = 180;
//
// cmb5V
//
this.cmb5V.Enabled = false;
this.cmb5V.FormattingEnabled = true;
this.cmb5V.Location = new System.Drawing.Point(14, 560);
this.cmb5V.Margin = new System.Windows.Forms.Padding(2);
this.cmb5V.Name = "cmb5V";
this.cmb5V.Size = new System.Drawing.Size(112, 21);
this.cmb5V.TabIndex = 179;
//
// cmbGPIO14
//
this.cmbGPIO14.FormattingEnabled = true;
this.cmbGPIO14.Location = new System.Drawing.Point(14, 535);
this.cmbGPIO14.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO14.Name = "cmbGPIO14";
this.cmbGPIO14.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO14.TabIndex = 178;
//
// cmbGND2
//
this.cmbGND2.Enabled = false;
this.cmbGND2.FormattingEnabled = true;
this.cmbGND2.Location = new System.Drawing.Point(438, 584);
this.cmbGND2.Margin = new System.Windows.Forms.Padding(2);
this.cmbGND2.Name = "cmbGND2";
this.cmbGND2.Size = new System.Drawing.Size(112, 21);
this.cmbGND2.TabIndex = 177;
//
// cmbGND3
//
this.cmbGND3.Enabled = false;
this.cmbGND3.FormattingEnabled = true;
this.cmbGND3.Location = new System.Drawing.Point(438, 560);
this.cmbGND3.Margin = new System.Windows.Forms.Padding(2);
this.cmbGND3.Name = "cmbGND3";
this.cmbGND3.Size = new System.Drawing.Size(112, 21);
this.cmbGND3.TabIndex = 176;
//
// cmbGPIO19
//
this.cmbGPIO19.FormattingEnabled = true;
this.cmbGPIO19.Location = new System.Drawing.Point(438, 535);
this.cmbGPIO19.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO19.Name = "cmbGPIO19";
this.cmbGPIO19.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO19.TabIndex = 175;
//
// btnSalvar
//
this.btnSalvar.Location = new System.Drawing.Point(438, 639);
this.btnSalvar.Margin = new System.Windows.Forms.Padding(2);
this.btnSalvar.Name = "btnSalvar";
this.btnSalvar.Size = new System.Drawing.Size(111, 32);
this.btnSalvar.TabIndex = 174;
this.btnSalvar.Text = "Salvar";
this.btnSalvar.UseVisualStyleBackColor = true;
this.btnSalvar.Click += new System.EventHandler(this.btnSalvar_Click);
//
// cmbGPIO20
//
this.cmbGPIO20.FormattingEnabled = true;
this.cmbGPIO20.Location = new System.Drawing.Point(438, 511);
this.cmbGPIO20.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO20.Name = "cmbGPIO20";
this.cmbGPIO20.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO20.TabIndex = 173;
//
// cmbGPIO21
//
this.cmbGPIO21.FormattingEnabled = true;
this.cmbGPIO21.Location = new System.Drawing.Point(438, 487);
this.cmbGPIO21.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO21.Name = "cmbGPIO21";
this.cmbGPIO21.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO21.TabIndex = 172;
//
// cmbGPIO47
//
this.cmbGPIO47.FormattingEnabled = true;
this.cmbGPIO47.Location = new System.Drawing.Point(438, 462);
this.cmbGPIO47.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO47.Name = "cmbGPIO47";
this.cmbGPIO47.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO47.TabIndex = 171;
//
// cmbGPIO48
//
this.cmbGPIO48.FormattingEnabled = true;
this.cmbGPIO48.Location = new System.Drawing.Point(438, 438);
this.cmbGPIO48.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO48.Name = "cmbGPIO48";
this.cmbGPIO48.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO48.TabIndex = 170;
//
// cmbGPIO45
//
this.cmbGPIO45.FormattingEnabled = true;
this.cmbGPIO45.Location = new System.Drawing.Point(438, 414);
this.cmbGPIO45.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO45.Name = "cmbGPIO45";
this.cmbGPIO45.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO45.TabIndex = 169;
//
// cmbGPIO0
//
this.cmbGPIO0.FormattingEnabled = true;
this.cmbGPIO0.Location = new System.Drawing.Point(438, 389);
this.cmbGPIO0.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO0.Name = "cmbGPIO0";
this.cmbGPIO0.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO0.TabIndex = 168;
//
// cmbGPIO35
//
this.cmbGPIO35.FormattingEnabled = true;
this.cmbGPIO35.Location = new System.Drawing.Point(438, 365);
this.cmbGPIO35.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO35.Name = "cmbGPIO35";
this.cmbGPIO35.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO35.TabIndex = 167;
//
// cmbGPIO36
//
this.cmbGPIO36.FormattingEnabled = true;
this.cmbGPIO36.Location = new System.Drawing.Point(438, 340);
this.cmbGPIO36.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO36.Name = "cmbGPIO36";
this.cmbGPIO36.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO36.TabIndex = 166;
//
// cmbGPIO37
//
this.cmbGPIO37.FormattingEnabled = true;
this.cmbGPIO37.Location = new System.Drawing.Point(438, 316);
this.cmbGPIO37.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO37.Name = "cmbGPIO37";
this.cmbGPIO37.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO37.TabIndex = 165;
//
// cmbGPIO38
//
this.cmbGPIO38.FormattingEnabled = true;
this.cmbGPIO38.Location = new System.Drawing.Point(438, 292);
this.cmbGPIO38.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO38.Name = "cmbGPIO38";
this.cmbGPIO38.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO38.TabIndex = 164;
//
// cmbGPIO39
//
this.cmbGPIO39.FormattingEnabled = true;
this.cmbGPIO39.Location = new System.Drawing.Point(438, 267);
this.cmbGPIO39.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO39.Name = "cmbGPIO39";
this.cmbGPIO39.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO39.TabIndex = 163;
//
// cmbGPIO40
//
this.cmbGPIO40.FormattingEnabled = true;
this.cmbGPIO40.Location = new System.Drawing.Point(438, 243);
this.cmbGPIO40.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO40.Name = "cmbGPIO40";
this.cmbGPIO40.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO40.TabIndex = 162;
//
// cmbGPIO41
//
this.cmbGPIO41.FormattingEnabled = true;
this.cmbGPIO41.Location = new System.Drawing.Point(438, 219);
this.cmbGPIO41.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO41.Name = "cmbGPIO41";
this.cmbGPIO41.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO41.TabIndex = 161;
//
// cmbGPIO42
//
this.cmbGPIO42.FormattingEnabled = true;
this.cmbGPIO42.Location = new System.Drawing.Point(438, 194);
this.cmbGPIO42.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO42.Name = "cmbGPIO42";
this.cmbGPIO42.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO42.TabIndex = 160;
//
// cmbGPIO2
//
this.cmbGPIO2.FormattingEnabled = true;
this.cmbGPIO2.Location = new System.Drawing.Point(438, 170);
this.cmbGPIO2.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO2.Name = "cmbGPIO2";
this.cmbGPIO2.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO2.TabIndex = 159;
//
// cmbGPIO1
//
this.cmbGPIO1.FormattingEnabled = true;
this.cmbGPIO1.Location = new System.Drawing.Point(438, 145);
this.cmbGPIO1.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO1.Name = "cmbGPIO1";
this.cmbGPIO1.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO1.TabIndex = 158;
//
// cmbRX
//
this.cmbRX.Enabled = false;
this.cmbRX.FormattingEnabled = true;
this.cmbRX.Location = new System.Drawing.Point(438, 121);
this.cmbRX.Margin = new System.Windows.Forms.Padding(2);
this.cmbRX.Name = "cmbRX";
this.cmbRX.Size = new System.Drawing.Size(112, 21);
this.cmbRX.TabIndex = 157;
//
// cmbTX
//
this.cmbTX.Enabled = false;
this.cmbTX.FormattingEnabled = true;
this.cmbTX.Location = new System.Drawing.Point(438, 97);
this.cmbTX.Margin = new System.Windows.Forms.Padding(2);
this.cmbTX.Name = "cmbTX";
this.cmbTX.Size = new System.Drawing.Size(112, 21);
this.cmbTX.TabIndex = 156;
//
// cmbGND4
//
this.cmbGND4.Enabled = false;
this.cmbGND4.FormattingEnabled = true;
this.cmbGND4.Location = new System.Drawing.Point(438, 72);
this.cmbGND4.Margin = new System.Windows.Forms.Padding(2);
this.cmbGND4.Name = "cmbGND4";
this.cmbGND4.Size = new System.Drawing.Size(112, 21);
this.cmbGND4.TabIndex = 155;
//
// cmbGPIO13
//
this.cmbGPIO13.FormattingEnabled = true;
this.cmbGPIO13.Location = new System.Drawing.Point(14, 511);
this.cmbGPIO13.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO13.Name = "cmbGPIO13";
this.cmbGPIO13.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO13.TabIndex = 154;
//
// cmbGPIO12
//
this.cmbGPIO12.FormattingEnabled = true;
this.cmbGPIO12.Location = new System.Drawing.Point(14, 487);
this.cmbGPIO12.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO12.Name = "cmbGPIO12";
this.cmbGPIO12.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO12.TabIndex = 153;
//
// cmbGPIO11
//
this.cmbGPIO11.FormattingEnabled = true;
this.cmbGPIO11.Location = new System.Drawing.Point(14, 462);
this.cmbGPIO11.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO11.Name = "cmbGPIO11";
this.cmbGPIO11.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO11.TabIndex = 152;
//
// cmbGPIO10
//
this.cmbGPIO10.FormattingEnabled = true;
this.cmbGPIO10.Location = new System.Drawing.Point(14, 438);
this.cmbGPIO10.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO10.Name = "cmbGPIO10";
this.cmbGPIO10.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO10.TabIndex = 151;
//
// cmbGPIO9
//
this.cmbGPIO9.FormattingEnabled = true;
this.cmbGPIO9.Location = new System.Drawing.Point(14, 414);
this.cmbGPIO9.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO9.Name = "cmbGPIO9";
this.cmbGPIO9.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO9.TabIndex = 150;
//
// cmbGPIO46
//
this.cmbGPIO46.FormattingEnabled = true;
this.cmbGPIO46.Location = new System.Drawing.Point(14, 389);
this.cmbGPIO46.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO46.Name = "cmbGPIO46";
this.cmbGPIO46.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO46.TabIndex = 149;
//
// cmbGPIO3
//
this.cmbGPIO3.FormattingEnabled = true;
this.cmbGPIO3.Location = new System.Drawing.Point(14, 365);
this.cmbGPIO3.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO3.Name = "cmbGPIO3";
this.cmbGPIO3.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO3.TabIndex = 148;
//
// cmbGPIO8
//
this.cmbGPIO8.FormattingEnabled = true;
this.cmbGPIO8.Location = new System.Drawing.Point(14, 340);
this.cmbGPIO8.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO8.Name = "cmbGPIO8";
this.cmbGPIO8.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO8.TabIndex = 147;
//
// cmbGPIO18
//
this.cmbGPIO18.FormattingEnabled = true;
this.cmbGPIO18.Location = new System.Drawing.Point(14, 316);
this.cmbGPIO18.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO18.Name = "cmbGPIO18";
this.cmbGPIO18.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO18.TabIndex = 146;
//
// cmbGPIO17
//
this.cmbGPIO17.FormattingEnabled = true;
this.cmbGPIO17.Location = new System.Drawing.Point(14, 292);
this.cmbGPIO17.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO17.Name = "cmbGPIO17";
this.cmbGPIO17.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO17.TabIndex = 145;
//
// cmbGPIO16
//
this.cmbGPIO16.FormattingEnabled = true;
this.cmbGPIO16.Location = new System.Drawing.Point(14, 267);
this.cmbGPIO16.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO16.Name = "cmbGPIO16";
this.cmbGPIO16.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO16.TabIndex = 144;
//
// cmbGPIO15
//
this.cmbGPIO15.FormattingEnabled = true;
this.cmbGPIO15.Location = new System.Drawing.Point(14, 243);
this.cmbGPIO15.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO15.Name = "cmbGPIO15";
this.cmbGPIO15.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO15.TabIndex = 143;
//
// cmbGPIO7
//
this.cmbGPIO7.FormattingEnabled = true;
this.cmbGPIO7.Location = new System.Drawing.Point(14, 219);
this.cmbGPIO7.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO7.Name = "cmbGPIO7";
this.cmbGPIO7.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO7.TabIndex = 142;
//
// cmbGPIO6
//
this.cmbGPIO6.FormattingEnabled = true;
this.cmbGPIO6.Location = new System.Drawing.Point(14, 194);
this.cmbGPIO6.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO6.Name = "cmbGPIO6";
this.cmbGPIO6.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO6.TabIndex = 141;
//
// cmbGPIO5
//
this.cmbGPIO5.FormattingEnabled = true;
this.cmbGPIO5.Location = new System.Drawing.Point(14, 170);
this.cmbGPIO5.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO5.Name = "cmbGPIO5";
this.cmbGPIO5.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO5.TabIndex = 140;
//
// cmbGPIO4
//
this.cmbGPIO4.FormattingEnabled = true;
this.cmbGPIO4.Location = new System.Drawing.Point(14, 145);
this.cmbGPIO4.Margin = new System.Windows.Forms.Padding(2);
this.cmbGPIO4.Name = "cmbGPIO4";
this.cmbGPIO4.Size = new System.Drawing.Size(112, 21);
this.cmbGPIO4.TabIndex = 139;
//
// cmbRst
//
this.cmbRst.Enabled = false;
this.cmbRst.FormattingEnabled = true;
this.cmbRst.Location = new System.Drawing.Point(14, 121);
this.cmbRst.Margin = new System.Windows.Forms.Padding(2);
this.cmbRst.Name = "cmbRst";
this.cmbRst.Size = new System.Drawing.Size(112, 21);
this.cmbRst.TabIndex = 138;
//
// cmb3v3_2
//
this.cmb3v3_2.Enabled = false;
this.cmb3v3_2.FormattingEnabled = true;
this.cmb3v3_2.Location = new System.Drawing.Point(14, 97);
this.cmb3v3_2.Margin = new System.Windows.Forms.Padding(2);
this.cmb3v3_2.Name = "cmb3v3_2";
this.cmb3v3_2.Size = new System.Drawing.Size(112, 21);
this.cmb3v3_2.TabIndex = 137;
//
// cmb3v3_1
//
this.cmb3v3_1.Enabled = false;
this.cmb3v3_1.FormattingEnabled = true;
this.cmb3v3_1.Location = new System.Drawing.Point(14, 72);
this.cmb3v3_1.Margin = new System.Windows.Forms.Padding(2);
this.cmb3v3_1.Name = "cmb3v3_1";
this.cmb3v3_1.Size = new System.Drawing.Size(112, 21);
this.cmb3v3_1.TabIndex = 136;
//
// imgESP32
//
this.imgESP32.Image = ((System.Drawing.Image)(resources.GetObject("imgESP32.Image")));
this.imgESP32.Location = new System.Drawing.Point(129, -2);
this.imgESP32.Margin = new System.Windows.Forms.Padding(2);
this.imgESP32.Name = "imgESP32";
this.imgESP32.Size = new System.Drawing.Size(304, 688);
this.imgESP32.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.imgESP32.TabIndex = 135;
this.imgESP32.TabStop = false;
//
// frmSenConfig2
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(964, 693);
this.Controls.Add(this.lblPinout);
this.Controls.Add(this.cmbGND1);
this.Controls.Add(this.cmb5V);
this.Controls.Add(this.cmbGPIO14);
this.Controls.Add(this.cmbGND2);
this.Controls.Add(this.cmbGND3);
this.Controls.Add(this.cmbGPIO19);
this.Controls.Add(this.btnSalvar);
this.Controls.Add(this.cmbGPIO20);
this.Controls.Add(this.cmbGPIO21);
this.Controls.Add(this.cmbGPIO47);
this.Controls.Add(this.cmbGPIO48);
this.Controls.Add(this.cmbGPIO45);
this.Controls.Add(this.cmbGPIO0);
this.Controls.Add(this.cmbGPIO35);
this.Controls.Add(this.cmbGPIO36);
this.Controls.Add(this.cmbGPIO37);
this.Controls.Add(this.cmbGPIO38);
this.Controls.Add(this.cmbGPIO39);
this.Controls.Add(this.cmbGPIO40);
this.Controls.Add(this.cmbGPIO41);
this.Controls.Add(this.cmbGPIO42);
this.Controls.Add(this.cmbGPIO2);
this.Controls.Add(this.cmbGPIO1);
this.Controls.Add(this.cmbRX);
this.Controls.Add(this.cmbTX);
this.Controls.Add(this.cmbGND4);
this.Controls.Add(this.cmbGPIO13);
this.Controls.Add(this.cmbGPIO12);
this.Controls.Add(this.cmbGPIO11);
this.Controls.Add(this.cmbGPIO10);
this.Controls.Add(this.cmbGPIO9);
this.Controls.Add(this.cmbGPIO46);
this.Controls.Add(this.cmbGPIO3);
this.Controls.Add(this.cmbGPIO8);
this.Controls.Add(this.cmbGPIO18);
this.Controls.Add(this.cmbGPIO17);
this.Controls.Add(this.cmbGPIO16);
this.Controls.Add(this.cmbGPIO15);
this.Controls.Add(this.cmbGPIO7);
this.Controls.Add(this.cmbGPIO6);
this.Controls.Add(this.cmbGPIO5);
this.Controls.Add(this.cmbGPIO4);
this.Controls.Add(this.cmbRst);
this.Controls.Add(this.cmb3v3_2);
this.Controls.Add(this.cmb3v3_1);
this.Controls.Add(this.imgESP32);
this.Name = "frmSenConfig2";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Sensoriamento - Parametrização";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frmSenConfig2_FormClosing);
this.Load += new System.EventHandler(this.frmSenConfig2_Load);
((System.ComponentModel.ISupportInitialize)(this.imgESP32)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label lblPinout;
private System.Windows.Forms.ComboBox cmbGND1;
private System.Windows.Forms.ComboBox cmb5V;
private System.Windows.Forms.ComboBox cmbGPIO14;
private System.Windows.Forms.ComboBox cmbGND2;
private System.Windows.Forms.ComboBox cmbGND3;
private System.Windows.Forms.ComboBox cmbGPIO19;
private System.Windows.Forms.Button btnSalvar;
private System.Windows.Forms.ComboBox cmbGPIO20;
private System.Windows.Forms.ComboBox cmbGPIO21;
private System.Windows.Forms.ComboBox cmbGPIO47;
private System.Windows.Forms.ComboBox cmbGPIO48;
private System.Windows.Forms.ComboBox cmbGPIO45;
private System.Windows.Forms.ComboBox cmbGPIO0;
private System.Windows.Forms.ComboBox cmbGPIO35;
private System.Windows.Forms.ComboBox cmbGPIO36;
private System.Windows.Forms.ComboBox cmbGPIO37;
private System.Windows.Forms.ComboBox cmbGPIO38;
private System.Windows.Forms.ComboBox cmbGPIO39;
private System.Windows.Forms.ComboBox cmbGPIO40;
private System.Windows.Forms.ComboBox cmbGPIO41;
private System.Windows.Forms.ComboBox cmbGPIO42;
private System.Windows.Forms.ComboBox cmbGPIO2;
private System.Windows.Forms.ComboBox cmbGPIO1;
private System.Windows.Forms.ComboBox cmbRX;
private System.Windows.Forms.ComboBox cmbTX;
private System.Windows.Forms.ComboBox cmbGND4;
private System.Windows.Forms.ComboBox cmbGPIO13;
private System.Windows.Forms.ComboBox cmbGPIO12;
private System.Windows.Forms.ComboBox cmbGPIO11;
private System.Windows.Forms.ComboBox cmbGPIO10;
private System.Windows.Forms.ComboBox cmbGPIO9;
private System.Windows.Forms.ComboBox cmbGPIO46;
private System.Windows.Forms.ComboBox cmbGPIO3;
private System.Windows.Forms.ComboBox cmbGPIO8;
private System.Windows.Forms.ComboBox cmbGPIO18;
private System.Windows.Forms.ComboBox cmbGPIO17;
private System.Windows.Forms.ComboBox cmbGPIO16;
private System.Windows.Forms.ComboBox cmbGPIO15;
private System.Windows.Forms.ComboBox cmbGPIO7;
private System.Windows.Forms.ComboBox cmbGPIO6;
private System.Windows.Forms.ComboBox cmbGPIO5;
private System.Windows.Forms.ComboBox cmbGPIO4;
private System.Windows.Forms.ComboBox cmbRst;
private System.Windows.Forms.ComboBox cmb3v3_2;
private System.Windows.Forms.ComboBox cmb3v3_1;
private System.Windows.Forms.PictureBox imgESP32;
}
}

View File

@ -0,0 +1,98 @@
using AgroBase.Comum;
using AgroBase.Models;
using AgroBase.Models.Modules;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static AgroBase.Models.Enuns;
namespace AgroBase.Forms.Sensoriamento
{
public partial class frmSenConfig2 : Form
{
DispositivosService<SensoriamentoModel> Disp = (DispositivosService<SensoriamentoModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == T_Code.Sen);
public frmSenConfig2()
{
InitializeComponent();
}
private void frmSenConfig2_Load(object sender, EventArgs e)
{
if (Disp == null)
{
return;
}
List<string> Pinos = new List<string>()
{
Enum.GetName(typeof(FuncoesPinout), FuncoesPinout.NaoConectado),
};
SensoriamentoModel.Funcoes.ForEach(x => Pinos.Add(Enum.GetName(typeof(FuncoesPinout), x)));
foreach (var Sensor in Disp.Dados.Sensores)
{
Sensor.Funcoes.ForEach(x => Pinos.Add(Sensor.ID + " " + Enum.GetName(typeof(FuncoesPinout), x)));
}
List<ComboBox> cmbs = this.Controls.OfType<ComboBox>().Where(x => x.Name.Contains("cmbGPIO") && x.Enabled).ToList();
foreach (var cmb in cmbs)
{
cmb.SelectedIndexChanged += Cmb_SelectedIndexChanged;
cmb.Items.Clear();
Pinos.ForEach(x => cmb.Items.Add(x));
int pino = int.Parse(cmb.Name.Replace("cmbGPIO", ""));
cmb.SelectedIndex = 0;
var Selecionado = SensoriamentoModel.Pinout.FirstOrDefault(x => x.Pino == pino);
if (Selecionado != null) cmb.SelectedItem = (Selecionado.Funcao != FuncoesPinout.Geral ? Selecionado.ComponenteID + " " : "") + Enum.GetName(typeof(FuncoesPinout), Selecionado.Funcao);
}
}
private void frmSenConfig2_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
this.Visible = false;
}
private void Cmb_SelectedIndexChanged(object sender, EventArgs e)
{
var cmb = (ComboBox)sender;
this.Controls.OfType<ComboBox>().Where(x => x.Name != cmb.Name && x.SelectedItem != null && x.SelectedItem.ToString() == cmb.SelectedItem.ToString()).ToList().ForEach(x => x.SelectedIndex = 0);
}
private void btnSalvar_Click(object sender, EventArgs e)
{
if (Disp == null)
{
return;
}
SensoriamentoModel.Pinout.ForEach(x =>
{
x.ComponenteID = "";
x.Funcao = FuncoesPinout.NaoConectado;
});
List<ComboBox> cmbs = this.Controls.OfType<ComboBox>().Where(x => x.Enabled).ToList();
foreach (var cmb in cmbs)
{
int pino = int.Parse(cmb.Name.Replace("cmbGPIO", ""));
string ComponenteID = cmb.SelectedItem.ToString().Split(' ').Length > 1 ? cmb.SelectedItem.ToString().Split(' ')[0] : "";
FuncoesPinout Funcao = (FuncoesPinout)Enum.Parse(typeof(FuncoesPinout), ComponenteID != "" ? (cmb.SelectedItem.ToString().Split(' ')[1]) : cmb.SelectedItem.ToString());
SensoriamentoModel.Pinout.FirstOrDefault(x => x.Pino == pino).Funcao = Funcao;
SensoriamentoModel.Pinout.FirstOrDefault(x => x.Pino == pino).ComponenteID = ComponenteID;
}
Disp.Dados.SalvarPinout(SensoriamentoModel.Pinout, "pinout" + Enum.GetName(typeof(T_Code), Disp.Dispositivo) + ".pin");
}
}
}

View File

@ -0,0 +1,991 @@
<?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>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="imgESP32.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
/9j/4AAQSkZJRgABAQEAeAB4AAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcI
CQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwM
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAI+AQ4DASIAAhEBAxEB/8QA
HwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh
MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVW
V1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG
x8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQF
BgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV
YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq
8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKKKACiiigAooooAKbJIsKFmZVVeSScAU6vDf8AgpbqE+k/
sE/Fa5tZpLe4g0Cd45I2KshGOQRyKAPZl8Q6e3S+sz24mX/Gl/t+x/5/bT/v8v8AjX8hEPxi8X317FH/
AMJNr26Yqo/0+Xqfxrul0D4hPDu/4TDUg393+0Jjj9aAP6vf7fsf+f20/wC/y/40f2/Y/wDP7af9/l/x
r+UD+wPiL/0OGpf+B03+NMn0f4iW8MkjeMNSIjRnwL+YZwM9zQB/WF/b9j/z+2n/AH+X/Gj+37H/AJ/b
T/v8v+NfyBD4zeLhkHxPr2VOD/p8n+NA+M3i4kD/AISfXeSBzfycfrQB/X7/AG/Y/wDP7af9/l/xo/t+
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
GygD/9k=
</value>
</data>
</root>

File diff suppressed because it is too large Load Diff

194
AgroBase/AgroBase/Forms/frmGPS.Designer.cs generated Normal file
View File

@ -0,0 +1,194 @@
namespace AgroBase.Forms
{
partial class frmGPS
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmGPS));
this.pnlMapa = new System.Windows.Forms.Panel();
this.picLoading = new System.Windows.Forms.PictureBox();
this.pnlInformacoes = new System.Windows.Forms.Panel();
this.lblLatitude = new System.Windows.Forms.Label();
this.lblLongitude = new System.Windows.Forms.Label();
this.lblPrecisao = new System.Windows.Forms.Label();
this.lblSatelites = new System.Windows.Forms.Label();
this.lblDatahora = new System.Windows.Forms.Label();
this.lblAltitude = new System.Windows.Forms.Label();
this.lblVelocidade = new System.Windows.Forms.Label();
this.pnlMapa.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.picLoading)).BeginInit();
this.pnlInformacoes.SuspendLayout();
this.SuspendLayout();
//
// pnlMapa
//
this.pnlMapa.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.pnlMapa.Controls.Add(this.picLoading);
this.pnlMapa.Location = new System.Drawing.Point(9, 10);
this.pnlMapa.Margin = new System.Windows.Forms.Padding(2);
this.pnlMapa.Name = "pnlMapa";
this.pnlMapa.Size = new System.Drawing.Size(772, 464);
this.pnlMapa.TabIndex = 2;
//
// picLoading
//
this.picLoading.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.picLoading.BackColor = System.Drawing.Color.Transparent;
this.picLoading.Image = ((System.Drawing.Image)(resources.GetObject("picLoading.Image")));
this.picLoading.Location = new System.Drawing.Point(194, 24);
this.picLoading.Margin = new System.Windows.Forms.Padding(2);
this.picLoading.Name = "picLoading";
this.picLoading.Size = new System.Drawing.Size(384, 416);
this.picLoading.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.picLoading.TabIndex = 2;
this.picLoading.TabStop = false;
this.picLoading.Visible = false;
//
// pnlInformacoes
//
this.pnlInformacoes.Controls.Add(this.lblVelocidade);
this.pnlInformacoes.Controls.Add(this.lblAltitude);
this.pnlInformacoes.Controls.Add(this.lblDatahora);
this.pnlInformacoes.Controls.Add(this.lblSatelites);
this.pnlInformacoes.Controls.Add(this.lblPrecisao);
this.pnlInformacoes.Controls.Add(this.lblLongitude);
this.pnlInformacoes.Controls.Add(this.lblLatitude);
this.pnlInformacoes.Dock = System.Windows.Forms.DockStyle.Bottom;
this.pnlInformacoes.Location = new System.Drawing.Point(0, 479);
this.pnlInformacoes.Margin = new System.Windows.Forms.Padding(2);
this.pnlInformacoes.Name = "pnlInformacoes";
this.pnlInformacoes.Size = new System.Drawing.Size(790, 46);
this.pnlInformacoes.TabIndex = 3;
//
// lblLatitude
//
this.lblLatitude.AutoSize = true;
this.lblLatitude.Location = new System.Drawing.Point(9, 17);
this.lblLatitude.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblLatitude.Name = "lblLatitude";
this.lblLatitude.Size = new System.Drawing.Size(57, 13);
this.lblLatitude.TabIndex = 1;
this.lblLatitude.Text = "Latitude: 0";
//
// lblLongitude
//
this.lblLongitude.AutoSize = true;
this.lblLongitude.Location = new System.Drawing.Point(131, 17);
this.lblLongitude.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblLongitude.Name = "lblLongitude";
this.lblLongitude.Size = new System.Drawing.Size(66, 13);
this.lblLongitude.TabIndex = 2;
this.lblLongitude.Text = "Longitude: 0";
//
// lblPrecisao
//
this.lblPrecisao.AutoSize = true;
this.lblPrecisao.Location = new System.Drawing.Point(497, 17);
this.lblPrecisao.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblPrecisao.Name = "lblPrecisao";
this.lblPrecisao.Size = new System.Drawing.Size(60, 13);
this.lblPrecisao.TabIndex = 3;
this.lblPrecisao.Text = "Precisão: 0";
//
// lblSatelites
//
this.lblSatelites.AutoSize = true;
this.lblSatelites.Location = new System.Drawing.Point(584, 17);
this.lblSatelites.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblSatelites.Name = "lblSatelites";
this.lblSatelites.Size = new System.Drawing.Size(59, 13);
this.lblSatelites.TabIndex = 4;
this.lblSatelites.Text = "Satélites: 0";
//
// lblDatahora
//
this.lblDatahora.AutoSize = true;
this.lblDatahora.Location = new System.Drawing.Point(669, 17);
this.lblDatahora.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblDatahora.Name = "lblDatahora";
this.lblDatahora.Size = new System.Drawing.Size(77, 13);
this.lblDatahora.TabIndex = 5;
this.lblDatahora.Text = "Ultima Leitura: ";
//
// lblAltitude
//
this.lblAltitude.AutoSize = true;
this.lblAltitude.Location = new System.Drawing.Point(283, 17);
this.lblAltitude.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblAltitude.Name = "lblAltitude";
this.lblAltitude.Size = new System.Drawing.Size(54, 13);
this.lblAltitude.TabIndex = 6;
this.lblAltitude.Text = "Altitude: 0";
//
// lblVelocidade
//
this.lblVelocidade.AutoSize = true;
this.lblVelocidade.Location = new System.Drawing.Point(365, 17);
this.lblVelocidade.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblVelocidade.Name = "lblVelocidade";
this.lblVelocidade.Size = new System.Drawing.Size(72, 13);
this.lblVelocidade.TabIndex = 7;
this.lblVelocidade.Text = "Velocidade: 0";
//
// frmGPS
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(790, 525);
this.Controls.Add(this.pnlInformacoes);
this.Controls.Add(this.pnlMapa);
this.Name = "frmGPS";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "GPS";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frmGPS_FormClosing);
this.Load += new System.EventHandler(this.frmGPS_Load);
this.pnlMapa.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.picLoading)).EndInit();
this.pnlInformacoes.ResumeLayout(false);
this.pnlInformacoes.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Panel pnlMapa;
private System.Windows.Forms.PictureBox picLoading;
private System.Windows.Forms.Panel pnlInformacoes;
private System.Windows.Forms.Label lblLatitude;
private System.Windows.Forms.Label lblDatahora;
private System.Windows.Forms.Label lblSatelites;
private System.Windows.Forms.Label lblPrecisao;
private System.Windows.Forms.Label lblLongitude;
private System.Windows.Forms.Label lblVelocidade;
private System.Windows.Forms.Label lblAltitude;
}
}

View File

@ -0,0 +1,89 @@
using AgroBase.Services;
using CefSharp;
using CefSharp.DevTools.IO;
using CefSharp.WinForms;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AgroBase.Forms
{
public partial class frmGPS : Form
{
private ChromiumWebBrowser chromiumWebBrowser;
private MapasService mapaService = new MapasService();
Timer tmrUpdate = new Timer();
public frmGPS()
{
InitializeComponent();
}
private void frmGPS_Load(object sender, EventArgs e)
{
IniciarMapa();
}
private void frmGPS_FormClosing(object sender, FormClosingEventArgs e)
{
try
{
GPSService.PararRecepcaoDados();
tmrUpdate.Stop();
mapaService.pythonProcess.Kill();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
private void IniciarMapa()
{
GPSService.IniciarRecepcaoDados();
mapaService.CarregarMapaGPS(MapasVariaveisModel.NomeArquivoMapaGPS);
picLoading.Visible = true;
tmrUpdate = new Timer() { Interval = 1000 };
tmrUpdate.Tick -= Tmr_Tick;
tmrUpdate.Tick += Tmr_Tick;
tmrUpdate.Start();
}
private void Tmr_Tick(object sender, EventArgs e)
{
if (picLoading.Visible)
{
picLoading.Visible = false;
chromiumWebBrowser = new ChromiumWebBrowser(mapaService.MapaUrl);
this.pnlMapa.Controls.Add(chromiumWebBrowser);
chromiumWebBrowser.Dock = DockStyle.Fill;
}
else if (!picLoading.Visible && GPSService.UltimaLeitura != null)
{
mapaService.AtualizarPosicaoMapaGPS(GPSService.UltimaLeitura.Latitude, GPSService.UltimaLeitura.Longitude);
chromiumWebBrowser.Reload();
lblDatahora.Text = "Ultima Leitura: " + GPSService.UltimaLeitura.DataHora.ToString("dd/MM/yyyy HH:mm:ss");
lblLatitude.Text = "Latitude: " + GPSService.UltimaLeitura.Latitude;
lblLongitude.Text = "Longitude: " + GPSService.UltimaLeitura.Longitude;
lblPrecisao.Text = "Precisão: " + GPSService.UltimaLeitura.PrecisaoHorizontal;
lblSatelites.Text = "Satelites: " + GPSService.UltimaLeitura.NumeroSatelites;
lblVelocidade.Text = "Velocidade: " + GPSService.UltimaLeitura.Velocidade;
lblAltitude.Text = "Altitude: " + GPSService.UltimaLeitura.Altitude;
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -31,13 +31,13 @@ namespace AgroBase.Forms
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmMapa));
this.pnlMapa = new System.Windows.Forms.Panel();
this.picLoading = new System.Windows.Forms.PictureBox();
this.pnlBotoes = new System.Windows.Forms.Panel();
this.lblMapa = new System.Windows.Forms.Label();
this.btnCarregar = new System.Windows.Forms.Button();
this.picLoading = new System.Windows.Forms.PictureBox();
this.pnlMapa.SuspendLayout();
this.pnlBotoes.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.picLoading)).BeginInit();
this.pnlBotoes.SuspendLayout();
this.SuspendLayout();
//
// pnlMapa
@ -46,41 +46,12 @@ namespace AgroBase.Forms
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.pnlMapa.Controls.Add(this.picLoading);
this.pnlMapa.Location = new System.Drawing.Point(12, 12);
this.pnlMapa.Location = new System.Drawing.Point(9, 10);
this.pnlMapa.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.pnlMapa.Name = "pnlMapa";
this.pnlMapa.Size = new System.Drawing.Size(1030, 571);
this.pnlMapa.Size = new System.Drawing.Size(772, 464);
this.pnlMapa.TabIndex = 1;
//
// pnlBotoes
//
this.pnlBotoes.Controls.Add(this.lblMapa);
this.pnlBotoes.Controls.Add(this.btnCarregar);
this.pnlBotoes.Dock = System.Windows.Forms.DockStyle.Bottom;
this.pnlBotoes.Location = new System.Drawing.Point(0, 589);
this.pnlBotoes.Name = "pnlBotoes";
this.pnlBotoes.Size = new System.Drawing.Size(1054, 57);
this.pnlBotoes.TabIndex = 2;
//
// lblMapa
//
this.lblMapa.AutoSize = true;
this.lblMapa.Location = new System.Drawing.Point(12, 21);
this.lblMapa.Name = "lblMapa";
this.lblMapa.Size = new System.Drawing.Size(120, 17);
this.lblMapa.TabIndex = 1;
this.lblMapa.Text = "Mapa carregado: ";
//
// btnCarregar
//
this.btnCarregar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnCarregar.Location = new System.Drawing.Point(912, 13);
this.btnCarregar.Name = "btnCarregar";
this.btnCarregar.Size = new System.Drawing.Size(130, 32);
this.btnCarregar.TabIndex = 0;
this.btnCarregar.Text = "Carregar mapa";
this.btnCarregar.UseVisualStyleBackColor = true;
this.btnCarregar.Click += new System.EventHandler(this.btnCarregar_Click);
//
// picLoading
//
this.picLoading.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
@ -88,28 +59,63 @@ namespace AgroBase.Forms
| System.Windows.Forms.AnchorStyles.Right)));
this.picLoading.BackColor = System.Drawing.Color.Transparent;
this.picLoading.Image = ((System.Drawing.Image)(resources.GetObject("picLoading.Image")));
this.picLoading.Location = new System.Drawing.Point(259, 29);
this.picLoading.Location = new System.Drawing.Point(194, 24);
this.picLoading.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.picLoading.Name = "picLoading";
this.picLoading.Size = new System.Drawing.Size(512, 512);
this.picLoading.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.picLoading.Size = new System.Drawing.Size(384, 416);
this.picLoading.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.picLoading.TabIndex = 2;
this.picLoading.TabStop = false;
this.picLoading.Visible = false;
//
// pnlBotoes
//
this.pnlBotoes.Controls.Add(this.lblMapa);
this.pnlBotoes.Controls.Add(this.btnCarregar);
this.pnlBotoes.Dock = System.Windows.Forms.DockStyle.Bottom;
this.pnlBotoes.Location = new System.Drawing.Point(0, 479);
this.pnlBotoes.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.pnlBotoes.Name = "pnlBotoes";
this.pnlBotoes.Size = new System.Drawing.Size(790, 46);
this.pnlBotoes.TabIndex = 2;
//
// lblMapa
//
this.lblMapa.AutoSize = true;
this.lblMapa.Location = new System.Drawing.Point(9, 17);
this.lblMapa.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblMapa.Name = "lblMapa";
this.lblMapa.Size = new System.Drawing.Size(91, 13);
this.lblMapa.TabIndex = 1;
this.lblMapa.Text = "Mapa carregado: ";
//
// btnCarregar
//
this.btnCarregar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnCarregar.Location = new System.Drawing.Point(684, 11);
this.btnCarregar.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnCarregar.Name = "btnCarregar";
this.btnCarregar.Size = new System.Drawing.Size(98, 26);
this.btnCarregar.TabIndex = 0;
this.btnCarregar.Text = "Carregar mapa";
this.btnCarregar.UseVisualStyleBackColor = true;
this.btnCarregar.Click += new System.EventHandler(this.btnCarregar_Click);
//
// frmMapa
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1054, 646);
this.ClientSize = new System.Drawing.Size(790, 525);
this.Controls.Add(this.pnlBotoes);
this.Controls.Add(this.pnlMapa);
this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.Name = "frmMapa";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Mapas";
this.pnlMapa.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.picLoading)).EndInit();
this.pnlBotoes.ResumeLayout(false);
this.pnlBotoes.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.picLoading)).EndInit();
this.ResumeLayout(false);
}

View File

@ -29,7 +29,7 @@ namespace AgroBase.Forms
private void btnCarregar_Click(object sender, EventArgs e)
{
mapaService.CarregarMapa();
mapaService.CarregarMapa(MapasVariaveisModel.NomeArquivoMapaInterativo, MapasVariaveisModel.NomeArquivoMapaInterativoSaida);
picLoading.Visible = true;
Timer tmr = new Timer() { Interval = 500 };
tmr.Tick += Tmr_Tick;

View File

@ -49,6 +49,8 @@ namespace AgroBase
this.generalStrip = new System.Windows.Forms.StatusStrip();
this.lblStripJoystick = new System.Windows.Forms.ToolStripStatusLabel();
this.lblStripJoystickComando = new System.Windows.Forms.ToolStripStatusLabel();
this.lblStripOperacao = new System.Windows.Forms.ToolStripStatusLabel();
this.lblStripOperacaoStatus = new System.Windows.Forms.ToolStripStatusLabel();
this.gpbMovimentacao = new System.Windows.Forms.GroupBox();
this.lblKmh = new System.Windows.Forms.Label();
this.trkKmh = new System.Windows.Forms.TrackBar();
@ -79,8 +81,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.lblStripOperacao = new System.Windows.Forms.ToolStripStatusLabel();
this.lblStripOperacaoStatus = new System.Windows.Forms.ToolStripStatusLabel();
this.btnGPS = new System.Windows.Forms.Button();
this.gpbAcoes.SuspendLayout();
this.erroStrip.SuspendLayout();
this.pnlLateral.SuspendLayout();
@ -105,9 +106,11 @@ namespace AgroBase
this.gpbAcoes.Controls.Add(this.erroStrip);
this.gpbAcoes.Controls.Add(this.pnlLateral);
this.gpbAcoes.Dock = System.Windows.Forms.DockStyle.Right;
this.gpbAcoes.Location = new System.Drawing.Point(588, 0);
this.gpbAcoes.Location = new System.Drawing.Point(441, 0);
this.gpbAcoes.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.gpbAcoes.Name = "gpbAcoes";
this.gpbAcoes.Size = new System.Drawing.Size(823, 763);
this.gpbAcoes.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.gpbAcoes.Size = new System.Drawing.Size(617, 609);
this.gpbAcoes.TabIndex = 0;
this.gpbAcoes.TabStop = false;
this.gpbAcoes.Text = "Conexão";
@ -117,16 +120,17 @@ namespace AgroBase
this.erroStrip.ImageScalingSize = new System.Drawing.Size(20, 20);
this.erroStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.lblStripErro});
this.erroStrip.Location = new System.Drawing.Point(3, 734);
this.erroStrip.Location = new System.Drawing.Point(2, 585);
this.erroStrip.Name = "erroStrip";
this.erroStrip.Size = new System.Drawing.Size(817, 26);
this.erroStrip.Padding = new System.Windows.Forms.Padding(1, 0, 10, 0);
this.erroStrip.Size = new System.Drawing.Size(613, 22);
this.erroStrip.TabIndex = 1;
this.erroStrip.Text = "statusStrip1";
//
// lblStripErro
//
this.lblStripErro.Name = "lblStripErro";
this.lblStripErro.Size = new System.Drawing.Size(62, 20);
this.lblStripErro.Size = new System.Drawing.Size(49, 17);
this.lblStripErro.Text = "Iniciado";
//
// pnlLateral
@ -139,17 +143,20 @@ namespace AgroBase
this.pnlLateral.Controls.Add(this.gpbNovoDispositivo);
this.pnlLateral.Controls.Add(this.btnNovoDispositivo);
this.pnlLateral.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlLateral.Location = new System.Drawing.Point(3, 18);
this.pnlLateral.Location = new System.Drawing.Point(2, 15);
this.pnlLateral.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.pnlLateral.Name = "pnlLateral";
this.pnlLateral.Size = new System.Drawing.Size(817, 742);
this.pnlLateral.Size = new System.Drawing.Size(613, 592);
this.pnlLateral.TabIndex = 0;
//
// gpbDispositivos
//
this.gpbDispositivos.Controls.Add(this.lstDisponiveis);
this.gpbDispositivos.Location = new System.Drawing.Point(215, 96);
this.gpbDispositivos.Location = new System.Drawing.Point(161, 78);
this.gpbDispositivos.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.gpbDispositivos.Name = "gpbDispositivos";
this.gpbDispositivos.Size = new System.Drawing.Size(599, 164);
this.gpbDispositivos.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.gpbDispositivos.Size = new System.Drawing.Size(449, 133);
this.gpbDispositivos.TabIndex = 3;
this.gpbDispositivos.TabStop = false;
this.gpbDispositivos.Text = "Dispositivos disponíveis";
@ -157,18 +164,20 @@ namespace AgroBase
// lstDisponiveis
//
this.lstDisponiveis.HideSelection = false;
this.lstDisponiveis.Location = new System.Drawing.Point(15, 25);
this.lstDisponiveis.Location = new System.Drawing.Point(11, 20);
this.lstDisponiveis.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.lstDisponiveis.Name = "lstDisponiveis";
this.lstDisponiveis.Size = new System.Drawing.Size(334, 124);
this.lstDisponiveis.Size = new System.Drawing.Size(252, 102);
this.lstDisponiveis.TabIndex = 0;
this.lstDisponiveis.UseCompatibleStateImageBehavior = false;
this.lstDisponiveis.View = System.Windows.Forms.View.List;
//
// btnRemover
//
this.btnRemover.Location = new System.Drawing.Point(116, 62);
this.btnRemover.Location = new System.Drawing.Point(87, 50);
this.btnRemover.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnRemover.Name = "btnRemover";
this.btnRemover.Size = new System.Drawing.Size(83, 28);
this.btnRemover.Size = new System.Drawing.Size(62, 23);
this.btnRemover.TabIndex = 12;
this.btnRemover.Text = "Remover";
this.btnRemover.UseVisualStyleBackColor = true;
@ -177,9 +186,10 @@ namespace AgroBase
// lblDispositivos
//
this.lblDispositivos.AutoSize = true;
this.lblDispositivos.Location = new System.Drawing.Point(27, 12);
this.lblDispositivos.Location = new System.Drawing.Point(20, 10);
this.lblDispositivos.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblDispositivos.Name = "lblDispositivos";
this.lblDispositivos.Size = new System.Drawing.Size(83, 17);
this.lblDispositivos.Size = new System.Drawing.Size(63, 13);
this.lblDispositivos.TabIndex = 11;
this.lblDispositivos.Text = "Dispositivos";
//
@ -187,9 +197,10 @@ namespace AgroBase
//
this.cmbDispositivos.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbDispositivos.FormattingEnabled = true;
this.cmbDispositivos.Location = new System.Drawing.Point(30, 32);
this.cmbDispositivos.Location = new System.Drawing.Point(22, 26);
this.cmbDispositivos.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbDispositivos.Name = "cmbDispositivos";
this.cmbDispositivos.Size = new System.Drawing.Size(169, 24);
this.cmbDispositivos.Size = new System.Drawing.Size(128, 21);
this.cmbDispositivos.TabIndex = 10;
this.cmbDispositivos.SelectedIndexChanged += new System.EventHandler(this.cmbDispositivos_SelectedIndexChanged);
//
@ -201,9 +212,11 @@ namespace AgroBase
this.gpbNovoDispositivo.Controls.Add(this.lblDescricao);
this.gpbNovoDispositivo.Controls.Add(this.lblTipo);
this.gpbNovoDispositivo.Enabled = false;
this.gpbNovoDispositivo.Location = new System.Drawing.Point(21, 96);
this.gpbNovoDispositivo.Location = new System.Drawing.Point(16, 78);
this.gpbNovoDispositivo.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.gpbNovoDispositivo.Name = "gpbNovoDispositivo";
this.gpbNovoDispositivo.Size = new System.Drawing.Size(188, 164);
this.gpbNovoDispositivo.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.gpbNovoDispositivo.Size = new System.Drawing.Size(141, 133);
this.gpbNovoDispositivo.TabIndex = 9;
this.gpbNovoDispositivo.TabStop = false;
this.gpbNovoDispositivo.Text = "Novo Dispositivo";
@ -212,16 +225,18 @@ namespace AgroBase
//
this.cmbTipos.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbTipos.FormattingEnabled = true;
this.cmbTipos.Location = new System.Drawing.Point(9, 45);
this.cmbTipos.Location = new System.Drawing.Point(7, 37);
this.cmbTipos.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbTipos.Name = "cmbTipos";
this.cmbTipos.Size = new System.Drawing.Size(169, 24);
this.cmbTipos.Size = new System.Drawing.Size(128, 21);
this.cmbTipos.TabIndex = 2;
//
// btnSalvar
//
this.btnSalvar.Location = new System.Drawing.Point(9, 124);
this.btnSalvar.Location = new System.Drawing.Point(7, 101);
this.btnSalvar.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnSalvar.Name = "btnSalvar";
this.btnSalvar.Size = new System.Drawing.Size(169, 25);
this.btnSalvar.Size = new System.Drawing.Size(127, 20);
this.btnSalvar.TabIndex = 9;
this.btnSalvar.Text = "Salvar";
this.btnSalvar.UseVisualStyleBackColor = true;
@ -229,34 +244,38 @@ namespace AgroBase
//
// txtDescricao
//
this.txtDescricao.Location = new System.Drawing.Point(9, 94);
this.txtDescricao.Location = new System.Drawing.Point(7, 76);
this.txtDescricao.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.txtDescricao.Name = "txtDescricao";
this.txtDescricao.Size = new System.Drawing.Size(169, 22);
this.txtDescricao.Size = new System.Drawing.Size(128, 20);
this.txtDescricao.TabIndex = 3;
//
// lblDescricao
//
this.lblDescricao.AutoSize = true;
this.lblDescricao.Location = new System.Drawing.Point(6, 74);
this.lblDescricao.Location = new System.Drawing.Point(4, 60);
this.lblDescricao.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblDescricao.Name = "lblDescricao";
this.lblDescricao.Size = new System.Drawing.Size(71, 17);
this.lblDescricao.Size = new System.Drawing.Size(55, 13);
this.lblDescricao.TabIndex = 2;
this.lblDescricao.Text = "Descrição";
//
// lblTipo
//
this.lblTipo.AutoSize = true;
this.lblTipo.Location = new System.Drawing.Point(6, 25);
this.lblTipo.Location = new System.Drawing.Point(4, 20);
this.lblTipo.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblTipo.Name = "lblTipo";
this.lblTipo.Size = new System.Drawing.Size(36, 17);
this.lblTipo.Size = new System.Drawing.Size(28, 13);
this.lblTipo.TabIndex = 0;
this.lblTipo.Text = "Tipo";
//
// btnNovoDispositivo
//
this.btnNovoDispositivo.Location = new System.Drawing.Point(30, 62);
this.btnNovoDispositivo.Location = new System.Drawing.Point(22, 50);
this.btnNovoDispositivo.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnNovoDispositivo.Name = "btnNovoDispositivo";
this.btnNovoDispositivo.Size = new System.Drawing.Size(80, 28);
this.btnNovoDispositivo.Size = new System.Drawing.Size(60, 23);
this.btnNovoDispositivo.TabIndex = 8;
this.btnNovoDispositivo.Text = "Novo dispositivo";
this.btnNovoDispositivo.UseVisualStyleBackColor = true;
@ -270,33 +289,48 @@ namespace AgroBase
this.lblStripJoystickComando,
this.lblStripOperacao,
this.lblStripOperacaoStatus});
this.generalStrip.Location = new System.Drawing.Point(0, 737);
this.generalStrip.Location = new System.Drawing.Point(0, 587);
this.generalStrip.Name = "generalStrip";
this.generalStrip.Size = new System.Drawing.Size(588, 26);
this.generalStrip.Padding = new System.Windows.Forms.Padding(1, 0, 10, 0);
this.generalStrip.Size = new System.Drawing.Size(441, 22);
this.generalStrip.TabIndex = 1;
this.generalStrip.Text = "statusStrip1";
//
// lblStripJoystick
//
this.lblStripJoystick.Name = "lblStripJoystick";
this.lblStripJoystick.Size = new System.Drawing.Size(161, 20);
this.lblStripJoystick.Size = new System.Drawing.Size(129, 17);
this.lblStripJoystick.Text = "Joystick: Desconectado";
//
// lblStripJoystickComando
//
this.lblStripJoystickComando.Name = "lblStripJoystickComando";
this.lblStripJoystickComando.Size = new System.Drawing.Size(18, 20);
this.lblStripJoystickComando.Size = new System.Drawing.Size(16, 17);
this.lblStripJoystickComando.Text = "...";
//
// lblStripOperacao
//
this.lblStripOperacao.Name = "lblStripOperacao";
this.lblStripOperacao.Size = new System.Drawing.Size(104, 17);
this.lblStripOperacao.Text = "Operação: Manual";
//
// lblStripOperacaoStatus
//
this.lblStripOperacaoStatus.Name = "lblStripOperacaoStatus";
this.lblStripOperacaoStatus.Size = new System.Drawing.Size(74, 17);
this.lblStripOperacaoStatus.Text = "Não iniciado";
//
// gpbMovimentacao
//
this.gpbMovimentacao.Controls.Add(this.lblKmh);
this.gpbMovimentacao.Controls.Add(this.trkKmh);
this.gpbMovimentacao.Controls.Add(this.trkRPM);
this.gpbMovimentacao.Controls.Add(this.lblRPM);
this.gpbMovimentacao.Location = new System.Drawing.Point(12, 78);
this.gpbMovimentacao.Location = new System.Drawing.Point(9, 63);
this.gpbMovimentacao.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.gpbMovimentacao.Name = "gpbMovimentacao";
this.gpbMovimentacao.Size = new System.Drawing.Size(440, 105);
this.gpbMovimentacao.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.gpbMovimentacao.Size = new System.Drawing.Size(330, 85);
this.gpbMovimentacao.TabIndex = 2;
this.gpbMovimentacao.TabStop = false;
this.gpbMovimentacao.Text = "Controle Movimentação";
@ -304,18 +338,20 @@ namespace AgroBase
// lblKmh
//
this.lblKmh.AutoSize = true;
this.lblKmh.Location = new System.Drawing.Point(221, 25);
this.lblKmh.Location = new System.Drawing.Point(166, 20);
this.lblKmh.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblKmh.Name = "lblKmh";
this.lblKmh.Size = new System.Drawing.Size(128, 17);
this.lblKmh.Size = new System.Drawing.Size(100, 13);
this.lblKmh.TabIndex = 23;
this.lblKmh.Text = "Velocidade: 3 km/h";
//
// trkKmh
//
this.trkKmh.Location = new System.Drawing.Point(224, 45);
this.trkKmh.Location = new System.Drawing.Point(168, 37);
this.trkKmh.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.trkKmh.Maximum = 34;
this.trkKmh.Name = "trkKmh";
this.trkKmh.Size = new System.Drawing.Size(210, 56);
this.trkKmh.Size = new System.Drawing.Size(158, 45);
this.trkKmh.TabIndex = 22;
this.trkKmh.TickFrequency = 2;
this.trkKmh.Value = 3;
@ -323,11 +359,12 @@ namespace AgroBase
//
// trkRPM
//
this.trkRPM.Location = new System.Drawing.Point(6, 45);
this.trkRPM.Location = new System.Drawing.Point(4, 37);
this.trkRPM.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.trkRPM.Maximum = 500;
this.trkRPM.Minimum = 5;
this.trkRPM.Name = "trkRPM";
this.trkRPM.Size = new System.Drawing.Size(210, 56);
this.trkRPM.Size = new System.Drawing.Size(158, 45);
this.trkRPM.TabIndex = 20;
this.trkRPM.TickFrequency = 20;
this.trkRPM.Value = 5;
@ -336,18 +373,20 @@ namespace AgroBase
// lblRPM
//
this.lblRPM.AutoSize = true;
this.lblRPM.Location = new System.Drawing.Point(3, 25);
this.lblRPM.Location = new System.Drawing.Point(2, 20);
this.lblRPM.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblRPM.Name = "lblRPM";
this.lblRPM.Size = new System.Drawing.Size(54, 17);
this.lblRPM.Size = new System.Drawing.Size(43, 13);
this.lblRPM.TabIndex = 21;
this.lblRPM.Text = "RPM: 5";
//
// tkbAngulo
//
this.tkbAngulo.Location = new System.Drawing.Point(6, 117);
this.tkbAngulo.Location = new System.Drawing.Point(4, 95);
this.tkbAngulo.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.tkbAngulo.Maximum = 180;
this.tkbAngulo.Name = "tkbAngulo";
this.tkbAngulo.Size = new System.Drawing.Size(419, 56);
this.tkbAngulo.Size = new System.Drawing.Size(314, 45);
this.tkbAngulo.TabIndex = 17;
this.tkbAngulo.TickFrequency = 5;
this.tkbAngulo.ValueChanged += new System.EventHandler(this.tkbRampa_ValueChanged);
@ -355,28 +394,31 @@ namespace AgroBase
// lblAngulo
//
this.lblAngulo.AutoSize = true;
this.lblAngulo.Location = new System.Drawing.Point(3, 97);
this.lblAngulo.Location = new System.Drawing.Point(2, 79);
this.lblAngulo.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblAngulo.Name = "lblAngulo";
this.lblAngulo.Size = new System.Drawing.Size(73, 17);
this.lblAngulo.Size = new System.Drawing.Size(56, 13);
this.lblAngulo.TabIndex = 16;
this.lblAngulo.Text = "Angulo: 0º";
//
// lblVelocidade
//
this.lblVelocidade.AutoSize = true;
this.lblVelocidade.Location = new System.Drawing.Point(3, 23);
this.lblVelocidade.Location = new System.Drawing.Point(2, 19);
this.lblVelocidade.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblVelocidade.Name = "lblVelocidade";
this.lblVelocidade.Size = new System.Drawing.Size(106, 17);
this.lblVelocidade.Size = new System.Drawing.Size(80, 13);
this.lblVelocidade.TabIndex = 15;
this.lblVelocidade.Text = "Velocidade: 1%";
//
// tkbVelocidade
//
this.tkbVelocidade.Location = new System.Drawing.Point(6, 43);
this.tkbVelocidade.Location = new System.Drawing.Point(4, 35);
this.tkbVelocidade.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.tkbVelocidade.Maximum = 100;
this.tkbVelocidade.Minimum = 1;
this.tkbVelocidade.Name = "tkbVelocidade";
this.tkbVelocidade.Size = new System.Drawing.Size(419, 56);
this.tkbVelocidade.Size = new System.Drawing.Size(314, 45);
this.tkbVelocidade.TabIndex = 14;
this.tkbVelocidade.TickFrequency = 5;
this.tkbVelocidade.Value = 1;
@ -384,9 +426,10 @@ namespace AgroBase
//
// btnVer
//
this.btnVer.Location = new System.Drawing.Point(341, 25);
this.btnVer.Location = new System.Drawing.Point(256, 20);
this.btnVer.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnVer.Name = "btnVer";
this.btnVer.Size = new System.Drawing.Size(84, 25);
this.btnVer.Size = new System.Drawing.Size(63, 20);
this.btnVer.TabIndex = 13;
this.btnVer.Text = "Ver";
this.btnVer.UseVisualStyleBackColor = true;
@ -394,9 +437,10 @@ namespace AgroBase
//
// btnJoyAtt
//
this.btnJoyAtt.Location = new System.Drawing.Point(161, 25);
this.btnJoyAtt.Location = new System.Drawing.Point(121, 20);
this.btnJoyAtt.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnJoyAtt.Name = "btnJoyAtt";
this.btnJoyAtt.Size = new System.Drawing.Size(84, 25);
this.btnJoyAtt.Size = new System.Drawing.Size(63, 20);
this.btnJoyAtt.TabIndex = 12;
this.btnJoyAtt.Text = "Atualizar";
this.btnJoyAtt.UseVisualStyleBackColor = true;
@ -404,9 +448,10 @@ namespace AgroBase
//
// btnJoyEdt
//
this.btnJoyEdt.Location = new System.Drawing.Point(251, 25);
this.btnJoyEdt.Location = new System.Drawing.Point(188, 20);
this.btnJoyEdt.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnJoyEdt.Name = "btnJoyEdt";
this.btnJoyEdt.Size = new System.Drawing.Size(84, 25);
this.btnJoyEdt.Size = new System.Drawing.Size(63, 20);
this.btnJoyEdt.TabIndex = 11;
this.btnJoyEdt.Text = "Editar";
this.btnJoyEdt.UseVisualStyleBackColor = true;
@ -416,9 +461,10 @@ namespace AgroBase
//
this.cmbJoysticks.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbJoysticks.FormattingEnabled = true;
this.cmbJoysticks.Location = new System.Drawing.Point(6, 26);
this.cmbJoysticks.Location = new System.Drawing.Point(4, 21);
this.cmbJoysticks.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbJoysticks.Name = "cmbJoysticks";
this.cmbJoysticks.Size = new System.Drawing.Size(148, 24);
this.cmbJoysticks.Size = new System.Drawing.Size(112, 21);
this.cmbJoysticks.TabIndex = 3;
//
// timerDispositivos
@ -433,9 +479,11 @@ namespace AgroBase
| System.Windows.Forms.AnchorStyles.Right)));
this.gpbSensoriamento.Controls.Add(this.lblSenMotores);
this.gpbSensoriamento.Controls.Add(this.gridSenMotores);
this.gpbSensoriamento.Location = new System.Drawing.Point(12, 508);
this.gpbSensoriamento.Location = new System.Drawing.Point(9, 413);
this.gpbSensoriamento.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.gpbSensoriamento.Name = "gpbSensoriamento";
this.gpbSensoriamento.Size = new System.Drawing.Size(564, 226);
this.gpbSensoriamento.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.gpbSensoriamento.Size = new System.Drawing.Size(423, 184);
this.gpbSensoriamento.TabIndex = 13;
this.gpbSensoriamento.TabStop = false;
this.gpbSensoriamento.Text = "Sensoriamento";
@ -443,9 +491,10 @@ namespace AgroBase
// lblSenMotores
//
this.lblSenMotores.AutoSize = true;
this.lblSenMotores.Location = new System.Drawing.Point(12, 23);
this.lblSenMotores.Location = new System.Drawing.Point(9, 19);
this.lblSenMotores.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblSenMotores.Name = "lblSenMotores";
this.lblSenMotores.Size = new System.Drawing.Size(59, 17);
this.lblSenMotores.Size = new System.Drawing.Size(45, 13);
this.lblSenMotores.TabIndex = 1;
this.lblSenMotores.Text = "Motores";
//
@ -455,18 +504,20 @@ namespace AgroBase
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.gridSenMotores.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.gridSenMotores.Location = new System.Drawing.Point(6, 43);
this.gridSenMotores.Location = new System.Drawing.Point(4, 35);
this.gridSenMotores.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.gridSenMotores.Name = "gridSenMotores";
this.gridSenMotores.RowHeadersWidth = 51;
this.gridSenMotores.RowTemplate.Height = 24;
this.gridSenMotores.Size = new System.Drawing.Size(552, 177);
this.gridSenMotores.Size = new System.Drawing.Size(414, 144);
this.gridSenMotores.TabIndex = 0;
//
// btnDiagnosticos
//
this.btnDiagnosticos.Location = new System.Drawing.Point(6, 21);
this.btnDiagnosticos.Location = new System.Drawing.Point(4, 17);
this.btnDiagnosticos.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnDiagnosticos.Name = "btnDiagnosticos";
this.btnDiagnosticos.Size = new System.Drawing.Size(112, 25);
this.btnDiagnosticos.Size = new System.Drawing.Size(84, 20);
this.btnDiagnosticos.TabIndex = 14;
this.btnDiagnosticos.Text = "Diagnósticos";
this.btnDiagnosticos.UseVisualStyleBackColor = true;
@ -474,9 +525,10 @@ namespace AgroBase
//
// btnAcompanhamento
//
this.btnAcompanhamento.Location = new System.Drawing.Point(6, 52);
this.btnAcompanhamento.Location = new System.Drawing.Point(4, 42);
this.btnAcompanhamento.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnAcompanhamento.Name = "btnAcompanhamento";
this.btnAcompanhamento.Size = new System.Drawing.Size(112, 25);
this.btnAcompanhamento.Size = new System.Drawing.Size(84, 20);
this.btnAcompanhamento.TabIndex = 15;
this.btnAcompanhamento.Text = "Plotagem";
this.btnAcompanhamento.UseVisualStyleBackColor = true;
@ -484,9 +536,10 @@ namespace AgroBase
//
// btnAtuCamera
//
this.btnAtuCamera.Location = new System.Drawing.Point(6, 83);
this.btnAtuCamera.Location = new System.Drawing.Point(4, 67);
this.btnAtuCamera.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnAtuCamera.Name = "btnAtuCamera";
this.btnAtuCamera.Size = new System.Drawing.Size(112, 25);
this.btnAtuCamera.Size = new System.Drawing.Size(84, 20);
this.btnAtuCamera.TabIndex = 16;
this.btnAtuCamera.Text = "Ver solo";
this.btnAtuCamera.UseVisualStyleBackColor = true;
@ -494,9 +547,10 @@ namespace AgroBase
//
// btnMapas
//
this.btnMapas.Location = new System.Drawing.Point(6, 145);
this.btnMapas.Location = new System.Drawing.Point(4, 118);
this.btnMapas.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnMapas.Name = "btnMapas";
this.btnMapas.Size = new System.Drawing.Size(112, 25);
this.btnMapas.Size = new System.Drawing.Size(84, 20);
this.btnMapas.TabIndex = 17;
this.btnMapas.Text = "Mapas";
this.btnMapas.UseVisualStyleBackColor = true;
@ -504,9 +558,10 @@ namespace AgroBase
//
// btnSenCamera
//
this.btnSenCamera.Location = new System.Drawing.Point(6, 114);
this.btnSenCamera.Location = new System.Drawing.Point(4, 93);
this.btnSenCamera.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnSenCamera.Name = "btnSenCamera";
this.btnSenCamera.Size = new System.Drawing.Size(112, 25);
this.btnSenCamera.Size = new System.Drawing.Size(84, 20);
this.btnSenCamera.TabIndex = 18;
this.btnSenCamera.Text = "Ver caminho";
this.btnSenCamera.UseVisualStyleBackColor = true;
@ -518,9 +573,11 @@ namespace AgroBase
this.gpbJoystick.Controls.Add(this.btnJoyEdt);
this.gpbJoystick.Controls.Add(this.btnJoyAtt);
this.gpbJoystick.Controls.Add(this.btnVer);
this.gpbJoystick.Location = new System.Drawing.Point(12, 12);
this.gpbJoystick.Location = new System.Drawing.Point(9, 10);
this.gpbJoystick.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.gpbJoystick.Name = "gpbJoystick";
this.gpbJoystick.Size = new System.Drawing.Size(440, 60);
this.gpbJoystick.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.gpbJoystick.Size = new System.Drawing.Size(330, 49);
this.gpbJoystick.TabIndex = 18;
this.gpbJoystick.TabStop = false;
this.gpbJoystick.Text = "Joystick";
@ -531,23 +588,28 @@ namespace AgroBase
this.groupBox2.Controls.Add(this.tkbAngulo);
this.groupBox2.Controls.Add(this.lblAngulo);
this.groupBox2.Controls.Add(this.lblVelocidade);
this.groupBox2.Location = new System.Drawing.Point(12, 189);
this.groupBox2.Location = new System.Drawing.Point(9, 154);
this.groupBox2.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(440, 183);
this.groupBox2.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.groupBox2.Size = new System.Drawing.Size(330, 149);
this.groupBox2.TabIndex = 19;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "Controle Direcional";
//
// gpbAtalhos
//
this.gpbAtalhos.Controls.Add(this.btnGPS);
this.gpbAtalhos.Controls.Add(this.btnDiagnosticos);
this.gpbAtalhos.Controls.Add(this.btnAcompanhamento);
this.gpbAtalhos.Controls.Add(this.btnSenCamera);
this.gpbAtalhos.Controls.Add(this.btnAtuCamera);
this.gpbAtalhos.Controls.Add(this.btnMapas);
this.gpbAtalhos.Location = new System.Drawing.Point(458, 12);
this.gpbAtalhos.Location = new System.Drawing.Point(344, 10);
this.gpbAtalhos.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.gpbAtalhos.Name = "gpbAtalhos";
this.gpbAtalhos.Size = new System.Drawing.Size(124, 360);
this.gpbAtalhos.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.gpbAtalhos.Size = new System.Drawing.Size(93, 292);
this.gpbAtalhos.TabIndex = 20;
this.gpbAtalhos.TabStop = false;
this.gpbAtalhos.Text = "Atalhos";
@ -558,9 +620,11 @@ 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(9, 307);
this.gpbOperacao.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.gpbOperacao.Name = "gpbOperacao";
this.gpbOperacao.Size = new System.Drawing.Size(570, 124);
this.gpbOperacao.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.gpbOperacao.Size = new System.Drawing.Size(428, 101);
this.gpbOperacao.TabIndex = 21;
this.gpbOperacao.TabStop = false;
this.gpbOperacao.Text = "Operação";
@ -568,18 +632,20 @@ namespace AgroBase
// chbDebugMode
//
this.chbDebugMode.AutoSize = true;
this.chbDebugMode.Location = new System.Drawing.Point(179, 49);
this.chbDebugMode.Location = new System.Drawing.Point(134, 40);
this.chbDebugMode.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.chbDebugMode.Name = "chbDebugMode";
this.chbDebugMode.Size = new System.Drawing.Size(139, 21);
this.chbDebugMode.Size = new System.Drawing.Size(109, 17);
this.chbDebugMode.TabIndex = 14;
this.chbDebugMode.Text = "Modo Depuração";
this.chbDebugMode.UseVisualStyleBackColor = true;
//
// btnIniciarOperacao
//
this.btnIniciarOperacao.Location = new System.Drawing.Point(9, 77);
this.btnIniciarOperacao.Location = new System.Drawing.Point(7, 63);
this.btnIniciarOperacao.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnIniciarOperacao.Name = "btnIniciarOperacao";
this.btnIniciarOperacao.Size = new System.Drawing.Size(145, 41);
this.btnIniciarOperacao.Size = new System.Drawing.Size(109, 33);
this.btnIniciarOperacao.TabIndex = 13;
this.btnIniciarOperacao.Text = "Iniciar Operação";
this.btnIniciarOperacao.UseVisualStyleBackColor = true;
@ -588,9 +654,10 @@ namespace AgroBase
// lblModoOperacao
//
this.lblModoOperacao.AutoSize = true;
this.lblModoOperacao.Location = new System.Drawing.Point(6, 27);
this.lblModoOperacao.Location = new System.Drawing.Point(4, 22);
this.lblModoOperacao.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblModoOperacao.Name = "lblModoOperacao";
this.lblModoOperacao.Size = new System.Drawing.Size(43, 17);
this.lblModoOperacao.Size = new System.Drawing.Size(34, 13);
this.lblModoOperacao.TabIndex = 13;
this.lblModoOperacao.Text = "Modo";
//
@ -598,29 +665,29 @@ 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(7, 38);
this.cmbModoOperacao.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.cmbModoOperacao.Name = "cmbModoOperacao";
this.cmbModoOperacao.Size = new System.Drawing.Size(145, 24);
this.cmbModoOperacao.Size = new System.Drawing.Size(110, 21);
this.cmbModoOperacao.TabIndex = 13;
this.cmbModoOperacao.SelectedIndexChanged += new System.EventHandler(this.cmbModoOperacao_SelectedIndexChanged);
//
// lblStripOperacao
// btnGPS
//
this.lblStripOperacao.Name = "lblStripOperacao";
this.lblStripOperacao.Size = new System.Drawing.Size(130, 20);
this.lblStripOperacao.Text = "Operação: Manual";
//
// lblStripOperacaoStatus
//
this.lblStripOperacaoStatus.Name = "lblStripOperacaoStatus";
this.lblStripOperacaoStatus.Size = new System.Drawing.Size(94, 20);
this.lblStripOperacaoStatus.Text = "Não iniciado";
this.btnGPS.Location = new System.Drawing.Point(4, 142);
this.btnGPS.Margin = new System.Windows.Forms.Padding(2);
this.btnGPS.Name = "btnGPS";
this.btnGPS.Size = new System.Drawing.Size(84, 20);
this.btnGPS.TabIndex = 19;
this.btnGPS.Text = "GPS";
this.btnGPS.UseVisualStyleBackColor = true;
this.btnGPS.Click += new System.EventHandler(this.btnGPS_Click);
//
// frmPrincipal
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1411, 763);
this.ClientSize = new System.Drawing.Size(1058, 609);
this.Controls.Add(this.gpbOperacao);
this.Controls.Add(this.gpbAtalhos);
this.Controls.Add(this.groupBox2);
@ -629,6 +696,7 @@ namespace AgroBase
this.Controls.Add(this.gpbSensoriamento);
this.Controls.Add(this.generalStrip);
this.Controls.Add(this.gpbAcoes);
this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.Name = "frmPrincipal";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Agro Base";
@ -719,6 +787,7 @@ namespace AgroBase
public System.Windows.Forms.TrackBar trkKmh;
private System.Windows.Forms.ToolStripStatusLabel lblStripOperacao;
private System.Windows.Forms.ToolStripStatusLabel lblStripOperacaoStatus;
private System.Windows.Forms.Button btnGPS;
}
}

View File

@ -221,6 +221,12 @@ namespace AgroBase
frmMapa.Show();
}
private void btnGPS_Click(object sender, EventArgs e)
{
frmGPS frmGps = new frmGPS();
frmGps.Show();
}
private void btnSenCamera_Click(object sender, EventArgs e)
{
frmSenCamera frmCamera = new frmSenCamera();

View File

@ -120,6 +120,9 @@
<metadata name="erroStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>11, 10</value>
</metadata>
<metadata name="erroStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>11, 10</value>
</metadata>
<metadata name="generalStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>133, 16</value>
</metadata>

View File

@ -51,6 +51,7 @@ namespace AgroBase.Models
Dir = 101,
Sen = 102,
Atu = 103,
Gps = 104,
}
public enum F_Code
@ -64,14 +65,14 @@ namespace AgroBase.Models
public enum S_Code
{
sRPM,
sTST,
sCFG,
sTMP,
sENC,
sCOR,
sTEN,
sFLX,
sRPM = 133,
sTST = 154,
sCFG = 211,
sTMP = 411,
sENC = 111,
sCOR = 322,
sTEN = 112,
sFLX = 198,
}
public enum BotoesJoystick

View File

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AgroBase.Models
{
public class GPSModel
{
public double Latitude { get; set; }
public double Longitude { get; set; }
public DateTime DataHora { get; set; }
public double Altitude { get; set; }
public double Velocidade { get; set; }
public int NumeroSatelites { get; set; }
public double PrecisaoHorizontal { get; set; }
}
}

View File

@ -141,7 +141,7 @@ namespace AgroBase.Models.Modules
{
if (!File.Exists(nomeArquivo))
{
var newPinout = PinoutModel.CarregarPinoutPadrao();
var newPinout = PinoutModel.CarregarPinoutPadrao_S3();
File.WriteAllText(nomeArquivo, JsonConvert.SerializeObject(newPinout));
}
var pinoutText = File.ReadAllText(nomeArquivo);

View File

@ -279,7 +279,7 @@ namespace AgroBase.Models.Modules
{
if (!File.Exists(nomeArquivo))
{
var newPinout = PinoutModel.CarregarPinoutPadrao();
var newPinout = PinoutModel.CarregarPinoutPadrao_S3();
File.WriteAllText(nomeArquivo, JsonConvert.SerializeObject(newPinout));
}
var pinoutText = File.ReadAllText(nomeArquivo);

View File

@ -221,12 +221,12 @@ namespace AgroBase.Models
double t = 0;
double.TryParse(Dados[2].Replace(".", ","), out t);
Motor.Temperatura = t;
double u = 0;
/*double u = 0;
double.TryParse(Dados[3].Replace(".", ","), out u);
Motor.Umidade = u;
long i = 0;
long.TryParse(Dados[4].Replace(".", ","), out i);
Motor.IndiceCalor = i;
Motor.IndiceCalor = i;*/
AtualizaGrafico = true;
break;
}
@ -308,7 +308,7 @@ namespace AgroBase.Models
frmInstancial.frmPrincipal.gridSenMotores.Columns.Add("clRPM", "RPM");
frmInstancial.frmPrincipal.gridSenMotores.Columns.Add("clVelocidade", "Velocidade");
frmInstancial.frmPrincipal.gridSenMotores.Columns.Add("clTemperatura", "Temperatura");
frmInstancial.frmPrincipal.gridSenMotores.Columns.Add("clUmidade", "Umidade");
//frmInstancial.frmPrincipal.gridSenMotores.Columns.Add("clUmidade", "Umidade");
foreach (var Motor in Motores)
{
frmInstancial.frmPrincipal.gridSenMotores.Rows.Add(new string[]
@ -318,11 +318,11 @@ namespace AgroBase.Models
Enum.GetName(typeof(Sentido), Motor.Sentido_SP),
Enum.GetName(typeof(Sentido), Motor.Sentido),
Enum.GetName(typeof(StatusMotor), Motor.Aceleracao),
Motor.Potencia_SP.ToString(),
Motor.Potencia.ToString(),
Motor.RPM.ToString(),
Motor.VelocidadeInstantanea.ToString(),
Motor.Temperatura.ToString(),
Motor.Umidade.ToString(),
//Motor.Umidade.ToString(),
});
}
}
@ -336,11 +336,11 @@ namespace AgroBase.Models
frmInstancial.frmPrincipal.gridSenMotores.Rows[Motor.Canal].Cells[2].Value = Enum.GetName(typeof(Sentido), Motor.Sentido_SP);
frmInstancial.frmPrincipal.gridSenMotores.Rows[Motor.Canal].Cells[3].Value = Enum.GetName(typeof(Sentido), Motor.Sentido);
frmInstancial.frmPrincipal.gridSenMotores.Rows[Motor.Canal].Cells[4].Value = Enum.GetName(typeof(StatusMotor), Motor.Aceleracao);
frmInstancial.frmPrincipal.gridSenMotores.Rows[Motor.Canal].Cells[5].Value = Motor.Potencia_SP.ToString();
frmInstancial.frmPrincipal.gridSenMotores.Rows[Motor.Canal].Cells[5].Value = Motor.Potencia.ToString();
frmInstancial.frmPrincipal.gridSenMotores.Rows[Motor.Canal].Cells[6].Value = Motor.RPM.ToString();
frmInstancial.frmPrincipal.gridSenMotores.Rows[Motor.Canal].Cells[7].Value = Motor.VelocidadeInstantanea.ToString();
frmInstancial.frmPrincipal.gridSenMotores.Rows[Motor.Canal].Cells[8].Value = Motor.Temperatura.ToString();
frmInstancial.frmPrincipal.gridSenMotores.Rows[Motor.Canal].Cells[9].Value = Motor.Umidade.ToString();
//frmInstancial.frmPrincipal.gridSenMotores.Rows[Motor.Canal].Cells[9].Value = Motor.Umidade.ToString();
}
}
@ -348,7 +348,7 @@ namespace AgroBase.Models
{
if (!File.Exists(nomeArquivo))
{
var newPinout = PinoutModel.CarregarPinoutPadrao();
var newPinout = PinoutModel.CarregarPinoutPadrao_S3();
File.WriteAllText(nomeArquivo, JsonConvert.SerializeObject(newPinout));
}
var pinoutText = File.ReadAllText(nomeArquivo);

View File

@ -14,7 +14,7 @@ namespace AgroBase.Models.Modules
public bool Habilitado { get; set; }
public string ComponenteID { get; set; }
public static List<PinoutModel> CarregarPinoutPadrao()
public static List<PinoutModel> CarregarPinoutPadrao_S3()
{
List<PinoutModel> Pinout = new List<PinoutModel>()
{
@ -66,6 +66,54 @@ namespace AgroBase.Models.Modules
return Pinout;
}
public static List<PinoutModel> CarregarPinoutPadrao_Wrover()
{
List<PinoutModel> Pinout = new List<PinoutModel>()
{
new PinoutModel() { Pino = 99, ComponenteID = "", Descricao = "3V3", Funcao = FuncoesPinout.Desabilitado, Habilitado = false },
new PinoutModel() { Pino = 98, ComponenteID = "", Descricao = "EN", Funcao = FuncoesPinout.Desabilitado, Habilitado = false },
new PinoutModel() { Pino = 36, ComponenteID = "", Descricao = "GPIO36", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 39, ComponenteID = "", Descricao = "GPIO39", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 34, ComponenteID = "", Descricao = "GPIO5", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 35, ComponenteID = "", Descricao = "GPIO6", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 32, ComponenteID = "", Descricao = "GPIO7", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 33, ComponenteID = "", Descricao = "GPIO15", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 25, ComponenteID = "", Descricao = "GPIO16", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 26, ComponenteID = "", Descricao = "GPIO17", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 27, ComponenteID = "", Descricao = "GPIO18", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 14, ComponenteID = "", Descricao = "GPIO8", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 12, ComponenteID = "", Descricao = "GPIO3", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 97, ComponenteID = "", Descricao = "GND_1", Funcao = FuncoesPinout.Desabilitado, Habilitado = false },
new PinoutModel() { Pino = 13, ComponenteID = "", Descricao = "GPIO13", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 9, ComponenteID = "", Descricao = "GPIO9", Funcao = FuncoesPinout.Desabilitado, Habilitado = false },
new PinoutModel() { Pino = 10, ComponenteID = "", Descricao = "GPIO10", Funcao = FuncoesPinout.Desabilitado, Habilitado = false },
new PinoutModel() { Pino = 11, ComponenteID = "", Descricao = "GPIO11", Funcao = FuncoesPinout.Desabilitado, Habilitado = false },
new PinoutModel() { Pino = 96, ComponenteID = "", Descricao = "5V", Funcao = FuncoesPinout.Desabilitado, Habilitado = false},
new PinoutModel() { Pino = 6, ComponenteID = "", Descricao = "GPIO6", Funcao = FuncoesPinout.Desabilitado, Habilitado = false },
new PinoutModel() { Pino = 7, ComponenteID = "", Descricao = "GPIO7", Funcao = FuncoesPinout.Desabilitado, Habilitado = false },
new PinoutModel() { Pino = 8, ComponenteID = "", Descricao = "GPIO8", Funcao = FuncoesPinout.Desabilitado, Habilitado = false },
new PinoutModel() { Pino = 15, ComponenteID = "", Descricao = "GPIO15", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 2, ComponenteID = "", Descricao = "GPIO2", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 0, ComponenteID = "", Descricao = "GPIO0", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 4, ComponenteID = "", Descricao = "GPIO4", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 16, ComponenteID = "", Descricao = "GPIO16", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 17, ComponenteID = "", Descricao = "GPIO17", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 5, ComponenteID = "", Descricao = "GPIO5", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 18, ComponenteID = "", Descricao = "GPIO18", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 19, ComponenteID = "", Descricao = "GPIO19", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 95, ComponenteID = "", Descricao = "GND_2", Funcao = FuncoesPinout.Desabilitado, Habilitado = false },
new PinoutModel() { Pino = 21, ComponenteID = "", Descricao = "GPIO21", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 3, ComponenteID = "", Descricao = "GPIO3", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 1, ComponenteID = "", Descricao = "GPIO1", Funcao = FuncoesPinout.NaoConectado, Habilitado = true },
new PinoutModel() { Pino = 22, ComponenteID = "", Descricao = "GPIO22", Funcao = FuncoesPinout.Desabilitado, Habilitado = true },
new PinoutModel() { Pino = 23, ComponenteID = "", Descricao = "GPIO23", Funcao = FuncoesPinout.Desabilitado, Habilitado = true },
new PinoutModel() { Pino = 94, ComponenteID = "", Descricao = "GND_3", Funcao = FuncoesPinout.Desabilitado, Habilitado = true },
};
return Pinout;
}
}
public enum FuncoesPinout

View File

@ -29,7 +29,67 @@ namespace AgroBase.Models.Modules
{
new SensorModel()
{
ID = "VBAT",
ID = "TMVET",
Descricao = "Temperatura Motor Esquerdo Trás",
Prioridade = 0,
Componente = S_Code.sTMP,
Aferir = true,
Inicializado = false,
Testando = false,
Funcoes = new List<FuncoesPinout>()
{
FuncoesPinout.TMP,
},
DelayAmostragem = 200,
},
new SensorModel()
{
ID = "TMVEF",
Descricao = "Temperatura Motor Esquerdo Frente",
Prioridade = 0,
Componente = S_Code.sTMP,
Aferir = true,
Inicializado = false,
Testando = false,
Funcoes = new List<FuncoesPinout>()
{
FuncoesPinout.TMP,
},
DelayAmostragem = 200,
},
new SensorModel()
{
ID = "TMVDT",
Descricao = "Temperatura Motor Direito Trás",
Prioridade = 0,
Componente = S_Code.sTMP,
Aferir = true,
Inicializado = false,
Testando = false,
Funcoes = new List<FuncoesPinout>()
{
FuncoesPinout.TMP,
},
DelayAmostragem = 200,
},
new SensorModel()
{
ID = "TMVDF",
Descricao = "Temperatura Motor Direito Frente",
Prioridade = 0,
Componente = S_Code.sTMP,
Aferir = true,
Inicializado = false,
Testando = false,
Funcoes = new List<FuncoesPinout>()
{
FuncoesPinout.TMP,
},
DelayAmostragem = 200,
},
new SensorModel()
{
ID = "VBAT ",
Descricao = "Tensão da bateria",
Prioridade = 20,
Componente = S_Code.sTEN,
@ -44,7 +104,7 @@ namespace AgroBase.Models.Modules
},
new SensorModel()
{
ID = "ABAT",
ID = "ABAT ",
Prioridade = 10,
Descricao = "Corrente da bateria",
Componente = S_Code.sCOR,
@ -65,9 +125,9 @@ namespace AgroBase.Models.Modules
{
List<string> Config = Sensores.Select(x => x.ProtocoloConfiguracaoSensor(Conectar)).ToList();
string ProtocoloMOD = ((int)F_Code.Cfg).ToString() +
"MD" + ";" + // 0 ~ 1
(Conectar ? "1" : "0") + ";" + // 3
_TaxaAmostragem.ToString("00000"); // 5 ~ 9
"MD " + ";" + // 0 ~ 4
(Conectar ? "1" : "0") + ";" + // 6
_TaxaAmostragem.ToString("00000"); // 8 ~ 12
Config.Add(ProtocoloMOD);
return Config;
}
@ -78,7 +138,14 @@ namespace AgroBase.Models.Modules
if (!string.IsNullOrEmpty(Protocolo) && Protocolo[0].ToString() == SerialService.BeginSensor)
{
string[] Dados = Protocolo.Replace(SerialService.BeginSensor, "").Split(SerialService.EndLine[0])[0].Split(';');
S_Code TipoSensor = (S_Code)(int.Parse(Dados[0]));
int cod = 0;
int.TryParse(Dados[0], out cod);
if (cod == 0)
{
return;
}
S_Code TipoSensor = (S_Code)(cod);
SensorModel Sensor = Sensores.FirstOrDefault(x => x.ID == Dados[1]);
if (Sensor == null)
{
@ -122,6 +189,22 @@ namespace AgroBase.Models.Modules
Sensor.Inicializado = Dados[2] == "1";
break;
}
case S_Code.sTMP: {
double temp = -1;
double.TryParse(Dados[2], out temp);
Sensor.Leituras = new List<double>() { temp };
if (temp > Sensor.ValorMaximo)
{
Sensor.ValorMaximo = temp;
}
else if (temp < Sensor.ValorMinimo)
{
Sensor.ValorMinimo = temp;
}
AtualizaGrafico = true;
break;
}
}
@ -192,7 +275,7 @@ namespace AgroBase.Models.Modules
{
if (!File.Exists(nomeArquivo))
{
var newPinout = PinoutModel.CarregarPinoutPadrao();
var newPinout = PinoutModel.CarregarPinoutPadrao_S3();
File.WriteAllText(nomeArquivo, JsonConvert.SerializeObject(newPinout));
}
var pinoutText = File.ReadAllText(nomeArquivo);
@ -232,18 +315,15 @@ namespace AgroBase.Models.Modules
public string ProtocoloConfiguracaoSensor(bool Conectar)
{
var _pinout = SensoriamentoModel.Pinout.Where(x => x.ComponenteID == ID).ToList();
return ((int)F_Code.Cfg).ToString() +
ID + ";" + // 0 ~ 1
(Conectar ? "1" : "0") + ";" + // 3
((int)Componente).ToString() + ";" + // 5
Prioridade.ToString("00") + ";" + // 7 ~ 8
DelayAmostragem.ToString("00000") + ";" + // 10 ~ 14
(Aferir ? "1" : "0") + ";" + // 16
(_pinout.Any(x => x.Funcao == FuncoesPinout.I2C) ? "1" : "0") + ";" + // 18
(_pinout.Any(x => x.Funcao == FuncoesPinout.Leitura1) ? _pinout.FirstOrDefault(x => x.Funcao == FuncoesPinout.Leitura1).Pino.ToString("00") : "-1") + "," + // 20 ~ 21
(_pinout.Any(x => x.Funcao == FuncoesPinout.Leitura2) ? _pinout.FirstOrDefault(x => x.Funcao == FuncoesPinout.Leitura2).Pino.ToString("00") : "-1") + "," + // 23 ~ 24
(_pinout.Any(x => x.Funcao == FuncoesPinout.Leitura3) ? _pinout.FirstOrDefault(x => x.Funcao == FuncoesPinout.Leitura3).Pino.ToString("00") : "-1") + "," + // 26 ~ 27
(_pinout.Any(x => x.Funcao == FuncoesPinout.Leitura4) ? _pinout.FirstOrDefault(x => x.Funcao == FuncoesPinout.Leitura4).Pino.ToString("00") : "-1"); // 29 ~ 30
string Protocolo = ((int)F_Code.Cfg).ToString() +
ID + ";" + // 0 ~ 4
(Conectar ? "1" : "0") + ";" + // 6
((int)Componente).ToString() + ";" + // 8 ~ 10
(Aferir ? "1" : "0") + ";" + // 12
DelayAmostragem.ToString("00000") + ";" + // 14 ~ 18
Prioridade.ToString("00") + ";" + // 20 ~ 21
(_pinout.Any(x => x.Funcao != FuncoesPinout.NaoConectado) ? _pinout.FirstOrDefault(x => x.Funcao != FuncoesPinout.NaoConectado).Pino.ToString("00") : "-1"); // 23 ~ 24
return Protocolo;
}
}

View File

@ -34,4 +34,14 @@ namespace AgroBase.Models
return formattedDate;
}
}
public static class VariaveisPortas
{
public static string GPS { get; } = "6512";
public static string CameraSolo { get; } = "6513";
public static string CameraCaminho { get; } = "6514";
public static string SocketSolo { get; } = "6515";
public static string SocketCaminho { get; } = "6516";
}
}

View File

@ -1,69 +0,0 @@
import cv2
import mediapipe as mp
import json
import time
from flask import Flask, Response
import sys
max_readings = 10
cameraIndex = sys.argv[1]
porta = sys.argv[2]
url = sys.argv[3]
arquivoSaida = sys.argv[4]
app = Flask(__name__)
cap = cv2.VideoCapture(cameraIndex)
mp_face_detection = mp.solutions.face_detection
face_detection = mp_face_detection.FaceDetection(min_detection_confidence=0.5)
readings = []
def generate_frames():
while True:
ret, frame = cap.read()
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
results = face_detection.process(frame_rgb)
current_readings = []
if results.detections:
for idx, detection in enumerate(results.detections):
bboxC = detection.location_data.relative_bounding_box
ih, iw, _ = frame.shape
x, y, w, h = int(bboxC.xmin * iw), int(bboxC.ymin * ih), int(bboxC.width * iw), int(bboxC.height * ih)
current_readings.append({'id': idx, 'x': x, 'y': y, 'largura': w, 'altura': h})
cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
cv2.putText(frame, f'Rosto {idx}', (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (255, 0, 0), 2)
timestamp = time.time()
readings.append({'timestamp': timestamp, 'rostos': current_readings})
if len(readings) > max_readings:
readings.pop(0)
if len(readings) == max_readings:
try:
with open('Python/Output/' + arquivoSaida, 'w') as file:
json.dump({'frames': readings}, file)
except Exception as e:
print(f"Erro ao escrever no arquivo: {e}")
ret, buffer = cv2.imencode('.jpg', frame)
frame = buffer.tobytes()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
@app.route('/' + url)
def video_feed():
return Response(generate_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')
if __name__ == "__main__":
# Acessando os argumentos passados na linha de comando
if len(sys.argv) != 4:
print("Usage: python script.py <porta> <URL> <arquivoSaida>")
sys.exit(1)
app.run(host='0.0.0.0', port=int(porta))

View File

@ -0,0 +1,34 @@
from flask import Flask, jsonify, request
import folium
import sys
app = Flask(__name__)
# Armazena a última localização conhecida
last_known_location = (-22.1839247, -47.3824123)
# Rota para renderizar o mapa inicial
@app.route('/')
def index():
global last_known_location
folium_map = folium.Map(location=last_known_location, zoom_start=20)
folium.Marker(last_known_location, tooltip='Ponto GPS').add_to(folium_map)
return folium_map._repr_html_()
# Rota para atualizar as coordenadas do marcador
@app.route('/update_marker', methods=['POST'])
def update_marker():
global last_known_location
data = request.json
last_known_location = (data['lat'], data['lon'])
return jsonify({'message': 'Coordenadas atualizadas com sucesso!'}), 200
if __name__ == '__main__':
port = 5000 # Porta padrão
if len(sys.argv) > 1:
try:
port = int(sys.argv[1])
except ValueError:
print("Por favor forneça um número de porta válido.")
sys.exit(1)
app.run(debug=True, port=port)

View File

@ -1,151 +0,0 @@
import cv2
import numpy as np
from flask import Flask, Response, request
import json
import time
import sys
import os
max_readings = int(sys.argv[1])
porta = sys.argv[2]
url = sys.argv[3]
arquivoSaida = sys.argv[4]
app = Flask(__name__)
# Função para detecção de objetos usando YOLO e salvar as coordenadas em um arquivo JSON
def detect_objects(conf_threshold, nms_threshold, _camera_index):
# Carregar o modelo YOLO e os arquivos de configuração
model_config = 'Python/Models/yolo/yolov3.cfg'
model_weights = 'Python/Models/yolo/crop_weed_detection.weights'
# Carregar as classes que o modelo pode detectar
with open('Python/Models/yolo/coco.names', 'rt') as f:
classes = f.read().rstrip('\n').split('\n')
print(classes)
net = cv2.dnn.readNetFromDarknet(model_config, model_weights)
net.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV)
net.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU)
cap = cv2.VideoCapture(_camera_index, cv2.CAP_DSHOW)
readings = []
while True:
ret, frame = cap.read()
if not ret:
break
# Detecção de Objetos usando YOLO
blob = cv2.dnn.blobFromImage(frame, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
net.setInput(blob)
outs = net.forward(net.getUnconnectedOutLayersNames())
# Obter as camadas de saída do modelo YOLO
output_layers_names = net.getUnconnectedOutLayersNames()
# Verificar se há saída válida
if not output_layers_names:
print("Nenhuma camada de saída encontrada. Verifique se o modelo foi carregado corretamente.")
break
# Fazer a detecção de objetos no frame
blob = cv2.dnn.blobFromImage(frame, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
net.setInput(blob)
outs = net.forward(output_layers_names)
# Mostrar as detecções no frame
class_ids = []
confidences = []
boxes = []
for out in outs:
for detection in out:
scores = detection[5:]
class_id = np.argmax(scores)
confidence = scores[class_id]
if confidence > conf_threshold:
# Obter informações do objeto detectado
center_x = int(detection[0] * frame.shape[1])
center_y = int(detection[1] * frame.shape[0])
w = int(detection[2] * frame.shape[1])
h = int(detection[3] * frame.shape[0])
# Coordenadas do retângulo
x = int(center_x - w / 2)
y = int(center_y - h / 2)
boxes.append([x, y, w, h])
confidences.append(float(confidence))
class_ids.append(class_id)
# Aplicar Non-Max Suppression
indices = cv2.dnn.NMSBoxes(boxes, confidences, conf_threshold, nms_threshold)
# Mostrar as detecções no frame após o NMS
current_readings = []
for i in indices:
box = boxes[i]
x, y, w, h = box[0], box[1], box[2], box[3]
class_id = class_ids[i]
class_name = classes[class_id]
confidence = confidences[i]
cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.putText(frame, class_name, (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)
# Salvar as detecções em um formato desejado
detection_info = {
'id': int(i),
'descricao': class_name,
'x': int(x),
'y': int(y),
'largura': int(w),
'altura': int(h),
'confianca': float(confidence)
}
#print(detection_info)
current_readings.append(detection_info)
timestamp = time.time()
readings.append({'timestamp': timestamp, 'objetos': current_readings})
# Salvar as detecções em um arquivo JSON
if len(readings) > max_readings:
readings.pop(0)
output_folder = 'Python/Output/'
if not os.path.exists(output_folder):
os.makedirs(output_folder)
if len(readings) == max_readings:
try:
with open(output_folder + arquivoSaida, 'w') as file:
json.dump({'frames': readings}, file)
except Exception as e:
print(f"Erro ao escrever no arquivo: {e}")
cv2.imshow('Deteccao de Objetos YOLO', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# Convertendo frame para JPEG e enviando via Flask
ret, buffer = cv2.imencode('.jpg', frame)
frame = buffer.tobytes()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
@app.route('/' + url, methods=['GET'])
def video_feed():
conf_threshold = float(request.args.get('conf_threshold'))
nms_threshold = float(request.args.get('nms_threshold'))
camera_index = int(request.args.get('camera_index'))
return Response(detect_objects(conf_threshold, nms_threshold, camera_index), mimetype='multipart/x-mixed-replace; boundary=frame')
if __name__ == "__main__":
app.run(host='0.0.0.0', port=porta)

View File

@ -0,0 +1,163 @@
using AgroBase.Models;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO.Ports;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static AgroBase.Models.Enuns;
using static AgroBase.Services.SerialService;
namespace AgroBase.Services
{
public class GPSService
{
public static bool Iniciado = false;
public static SerialPort PortaGPS = null;
public static GPSModel UltimaLeitura = new GPSModel();
public static void AtualizarPortaGPS(SerialPort _porta)
{
PortaGPS = new SerialPort()
{
PortName = _porta.PortName,
BaudRate = _porta.BaudRate,
};
PortaGPS.DataReceived -= PortaGPS_DataReceived;
PortaGPS.DataReceived += PortaGPS_DataReceived;
}
public static void IniciarRecepcaoDados()
{
if (PortaGPS != null)
{
PortaGPS.Open();
if (PortaGPS.IsOpen)
{
Iniciado = true;
}
}
}
public static void PararRecepcaoDados()
{
if (PortaGPS != null && PortaGPS.IsOpen)
{
PortaGPS.Close();
if (!PortaGPS.IsOpen)
{
Iniciado = false;
}
}
}
private static void PortaGPS_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (PortaGPS.IsOpen)
{
string Recebido = PortaGPS.ReadLine();
if (Recebido.Length > 2)
{
ProcessarStringNMEA(Recebido);
}
}
}
public static void ProcessarStringNMEA(string nmeaString)
{
if (string.IsNullOrWhiteSpace(nmeaString))
return;
string[] parts = nmeaString.Split(',');
switch (parts[0])
{
// Global Positioning System Fix Data
case "$GPGGA":
if (parts[2] != "" && parts[3] != "")
{
UltimaLeitura.Latitude = ConvertToDecimalDegrees(parts[2], parts[3], 2); // ConvertToDouble(parts[2]);
}
if (parts[4] != "" && parts[5] != "")
{
UltimaLeitura.Longitude = ConvertToDecimalDegrees(parts[4], parts[5], 3); // ConvertToDouble(parts[4]);
}
UltimaLeitura.NumeroSatelites = int.TryParse(parts[7], out int numSat) ? numSat : 0;
UltimaLeitura.PrecisaoHorizontal = double.TryParse(parts[8], NumberStyles.Float, CultureInfo.InvariantCulture, out double hdop) ? hdop : 0;
UltimaLeitura.Altitude = ConvertToDouble(parts[9]);
Console.WriteLine(UltimaLeitura.Latitude + "," + UltimaLeitura.Longitude);
break;
// Recommended minimum specific GPS/Transit data
case "$GPRMC":
UltimaLeitura.DataHora = ParseDateTime(parts[9], parts[1], -3);
UltimaLeitura.Velocidade = ConvertKnotsToKmh(ConvertToDouble(parts[7]));
break;
// Você pode adicionar mais cases aqui para outros tipos de sentenças NMEA que você deseja processar
}
}
private static double ConvertToDecimalDegrees(string nmeaCoordinate, string direction, int digits)
{
// Divide a string em graus e minutos
int degrees = int.Parse(nmeaCoordinate.Substring(0, digits));
double minutes = double.Parse(nmeaCoordinate.Substring(digits), CultureInfo.InvariantCulture);
// Converte para graus decimais
double decimalDegrees = degrees + (minutes / 60);
// Se a direção for Sul ou Oeste, o valor deve ser negativo
if (direction == "S" || direction == "W")
{
decimalDegrees *= -1;
}
return decimalDegrees;
}
private static double ConvertToDouble(string value)
{
double.TryParse(value, NumberStyles.Float, CultureInfo.InvariantCulture, out double result);
return result;
}
private static DateTime ParseDateTime(string date, string time, int timeZoneOffset)
{
// DDMMAA, HHMMSS.ss
string dateTimeFormat = "ddMMyyHHmmss.ff";
// Verifica se o formato de data e hora está completo
if (date.Length == 6 && (time.Length == 6 || time.Length == 9))
{
string dateTimeStr = date + time;
if (DateTime.TryParseExact(dateTimeStr, dateTimeFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime result))
{
// Ajusta o DateTime para o fuso horário especificado
result = result.AddHours(timeZoneOffset);
return result;
}
}
// Se a conversão falhar, retorne DateTime.MinValue ou lance uma exceção, conforme sua necessidade
return DateTime.MinValue;
}
private static double ConvertKnotsToKmh(double knots)
{
return knots * 1.852;
}
}
}

View File

@ -1,32 +1,45 @@
using AgroBase.Models;
using CefSharp.DevTools.IO;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AgroBase.Services
{
public static class MapasVariaveisModel
{
public static string NomeArquivoMapaInterativo = "mapa_interativo.html";
public static string NomeArquivoMapaInterativoSaida = "GeoJson.json";
public static string NomeArquivoMapaGPS = "mapa_gps.html";
}
public class MapasService
{
OpenFileDialog opfMapa;
public Process pythonProcess;
private string CaminhoSaida = Variaveis.CaminhoSistema + PythonService.CaminhoGeral + PythonService.CaminhoLeitura;
private string NomeArquivoMapa = "mapa_interativo.html";
private string NomeArquivoMapa = "";
public string NomeArquivos = "";
public string CaminhoMapa = "";
public string ArquivoSaida = "GeoJson.json";
public string ArquivoSaida = "";
public string MapaUrl = "";
public string CaminhoDadosMapa = "";
public MapaFeatureCollectionModel DadosMapa;
private string PathUpdateMarker = "update_marker";
public void CarregarMapa()
public void CarregarMapa(string nomeArquivoMapa, string nomeArquivoSaida)
{
NomeArquivoMapa = nomeArquivoMapa;
ArquivoSaida = nomeArquivoSaida;
opfMapa = new OpenFileDialog
{
DefaultExt = ".shp",
@ -52,6 +65,44 @@ namespace AgroBase.Services
DadosMapa = JsonConvert.DeserializeObject<MapaFeatureCollectionModel>(dados);
}
public void CarregarMapaGPS(string nomeArquivoMapa)
{
NomeArquivoMapa = nomeArquivoMapa;
pythonProcess = PythonService.RunScript(PythonService.ScriptMapGPS, new string[] { VariaveisPortas.GPS, PathUpdateMarker });
MapaUrl = new Uri("http://localhost:" + VariaveisPortas.GPS + "/").AbsoluteUri;
}
public async void AtualizarPosicaoMapaGPS(double lat, double lon)
{
HttpClient _client = new HttpClient();
var payload = new
{
lat = lat,
lon = lon
};
var content = new StringContent(JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json");
try
{
var response = await _client.PostAsync(MapaUrl + PathUpdateMarker, content);
if (response.IsSuccessStatusCode)
{
Console.WriteLine("Localização atualizada com sucesso!");
}
else
{
Console.WriteLine("Erro ao atualizar a localização.");
}
}
catch (HttpRequestException ex)
{
Console.WriteLine($"Erro de requisição: {ex.Message}");
}
}
}
}

View File

@ -16,6 +16,7 @@ namespace AgroBase.Services
public static string ScriptGreenDetector = "green-detector.py";
public static string ScriptMapConverter = "map-load.py";
public static string ScriptLineAngle = "line-angle2.py";
public static string ScriptMapGPS = "gps-viewer.py";
public static Process RunScript(string Script, string[] Argumentos)
{

View File

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Net.NetworkInformation;
using static AgroBase.Models.Enuns;
namespace AgroBase.Services
@ -24,6 +25,11 @@ namespace AgroBase.Services
{
var Portas = SerialPort.GetPortNames();
var PortasNaoMapeadas = Portas.Where(x => !DispositivosConectados.Select(y => y.PortaCOM).Contains(x)).ToList();
if (GPSService.PortaGPS != null)
{
PortasNaoMapeadas = PortasNaoMapeadas.Where(x => x != GPSService.PortaGPS.PortName).ToList();
}
for (int i = 0; i < PortasNaoMapeadas.Count(); i++)
{
string PortaCom = PortasNaoMapeadas[i].ToString();
@ -54,20 +60,35 @@ namespace AgroBase.Services
string Recebido = Porta.ReadLine();
if (Recebido.Length > 2)
{
var Dados = Recebido.Split(';');
int code = 0;
int.TryParse(Dados[0], out code);
if (code == 0)
T_Code Dispositivo = T_Code.Vzo;
if (Recebido.Contains("$GPTXT"))
{
return;
GPSService.AtualizarPortaGPS(Porta);
Dispositivo = T_Code.Gps;
}
else {
var Dados = Recebido.Split(';');
int code = 0;
int.TryParse(Dados[0], out code);
if (code == 0)
{
//Porta.Close();
return;
}
Dispositivo = (T_Code)(int.Parse(Dados[0]));
}
T_Code Dispositivo = (T_Code)(int.Parse(Dados[0]));
DispositivosConectados.Add(new DispositivoDetalhesModel()
if (Dispositivo != T_Code.Vzo)
{
PortaCOM = Porta.PortName,
Dispositivo = Dispositivo
});
DispositivosConectados.Add(new DispositivoDetalhesModel()
{
PortaCOM = Porta.PortName,
Dispositivo = Dispositivo
});
}
Porta.Close();
}
}

View File

@ -1,62 +1,62 @@
[
{
"timestamp": 1703261258.146047,
"angulo": 70.83386634512402,
"distancia_esquerda": 0,
"distancia_direita": 0
"timestamp": 1704472484.9266078,
"angulo": -5.000644597558448,
"distancia_esquerda": 433,
"distancia_direita": 249
},
{
"timestamp": 1703261258.1779122,
"angulo": 71.62454833068,
"distancia_esquerda": 0,
"distancia_direita": 0
"timestamp": 1704472484.9573126,
"angulo": -5.3558250428552014,
"distancia_esquerda": 435,
"distancia_direita": 250
},
{
"timestamp": 1703261258.2098758,
"angulo": 71.21250362005355,
"distancia_esquerda": 0,
"distancia_direita": 0
"timestamp": 1704472484.9890833,
"angulo": -4.289153328818998,
"distancia_esquerda": 424,
"distancia_direita": 252
},
{
"timestamp": 1703261258.2414749,
"angulo": 71.29878626894322,
"distancia_esquerda": 0,
"distancia_direita": 0
"timestamp": 1704472485.0372036,
"angulo": -6.6544250460065655,
"distancia_esquerda": 432,
"distancia_direita": 264
},
{
"timestamp": 1703261258.2731776,
"angulo": 71.37213682354496,
"distancia_esquerda": 0,
"distancia_direita": 0
"timestamp": 1704472485.0718324,
"angulo": -5.119082256336242,
"distancia_esquerda": 431,
"distancia_direita": 252
},
{
"timestamp": 1703261258.305718,
"angulo": 70.71739479109578,
"distancia_esquerda": 0,
"distancia_direita": 0
"timestamp": 1704472485.1011403,
"angulo": -5.119082256336242,
"distancia_esquerda": 432,
"distancia_direita": 251
},
{
"timestamp": 1703261258.3383834,
"angulo": 71.01237591212987,
"distancia_esquerda": 0,
"distancia_direita": 0
"timestamp": 1704472485.1334994,
"angulo": -8.764100827877996,
"distancia_esquerda": 449,
"distancia_direita": 265
},
{
"timestamp": 1703261258.3862917,
"angulo": 70.9617007750378,
"distancia_esquerda": 0,
"distancia_direita": 0
"timestamp": 1704472485.1670296,
"angulo": -11.768288932020653,
"distancia_esquerda": 463,
"distancia_direita": 277
},
{
"timestamp": 1703261258.4176264,
"angulo": 70.98707086102593,
"distancia_esquerda": 0,
"distancia_direita": 0
"timestamp": 1704472485.2005017,
"angulo": -4.289153328818998,
"distancia_esquerda": 426,
"distancia_direita": 250
},
{
"timestamp": 1703261258.4505165,
"angulo": 71.13793400214888,
"distancia_esquerda": 0,
"distancia_direita": 0
"timestamp": 1704472485.230556,
"angulo": -5.710593137499643,
"distancia_esquerda": 437,
"distancia_direita": 251
}
]

View File

@ -1,72 +1,62 @@
[
{
"timestamp": 1703261249.8491328,
"timestamp": 1704472448.5072937,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1703261250.8542001,
"timestamp": 1704472448.5392926,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1703261251.858236,
"timestamp": 1704472448.5712929,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1703261252.8649428,
"timestamp": 1704472448.6243026,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1703261253.8680236,
"timestamp": 1704472448.653862,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1703261254.8731163,
"timestamp": 1704472448.6838481,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1703261255.8774235,
"timestamp": 1704472448.715851,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1703261256.88373,
"timestamp": 1704472448.747849,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1703261257.8879297,
"timestamp": 1704472448.7808487,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1703261258.7623699,
"timestamp": 1704472448.8118489,
"x_max": 640.0,
"y_max": 480.0,
"objetos": [
{
"id": 0,
"descricao": "Green",
"x": 86,
"y": 341,
"largura": 49,
"altura": 58,
"confianca": 1.0
}
]
"objetos": []
}
]

View File

@ -1,69 +0,0 @@
import cv2
import mediapipe as mp
import json
import time
from flask import Flask, Response
import sys
max_readings = 10
cameraIndex = sys.argv[1]
porta = sys.argv[2]
url = sys.argv[3]
arquivoSaida = sys.argv[4]
app = Flask(__name__)
cap = cv2.VideoCapture(cameraIndex)
mp_face_detection = mp.solutions.face_detection
face_detection = mp_face_detection.FaceDetection(min_detection_confidence=0.5)
readings = []
def generate_frames():
while True:
ret, frame = cap.read()
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
results = face_detection.process(frame_rgb)
current_readings = []
if results.detections:
for idx, detection in enumerate(results.detections):
bboxC = detection.location_data.relative_bounding_box
ih, iw, _ = frame.shape
x, y, w, h = int(bboxC.xmin * iw), int(bboxC.ymin * ih), int(bboxC.width * iw), int(bboxC.height * ih)
current_readings.append({'id': idx, 'x': x, 'y': y, 'largura': w, 'altura': h})
cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
cv2.putText(frame, f'Rosto {idx}', (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (255, 0, 0), 2)
timestamp = time.time()
readings.append({'timestamp': timestamp, 'rostos': current_readings})
if len(readings) > max_readings:
readings.pop(0)
if len(readings) == max_readings:
try:
with open('Python/Output/' + arquivoSaida, 'w') as file:
json.dump({'frames': readings}, file)
except Exception as e:
print(f"Erro ao escrever no arquivo: {e}")
ret, buffer = cv2.imencode('.jpg', frame)
frame = buffer.tobytes()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
@app.route('/' + url)
def video_feed():
return Response(generate_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')
if __name__ == "__main__":
# Acessando os argumentos passados na linha de comando
if len(sys.argv) != 4:
print("Usage: python script.py <porta> <URL> <arquivoSaida>")
sys.exit(1)
app.run(host='0.0.0.0', port=int(porta))

View File

@ -0,0 +1,34 @@
from flask import Flask, jsonify, request
import folium
import sys
app = Flask(__name__)
# Armazena a última localização conhecida
last_known_location = (-22.1839247, -47.3824123)
# Rota para renderizar o mapa inicial
@app.route('/')
def index():
global last_known_location
folium_map = folium.Map(location=last_known_location, zoom_start=20)
folium.Marker(last_known_location, tooltip='Ponto GPS').add_to(folium_map)
return folium_map._repr_html_()
# Rota para atualizar as coordenadas do marcador
@app.route('/update_marker', methods=['POST'])
def update_marker():
global last_known_location
data = request.json
last_known_location = (data['lat'], data['lon'])
return jsonify({'message': 'Coordenadas atualizadas com sucesso!'}), 200
if __name__ == '__main__':
port = 5000 # Porta padrão
if len(sys.argv) > 1:
try:
port = int(sys.argv[1])
except ValueError:
print("Por favor forneça um número de porta válido.")
sys.exit(1)
app.run(debug=True, port=port)

View File

@ -1,151 +0,0 @@
import cv2
import numpy as np
from flask import Flask, Response, request
import json
import time
import sys
import os
max_readings = int(sys.argv[1])
porta = sys.argv[2]
url = sys.argv[3]
arquivoSaida = sys.argv[4]
app = Flask(__name__)
# Função para detecção de objetos usando YOLO e salvar as coordenadas em um arquivo JSON
def detect_objects(conf_threshold, nms_threshold, _camera_index):
# Carregar o modelo YOLO e os arquivos de configuração
model_config = 'Python/Models/yolo/yolov3.cfg'
model_weights = 'Python/Models/yolo/crop_weed_detection.weights'
# Carregar as classes que o modelo pode detectar
with open('Python/Models/yolo/coco.names', 'rt') as f:
classes = f.read().rstrip('\n').split('\n')
print(classes)
net = cv2.dnn.readNetFromDarknet(model_config, model_weights)
net.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV)
net.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU)
cap = cv2.VideoCapture(_camera_index, cv2.CAP_DSHOW)
readings = []
while True:
ret, frame = cap.read()
if not ret:
break
# Detecção de Objetos usando YOLO
blob = cv2.dnn.blobFromImage(frame, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
net.setInput(blob)
outs = net.forward(net.getUnconnectedOutLayersNames())
# Obter as camadas de saída do modelo YOLO
output_layers_names = net.getUnconnectedOutLayersNames()
# Verificar se há saída válida
if not output_layers_names:
print("Nenhuma camada de saída encontrada. Verifique se o modelo foi carregado corretamente.")
break
# Fazer a detecção de objetos no frame
blob = cv2.dnn.blobFromImage(frame, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
net.setInput(blob)
outs = net.forward(output_layers_names)
# Mostrar as detecções no frame
class_ids = []
confidences = []
boxes = []
for out in outs:
for detection in out:
scores = detection[5:]
class_id = np.argmax(scores)
confidence = scores[class_id]
if confidence > conf_threshold:
# Obter informações do objeto detectado
center_x = int(detection[0] * frame.shape[1])
center_y = int(detection[1] * frame.shape[0])
w = int(detection[2] * frame.shape[1])
h = int(detection[3] * frame.shape[0])
# Coordenadas do retângulo
x = int(center_x - w / 2)
y = int(center_y - h / 2)
boxes.append([x, y, w, h])
confidences.append(float(confidence))
class_ids.append(class_id)
# Aplicar Non-Max Suppression
indices = cv2.dnn.NMSBoxes(boxes, confidences, conf_threshold, nms_threshold)
# Mostrar as detecções no frame após o NMS
current_readings = []
for i in indices:
box = boxes[i]
x, y, w, h = box[0], box[1], box[2], box[3]
class_id = class_ids[i]
class_name = classes[class_id]
confidence = confidences[i]
cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.putText(frame, class_name, (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)
# Salvar as detecções em um formato desejado
detection_info = {
'id': int(i),
'descricao': class_name,
'x': int(x),
'y': int(y),
'largura': int(w),
'altura': int(h),
'confianca': float(confidence)
}
#print(detection_info)
current_readings.append(detection_info)
timestamp = time.time()
readings.append({'timestamp': timestamp, 'objetos': current_readings})
# Salvar as detecções em um arquivo JSON
if len(readings) > max_readings:
readings.pop(0)
output_folder = 'Python/Output/'
if not os.path.exists(output_folder):
os.makedirs(output_folder)
if len(readings) == max_readings:
try:
with open(output_folder + arquivoSaida, 'w') as file:
json.dump({'frames': readings}, file)
except Exception as e:
print(f"Erro ao escrever no arquivo: {e}")
cv2.imshow('Deteccao de Objetos YOLO', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# Convertendo frame para JPEG e enviando via Flask
ret, buffer = cv2.imencode('.jpg', frame)
frame = buffer.tobytes()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
@app.route('/' + url, methods=['GET'])
def video_feed():
conf_threshold = float(request.args.get('conf_threshold'))
nms_threshold = float(request.args.get('nms_threshold'))
camera_index = int(request.args.get('camera_index'))
return Response(detect_objects(conf_threshold, nms_threshold, camera_index), mimetype='multipart/x-mixed-replace; boundary=frame')
if __name__ == "__main__":
app.run(host='0.0.0.0', port=porta)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"Conectado":false,"Sensores":[{"LogGrafico":[],"ID":"VBAT","Prioridade":0,"Descricao":"Tensão da bateria","Componente":6,"Aferir":true,"DelayAmostragem":500,"Inicializado":false,"Testando":false,"Funcoes":[21],"UnidadeMedida":null,"Leituras":null,"ValorMinimo":0.0,"ValorMaximo":0.0},{"LogGrafico":[],"ID":"ABAT","Prioridade":0,"Descricao":"Corrente da bateria","Componente":5,"Aferir":true,"DelayAmostragem":500,"Inicializado":false,"Testando":false,"Funcoes":[21],"UnidadeMedida":null,"Leituras":null,"ValorMinimo":0.0,"ValorMaximo":0.0}]}
{"Conectado":false,"Sensores":[{"LogGrafico":[],"ID":"TMVET","Prioridade":0,"Descricao":"Temperatura Motor Esquerdo Trás","Componente":411,"Aferir":true,"DelayAmostragem":200,"Inicializado":false,"Testando":false,"Funcoes":[12],"UnidadeMedida":null,"Leituras":[2716.0],"ValorMinimo":0.0,"ValorMaximo":23935.0},{"LogGrafico":[],"ID":"TMVEF","Prioridade":0,"Descricao":"Temperatura Motor Esquerdo Frente","Componente":411,"Aferir":true,"DelayAmostragem":200,"Inicializado":false,"Testando":false,"Funcoes":[12],"UnidadeMedida":null,"Leituras":[-27315.0],"ValorMinimo":-27315.0,"ValorMaximo":0.0},{"LogGrafico":[],"ID":"TMVDT","Prioridade":0,"Descricao":"Temperatura Motor Direito Trás","Componente":411,"Aferir":true,"DelayAmostragem":200,"Inicializado":false,"Testando":false,"Funcoes":[12],"UnidadeMedida":null,"Leituras":[-27315.0],"ValorMinimo":-27315.0,"ValorMaximo":0.0},{"LogGrafico":[],"ID":"TMVDF","Prioridade":0,"Descricao":"Temperatura Motor Direito Frente","Componente":411,"Aferir":true,"DelayAmostragem":200,"Inicializado":false,"Testando":false,"Funcoes":[12],"UnidadeMedida":null,"Leituras":[-27315.0],"ValorMinimo":-27315.0,"ValorMaximo":0.0},{"LogGrafico":[],"ID":"VBAT ","Prioridade":20,"Descricao":"Tensão da bateria","Componente":112,"Aferir":false,"DelayAmostragem":1000,"Inicializado":false,"Testando":false,"Funcoes":[23],"UnidadeMedida":null,"Leituras":null,"ValorMinimo":0.0,"ValorMaximo":0.0},{"LogGrafico":[],"ID":"ABAT ","Prioridade":10,"Descricao":"Corrente da bateria","Componente":322,"Aferir":false,"DelayAmostragem":950,"Inicializado":false,"Testando":false,"Funcoes":[23],"UnidadeMedida":null,"Leituras":null,"ValorMinimo":0.0,"ValorMaximo":0.0}]}

View File

@ -1 +1 @@
[{"Pino":99,"Descricao":"3V3_1","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":98,"Descricao":"3V3_2","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":97,"Descricao":"RST","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":4,"Descricao":"GPIO4","Funcao":13,"Habilitado":true,"ComponenteID":"DF"},{"Pino":5,"Descricao":"GPIO5","Funcao":9,"Habilitado":true,"ComponenteID":"DF"},{"Pino":6,"Descricao":"GPIO6","Funcao":14,"Habilitado":true,"ComponenteID":"DF"},{"Pino":7,"Descricao":"GPIO7","Funcao":15,"Habilitado":true,"ComponenteID":"DF"},{"Pino":15,"Descricao":"GPIO15","Funcao":16,"Habilitado":true,"ComponenteID":"DF"},{"Pino":16,"Descricao":"GPIO16","Funcao":17,"Habilitado":true,"ComponenteID":"DF"},{"Pino":17,"Descricao":"GPIO17","Funcao":20,"Habilitado":true,"ComponenteID":"DF"},{"Pino":18,"Descricao":"GPIO18","Funcao":18,"Habilitado":true,"ComponenteID":"DF"},{"Pino":8,"Descricao":"GPIO8","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":3,"Descricao":"GPIO3","Funcao":20,"Habilitado":true,"ComponenteID":"DT"},{"Pino":46,"Descricao":"GPIO46","Funcao":18,"Habilitado":true,"ComponenteID":"DT"},{"Pino":9,"Descricao":"GPIO9","Funcao":17,"Habilitado":true,"ComponenteID":"DT"},{"Pino":10,"Descricao":"GPIO10","Funcao":15,"Habilitado":true,"ComponenteID":"DT"},{"Pino":11,"Descricao":"GPIO11","Funcao":16,"Habilitado":true,"ComponenteID":"DT"},{"Pino":12,"Descricao":"GPIO12","Funcao":14,"Habilitado":true,"ComponenteID":"DT"},{"Pino":13,"Descricao":"GPIO13","Funcao":9,"Habilitado":true,"ComponenteID":"DT"},{"Pino":14,"Descricao":"GPIO14","Funcao":13,"Habilitado":true,"ComponenteID":"DT"},{"Pino":96,"Descricao":"5V","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":95,"Descricao":"GND_1","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":94,"Descricao":"GND_2","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":93,"Descricao":"GND_3","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":19,"Descricao":"GPIO19","Funcao":13,"Habilitado":true,"ComponenteID":"ET"},{"Pino":20,"Descricao":"GPIO20","Funcao":9,"Habilitado":true,"ComponenteID":"ET"},{"Pino":21,"Descricao":"GPIO21","Funcao":14,"Habilitado":true,"ComponenteID":"ET"},{"Pino":47,"Descricao":"GPIO47","Funcao":15,"Habilitado":true,"ComponenteID":"ET"},{"Pino":48,"Descricao":"GPIO48","Funcao":16,"Habilitado":true,"ComponenteID":"ET"},{"Pino":45,"Descricao":"GPIO45","Funcao":17,"Habilitado":true,"ComponenteID":"ET"},{"Pino":0,"Descricao":"GPIO0","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":35,"Descricao":"GPIO35","Funcao":20,"Habilitado":true,"ComponenteID":"ET"},{"Pino":36,"Descricao":"GPIO36","Funcao":18,"Habilitado":true,"ComponenteID":"ET"},{"Pino":37,"Descricao":"GPIO37","Funcao":20,"Habilitado":true,"ComponenteID":"EF"},{"Pino":38,"Descricao":"GPIO38","Funcao":18,"Habilitado":true,"ComponenteID":"EF"},{"Pino":39,"Descricao":"GPIO39","Funcao":17,"Habilitado":true,"ComponenteID":"EF"},{"Pino":40,"Descricao":"GPIO40","Funcao":15,"Habilitado":true,"ComponenteID":"EF"},{"Pino":41,"Descricao":"GPIO41","Funcao":16,"Habilitado":true,"ComponenteID":"EF"},{"Pino":42,"Descricao":"GPIO42","Funcao":14,"Habilitado":true,"ComponenteID":"EF"},{"Pino":2,"Descricao":"GPIO2","Funcao":9,"Habilitado":true,"ComponenteID":"EF"},{"Pino":1,"Descricao":"GPIO1","Funcao":13,"Habilitado":true,"ComponenteID":"EF"},{"Pino":44,"Descricao":"RX","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":43,"Descricao":"TX","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":92,"Descricao":"GND_4","Funcao":0,"Habilitado":false,"ComponenteID":""}]
[{"Pino":99,"Descricao":"3V3_1","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":98,"Descricao":"3V3_2","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":97,"Descricao":"RST","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":4,"Descricao":"GPIO4","Funcao":14,"Habilitado":true,"ComponenteID":"ET"},{"Pino":5,"Descricao":"GPIO5","Funcao":9,"Habilitado":true,"ComponenteID":"ET"},{"Pino":6,"Descricao":"GPIO6","Funcao":13,"Habilitado":true,"ComponenteID":"ET"},{"Pino":7,"Descricao":"GPIO7","Funcao":16,"Habilitado":true,"ComponenteID":"ET"},{"Pino":15,"Descricao":"GPIO15","Funcao":15,"Habilitado":true,"ComponenteID":"ET"},{"Pino":16,"Descricao":"GPIO16","Funcao":17,"Habilitado":true,"ComponenteID":"ET"},{"Pino":17,"Descricao":"GPIO17","Funcao":20,"Habilitado":true,"ComponenteID":"ET"},{"Pino":18,"Descricao":"GPIO18","Funcao":18,"Habilitado":true,"ComponenteID":"ET"},{"Pino":8,"Descricao":"GPIO8","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":3,"Descricao":"GPIO3","Funcao":20,"Habilitado":true,"ComponenteID":"DT"},{"Pino":46,"Descricao":"GPIO46","Funcao":18,"Habilitado":true,"ComponenteID":"DT"},{"Pino":9,"Descricao":"GPIO9","Funcao":17,"Habilitado":true,"ComponenteID":"DT"},{"Pino":10,"Descricao":"GPIO10","Funcao":16,"Habilitado":true,"ComponenteID":"DT"},{"Pino":11,"Descricao":"GPIO11","Funcao":15,"Habilitado":true,"ComponenteID":"DT"},{"Pino":12,"Descricao":"GPIO12","Funcao":13,"Habilitado":true,"ComponenteID":"DT"},{"Pino":13,"Descricao":"GPIO13","Funcao":9,"Habilitado":true,"ComponenteID":"DT"},{"Pino":14,"Descricao":"GPIO14","Funcao":14,"Habilitado":true,"ComponenteID":"DT"},{"Pino":96,"Descricao":"5V","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":95,"Descricao":"GND_1","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":94,"Descricao":"GND_2","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":93,"Descricao":"GND_3","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":19,"Descricao":"GPIO19","Funcao":14,"Habilitado":true,"ComponenteID":"DF"},{"Pino":20,"Descricao":"GPIO20","Funcao":9,"Habilitado":true,"ComponenteID":"DF"},{"Pino":21,"Descricao":"GPIO21","Funcao":13,"Habilitado":true,"ComponenteID":"DF"},{"Pino":47,"Descricao":"GPIO47","Funcao":15,"Habilitado":true,"ComponenteID":"DF"},{"Pino":48,"Descricao":"GPIO48","Funcao":16,"Habilitado":true,"ComponenteID":"DF"},{"Pino":45,"Descricao":"GPIO45","Funcao":17,"Habilitado":true,"ComponenteID":"DF"},{"Pino":0,"Descricao":"GPIO0","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":35,"Descricao":"GPIO35","Funcao":20,"Habilitado":true,"ComponenteID":"DF"},{"Pino":36,"Descricao":"GPIO36","Funcao":18,"Habilitado":true,"ComponenteID":"DF"},{"Pino":37,"Descricao":"GPIO37","Funcao":20,"Habilitado":true,"ComponenteID":"EF"},{"Pino":38,"Descricao":"GPIO38","Funcao":18,"Habilitado":true,"ComponenteID":"EF"},{"Pino":39,"Descricao":"GPIO39","Funcao":17,"Habilitado":true,"ComponenteID":"EF"},{"Pino":40,"Descricao":"GPIO40","Funcao":16,"Habilitado":true,"ComponenteID":"EF"},{"Pino":41,"Descricao":"GPIO41","Funcao":15,"Habilitado":true,"ComponenteID":"EF"},{"Pino":42,"Descricao":"GPIO42","Funcao":13,"Habilitado":true,"ComponenteID":"EF"},{"Pino":2,"Descricao":"GPIO2","Funcao":9,"Habilitado":true,"ComponenteID":"EF"},{"Pino":1,"Descricao":"GPIO1","Funcao":14,"Habilitado":true,"ComponenteID":"EF"},{"Pino":44,"Descricao":"RX","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":43,"Descricao":"TX","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":92,"Descricao":"GND_4","Funcao":0,"Habilitado":false,"ComponenteID":""}]

View File

@ -1 +1 @@
[{"Pino":99,"Descricao":"3V3_1","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":98,"Descricao":"3V3_2","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":97,"Descricao":"RST","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":4,"Descricao":"GPIO4","Funcao":5,"Habilitado":true,"ComponenteID":"DF"},{"Pino":5,"Descricao":"GPIO5","Funcao":9,"Habilitado":true,"ComponenteID":"DF"},{"Pino":6,"Descricao":"GPIO6","Funcao":10,"Habilitado":true,"ComponenteID":"DF"},{"Pino":7,"Descricao":"GPIO7","Funcao":11,"Habilitado":true,"ComponenteID":"DF"},{"Pino":15,"Descricao":"GPIO15","Funcao":6,"Habilitado":true,"ComponenteID":"DF"},{"Pino":16,"Descricao":"GPIO16","Funcao":7,"Habilitado":true,"ComponenteID":"DF"},{"Pino":17,"Descricao":"GPIO17","Funcao":8,"Habilitado":true,"ComponenteID":"DF"},{"Pino":18,"Descricao":"GPIO18","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":8,"Descricao":"GPIO8","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":3,"Descricao":"GPIO3","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":46,"Descricao":"GPIO46","Funcao":8,"Habilitado":true,"ComponenteID":"DT"},{"Pino":9,"Descricao":"GPIO9","Funcao":7,"Habilitado":true,"ComponenteID":"DT"},{"Pino":10,"Descricao":"GPIO10","Funcao":6,"Habilitado":true,"ComponenteID":"DT"},{"Pino":11,"Descricao":"GPIO11","Funcao":11,"Habilitado":true,"ComponenteID":"DT"},{"Pino":12,"Descricao":"GPIO12","Funcao":10,"Habilitado":true,"ComponenteID":"DT"},{"Pino":13,"Descricao":"GPIO13","Funcao":9,"Habilitado":true,"ComponenteID":"DT"},{"Pino":14,"Descricao":"GPIO14","Funcao":5,"Habilitado":true,"ComponenteID":"DT"},{"Pino":96,"Descricao":"5V","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":95,"Descricao":"GND_1","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":94,"Descricao":"GND_2","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":93,"Descricao":"GND_3","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":19,"Descricao":"GPIO19","Funcao":5,"Habilitado":true,"ComponenteID":"ET"},{"Pino":20,"Descricao":"GPIO20","Funcao":9,"Habilitado":true,"ComponenteID":"ET"},{"Pino":21,"Descricao":"GPIO21","Funcao":10,"Habilitado":true,"ComponenteID":"ET"},{"Pino":47,"Descricao":"GPIO47","Funcao":11,"Habilitado":true,"ComponenteID":"ET"},{"Pino":48,"Descricao":"GPIO48","Funcao":6,"Habilitado":true,"ComponenteID":"ET"},{"Pino":45,"Descricao":"GPIO45","Funcao":7,"Habilitado":true,"ComponenteID":"ET"},{"Pino":0,"Descricao":"GPIO0","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":35,"Descricao":"GPIO35","Funcao":8,"Habilitado":true,"ComponenteID":"ET"},{"Pino":36,"Descricao":"GPIO36","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":37,"Descricao":"GPIO37","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":38,"Descricao":"GPIO38","Funcao":8,"Habilitado":true,"ComponenteID":"EF"},{"Pino":39,"Descricao":"GPIO39","Funcao":7,"Habilitado":true,"ComponenteID":"EF"},{"Pino":40,"Descricao":"GPIO40","Funcao":6,"Habilitado":true,"ComponenteID":"EF"},{"Pino":41,"Descricao":"GPIO41","Funcao":11,"Habilitado":true,"ComponenteID":"EF"},{"Pino":42,"Descricao":"GPIO42","Funcao":10,"Habilitado":true,"ComponenteID":"EF"},{"Pino":2,"Descricao":"GPIO2","Funcao":9,"Habilitado":true,"ComponenteID":"EF"},{"Pino":1,"Descricao":"GPIO1","Funcao":5,"Habilitado":true,"ComponenteID":"EF"},{"Pino":44,"Descricao":"RX","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":43,"Descricao":"TX","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":92,"Descricao":"GND_4","Funcao":0,"Habilitado":false,"ComponenteID":""}]
[{"Pino":99,"Descricao":"3V3_1","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":98,"Descricao":"3V3_2","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":97,"Descricao":"RST","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":4,"Descricao":"GPIO4","Funcao":5,"Habilitado":true,"ComponenteID":"ET"},{"Pino":5,"Descricao":"GPIO5","Funcao":9,"Habilitado":true,"ComponenteID":"ET"},{"Pino":6,"Descricao":"GPIO6","Funcao":10,"Habilitado":true,"ComponenteID":"ET"},{"Pino":7,"Descricao":"GPIO7","Funcao":11,"Habilitado":true,"ComponenteID":"ET"},{"Pino":15,"Descricao":"GPIO15","Funcao":6,"Habilitado":true,"ComponenteID":"ET"},{"Pino":16,"Descricao":"GPIO16","Funcao":7,"Habilitado":true,"ComponenteID":"ET"},{"Pino":17,"Descricao":"GPIO17","Funcao":8,"Habilitado":true,"ComponenteID":"ET"},{"Pino":18,"Descricao":"GPIO18","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":8,"Descricao":"GPIO8","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":3,"Descricao":"GPIO3","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":46,"Descricao":"GPIO46","Funcao":7,"Habilitado":true,"ComponenteID":"DT"},{"Pino":9,"Descricao":"GPIO9","Funcao":8,"Habilitado":true,"ComponenteID":"DT"},{"Pino":10,"Descricao":"GPIO10","Funcao":6,"Habilitado":true,"ComponenteID":"DT"},{"Pino":11,"Descricao":"GPIO11","Funcao":11,"Habilitado":true,"ComponenteID":"DT"},{"Pino":12,"Descricao":"GPIO12","Funcao":10,"Habilitado":true,"ComponenteID":"DT"},{"Pino":13,"Descricao":"GPIO13","Funcao":9,"Habilitado":true,"ComponenteID":"DT"},{"Pino":14,"Descricao":"GPIO14","Funcao":5,"Habilitado":true,"ComponenteID":"DT"},{"Pino":96,"Descricao":"5V","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":95,"Descricao":"GND_1","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":94,"Descricao":"GND_2","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":93,"Descricao":"GND_3","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":19,"Descricao":"GPIO19","Funcao":5,"Habilitado":true,"ComponenteID":"DF"},{"Pino":20,"Descricao":"GPIO20","Funcao":9,"Habilitado":true,"ComponenteID":"DF"},{"Pino":21,"Descricao":"GPIO21","Funcao":10,"Habilitado":true,"ComponenteID":"DF"},{"Pino":47,"Descricao":"GPIO47","Funcao":11,"Habilitado":true,"ComponenteID":"DF"},{"Pino":48,"Descricao":"GPIO48","Funcao":6,"Habilitado":true,"ComponenteID":"DF"},{"Pino":45,"Descricao":"GPIO45","Funcao":8,"Habilitado":true,"ComponenteID":"DF"},{"Pino":0,"Descricao":"GPIO0","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":35,"Descricao":"GPIO35","Funcao":7,"Habilitado":true,"ComponenteID":"DF"},{"Pino":36,"Descricao":"GPIO36","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":37,"Descricao":"GPIO37","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":38,"Descricao":"GPIO38","Funcao":7,"Habilitado":true,"ComponenteID":"EF"},{"Pino":39,"Descricao":"GPIO39","Funcao":8,"Habilitado":true,"ComponenteID":"EF"},{"Pino":40,"Descricao":"GPIO40","Funcao":6,"Habilitado":true,"ComponenteID":"EF"},{"Pino":41,"Descricao":"GPIO41","Funcao":11,"Habilitado":true,"ComponenteID":"EF"},{"Pino":42,"Descricao":"GPIO42","Funcao":10,"Habilitado":true,"ComponenteID":"EF"},{"Pino":2,"Descricao":"GPIO2","Funcao":9,"Habilitado":true,"ComponenteID":"EF"},{"Pino":1,"Descricao":"GPIO1","Funcao":5,"Habilitado":true,"ComponenteID":"EF"},{"Pino":44,"Descricao":"RX","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":43,"Descricao":"TX","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":92,"Descricao":"GND_4","Funcao":0,"Habilitado":false,"ComponenteID":""}]

View File

@ -1 +1 @@
[{"Pino":99,"Descricao":"3V3_1","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":98,"Descricao":"3V3_2","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":97,"Descricao":"RST","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":4,"Descricao":"GPIO4","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":5,"Descricao":"GPIO5","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":6,"Descricao":"GPIO6","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":7,"Descricao":"GPIO7","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":15,"Descricao":"GPIO15","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":16,"Descricao":"GPIO16","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":17,"Descricao":"GPIO17","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":18,"Descricao":"GPIO18","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":8,"Descricao":"GPIO8","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":3,"Descricao":"GPIO3","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":46,"Descricao":"GPIO46","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":9,"Descricao":"GPIO9","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":10,"Descricao":"GPIO10","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":11,"Descricao":"GPIO11","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":12,"Descricao":"GPIO12","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":13,"Descricao":"GPIO13","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":14,"Descricao":"GPIO14","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":96,"Descricao":"5V","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":95,"Descricao":"GND_1","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":94,"Descricao":"GND_2","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":93,"Descricao":"GND_3","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":19,"Descricao":"GPIO19","Funcao":21,"Habilitado":true,"ComponenteID":"VBAT"},{"Pino":20,"Descricao":"GPIO20","Funcao":21,"Habilitado":true,"ComponenteID":"ABAT"},{"Pino":21,"Descricao":"GPIO21","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":47,"Descricao":"GPIO47","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":48,"Descricao":"GPIO48","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":45,"Descricao":"GPIO45","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":0,"Descricao":"GPIO0","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":35,"Descricao":"GPIO35","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":36,"Descricao":"GPIO36","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":37,"Descricao":"GPIO37","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":38,"Descricao":"GPIO38","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":39,"Descricao":"GPIO39","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":40,"Descricao":"GPIO40","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":41,"Descricao":"GPIO41","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":42,"Descricao":"GPIO42","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":2,"Descricao":"GPIO2","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":1,"Descricao":"GPIO1","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":44,"Descricao":"RX","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":43,"Descricao":"TX","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":92,"Descricao":"GND_4","Funcao":0,"Habilitado":false,"ComponenteID":""}]
[{"Pino":99,"Descricao":"3V3_1","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":98,"Descricao":"3V3_2","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":97,"Descricao":"RST","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":4,"Descricao":"GPIO4","Funcao":12,"Habilitado":true,"ComponenteID":"TMVET"},{"Pino":5,"Descricao":"GPIO5","Funcao":12,"Habilitado":true,"ComponenteID":"TMVEF"},{"Pino":6,"Descricao":"GPIO6","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":7,"Descricao":"GPIO7","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":15,"Descricao":"GPIO15","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":16,"Descricao":"GPIO16","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":17,"Descricao":"GPIO17","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":18,"Descricao":"GPIO18","Funcao":12,"Habilitado":true,"ComponenteID":"TMVDT"},{"Pino":8,"Descricao":"GPIO8","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":3,"Descricao":"GPIO3","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":46,"Descricao":"GPIO46","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":9,"Descricao":"GPIO9","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":10,"Descricao":"GPIO10","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":11,"Descricao":"GPIO11","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":12,"Descricao":"GPIO12","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":13,"Descricao":"GPIO13","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":14,"Descricao":"GPIO14","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":96,"Descricao":"5V","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":95,"Descricao":"GND_1","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":94,"Descricao":"GND_2","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":93,"Descricao":"GND_3","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":19,"Descricao":"GPIO19","Funcao":12,"Habilitado":true,"ComponenteID":"TMVDF"},{"Pino":20,"Descricao":"GPIO20","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":21,"Descricao":"GPIO21","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":47,"Descricao":"GPIO47","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":48,"Descricao":"GPIO48","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":45,"Descricao":"GPIO45","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":0,"Descricao":"GPIO0","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":35,"Descricao":"GPIO35","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":36,"Descricao":"GPIO36","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":37,"Descricao":"GPIO37","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":38,"Descricao":"GPIO38","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":39,"Descricao":"GPIO39","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":40,"Descricao":"GPIO40","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":41,"Descricao":"GPIO41","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":42,"Descricao":"GPIO42","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":2,"Descricao":"GPIO2","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":1,"Descricao":"GPIO1","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Pino":44,"Descricao":"RX","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":43,"Descricao":"TX","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Pino":92,"Descricao":"GND_4","Funcao":0,"Habilitado":false,"ComponenteID":""}]

View File

@ -1 +1 @@
908a685e8becb0dd9bec840937514641f5a9adbd
9ea427b4d2d26368941e1cb4449fcfcce5ce6bc4b961432a39239bab4ca7dc9e

View File

@ -188,3 +188,180 @@ C:\Zendion Inc\agrobot_base\AgroBase\AgroBase\bin\Debug\Python\Scripts\line-angl
C:\Zendion Inc\agrobot_base\AgroBase\AgroBase\bin\Debug\Python\Scripts\line-angle2.py
C:\Zendion Inc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.Forms.Operacoes.frmOperacaoSeguidorLinha.resources
C:\Zendion Inc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.Forms.Atuador.frmAtuConfig.resources
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Python\Models\yolo\coco.names
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Python\Models\yolo\yolov3.cfg
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Python\Models\yolo\yolov3.weights
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\CefSharp.Core.Runtime.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\CefSharp.Core.Runtime.pdb
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\CefSharp.Core.Runtime.xml
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\chrome_100_percent.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\chrome_200_percent.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\chrome_elf.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\d3dcompiler_47.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\icudtl.dat
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\libcef.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\libEGL.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\libGLESv2.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\LICENSE.txt
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\af.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\am.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\ar.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\bg.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\bn.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\ca.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\cs.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\da.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\de.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\el.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\en-GB.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\en-US.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\es-419.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\es.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\et.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\fa.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\fi.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\fil.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\fr.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\gu.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\he.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\hi.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\hr.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\hu.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\id.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\it.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\ja.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\kn.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\ko.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\lt.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\lv.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\ml.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\mr.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\ms.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\nb.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\nl.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\pl.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\pt-BR.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\pt-PT.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\ro.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\ru.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\sk.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\sl.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\sr.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\sv.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\sw.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\ta.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\te.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\th.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\tr.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\uk.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\ur.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\vi.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\zh-CN.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\locales\zh-TW.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\README.txt
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\resources.pak
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\snapshot_blob.bin
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\v8_context_snapshot.bin
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\vk_swiftshader.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\vk_swiftshader_icd.json
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\vulkan-1.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\CefSharp.BrowserSubprocess.Core.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\CefSharp.BrowserSubprocess.Core.pdb
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\CefSharp.BrowserSubprocess.pdb
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Python\Models\yolo\coco-tiny.names
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Python\Models\yolo\yolov3-tiny.cfg
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Python\Models\yolo\yolov3-tiny.weights
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Python\Models\yolo\yolov3-weed.weights
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Python\Models\yolo\crop_weed_detection.weights
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Python\Scripts\green-detector.py
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Python\Scripts\line-angle.py
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Python\Scripts\line-angle2.py
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Python\Scripts\map-load.py
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\AgroBase.exe.config
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\AgroBase.exe
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\AgroBase.pdb
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\CefSharp.Core.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\CefSharp.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\CefSharp.WinForms.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Emgu.CV.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Microsoft.Bcl.AsyncInterfaces.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Microsoft.DirectX.DirectInput.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Microsoft.DirectX.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Newtonsoft.Json.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\OpenTK.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\OpenTK.GLControl.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\SharpDX.DirectInput.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\SharpDX.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\System.Buffers.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\System.CodeDom.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\System.Memory.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\System.Numerics.Vectors.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\System.Runtime.CompilerServices.Unsafe.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\System.Text.Encodings.Web.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\System.Text.Json.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\System.Threading.Tasks.Extensions.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\System.ValueTuple.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\ZedGraph.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\CefSharp.pdb
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\CefSharp.xml
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\CefSharp.Core.pdb
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\CefSharp.Core.xml
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\CefSharp.WinForms.pdb
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\CefSharp.WinForms.xml
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Emgu.CV.xml
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Microsoft.Bcl.AsyncInterfaces.xml
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Microsoft.DirectX.xml
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Newtonsoft.Json.xml
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\OpenTK.xml
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\OpenTK.GLControl.xml
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\SharpDX.pdb
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\SharpDX.DirectInput.pdb
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\SharpDX.DirectInput.xml
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\System.Buffers.xml
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\System.CodeDom.xml
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\System.Memory.xml
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\System.Numerics.Vectors.xml
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\System.Runtime.CompilerServices.Unsafe.xml
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\System.Text.Encodings.Web.xml
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\System.Text.Json.xml
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\System.Threading.Tasks.Extensions.xml
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\System.ValueTuple.xml
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\ZedGraph.xml
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\de\ZedGraph.resources.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\es\ZedGraph.resources.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\fr\ZedGraph.resources.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\hu\ZedGraph.resources.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\it\ZedGraph.resources.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\ja\ZedGraph.resources.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\pt\ZedGraph.resources.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\ru\ZedGraph.resources.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\sk\ZedGraph.resources.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\sv\ZedGraph.resources.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\tr\ZedGraph.resources.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\zh-cn\ZedGraph.resources.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\zh-tw\ZedGraph.resources.dll
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.csproj.AssemblyReference.cache
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.Forms.Atuador.frmAtuConfig.resources
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.Forms.Direcional.frmDirConfig.resources
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.Forms.Direcional.frmDirPlot.resources
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.Forms.frmAcompanhamento.resources
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.Forms.frmAtuCamera.resources
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.Forms.frmMapa.resources
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.Forms.Movimentacao.frmMovConfig.resources
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.Forms.frmMovDiagnosticos.resources
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.Forms.frmMovPlot.resources
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.frmPrincipal.resources
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.Forms.frmInstancial.resources
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.Forms.frmJoystick.resources
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.Forms.Operacoes.frmOperacaoSeguidorLinha.resources
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.Forms.Sensoriamento.frmSenCamera.resources
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.Forms.Sensoriamento.frmSenConfig.resources
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.Properties.Resources.resources
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.csproj.GenerateResource.cache
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.csproj.CoreCompileInputs.cache
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.csproj.CopyComplete
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.exe
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.pdb
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Python\Scripts\gps-viewer.py
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.Forms.frmGPS.resources
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.Forms.Sensoriamento.frmSenConfig2.resources

Binary file not shown.

View File

@ -1,4 +1,4 @@
#include "C:\Zendion Inc\agrobot_base\Firmware\Modulos\SerialService.h"
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\SerialService.h"
#define D_Code Dir
#define _pinoLED RGB_BUILTIN

View File

@ -18,14 +18,14 @@ enum F_Code {
};
enum S_Code {
sRPM,
sTST,
sCFG,
sTMP,
sENC,
sCOR,
sTEN,
sFLX,
sRPM = 133,
sTST = 154,
sCFG = 211,
sTMP = 411,
sENC = 111,
sCOR = 322,
sTEN = 112,
sFLX = 198,
};
enum Sentido {

View File

@ -2,9 +2,9 @@
// Versão Firmware: 9
// Ultima atualização: 21/11/2023
#include "C:\Zendion Inc\agrobot_base\Firmware\Modulos\SerialService.h"
#include "C:\Zendion Inc\agrobot_base\Firmware\Modulos\MemoryService.h"
#include "C:\Zendion Inc\agrobot_base\Firmware\Modulos\utils.h"
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\SerialService.h"
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\MemoryService.h"
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\utils.h"
#include <PID_v1.h>
#include "DHT.h"
#define D_Code Mov

View File

@ -87,4 +87,10 @@ String MontarDadosProtocoloSensorGenerico(String dados1, String dados2 = "", Str
return Protocolo;
}
String MontarDadosProtocoloNTC10K(float temperatura) {
String Protocolo =
(String)temperatura;
return Protocolo;
}
#endif

View File

@ -1,5 +1,5 @@
#include "C:\Zendion Inc\agrobot_base\Firmware\Modulos\SerialService.h"
#include "C:\Zendion Inc\agrobot_base\Firmware\Modulos\utils.h"
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\SerialService.h"
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\utils.h"
#include <PID_v1.h>
#include "DHT.h"
#define D_Code Mov
@ -308,10 +308,10 @@ private:
// Comparação das leituras atuais com as leituras anteriores
if (LeituraHa == LeituraAnteriorHc && LeituraHc == LeituraAnteriorHa) {
_Sentido = Horario;
_Sentido = Antihorario;
}
else if (LeituraHa == LeituraAnteriorHb && LeituraHb == LeituraAnteriorHa) {
_Sentido = Antihorario;
_Sentido = Horario;
}
else {
// Outros casos (não determinados)

View File

@ -0,0 +1,603 @@
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\SerialService.h"
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\utils.h"
#include <PID_v1.h>
#include <SimpleKalmanFilter.h>
#define D_Code Mov
#define _pinoLED RGB_BUILTIN
int _pinoReleGeral = -1;
long _baudRate = 115200;
bool Conectado = false;
int _TaxaAmostragem = 500;
const int PPR = 22; // Pulsos por revolução
int RampaMin = 0;
int ZeroRampa = 0;
int RampaMax = 1023;
// Temperatura NTC 10K
double Vs = 3.3; // TENSÃO DE SAIDA DO ESP32
double R1 = 10000; //RESISTOR UTILIZADO NO DIVISOR DE TENSÃO
double Beta = 3950; // VALOR DE BETA
double To = 298.15; // VALOR EM KELVIN REFERENTE A 25° CELSIUS
double Ro = 10000;
double adcMax = 4095.0;
class Motor {
public:
// Construtor
Motor(String desc) {
_ID = desc;
}
// Definições
String _ID;
int _canal;
int _pinoPWM;
int _pinoDIR;
int _pinoBRK;
int _pinoSTP;
int _pinoHLA;
int _pinoHLB;
int _pinoHLC;
int _pinoTMP;
double _Kp;
double _Ki;
double _Kd;
PID* _PID = nullptr;
bool Iniciado = false;
bool Testando = false;
bool Revertendo = false;
bool SentidoContrario = false;
StatusMotor Aceleracao = Estavel;
StatusMotor AceleracaoA = Estavel;
// Consumo
const int leituras = 5;
volatile float RPM_arr[5];
volatile bool Hall_arr[5][3];
double RPM;
double PotenciaAtual;
volatile int ultimaLeituraHallA = 0;
volatile unsigned int tempoAnterior = 0;
volatile float periodo = 0;
double temperatura = 0.0;
SimpleKalmanFilter* tempKalman;
// Entrada de dados
bool _MalhaFechada;
int _PotMap;
double _RPM_SP;
Sentido _SentidoSP = Parado;
Sentido _SentidoM = Parado;
Sentido _Sentido = Parado;
int _US_Addr;
bool _Freio = false;
int _Margem = 2;
void Inicializar() {
if (Iniciado) {
EnviarDadosSerial(_ID + " ja inicializado");
EnviarDadosSerial(MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
return;
}
if (_pinoPWM > -1) {
ledcSetup(_canal, 1000, 10);
ledcAttachPin(_pinoPWM, _canal);
PotenciaAtual = ZeroRampa;
_PotMap = PotenciaAtual;
_RPM_SP = 0;
ledcWrite(_canal, _PotMap);
}
if (_pinoDIR > -1) {
pinMode(_pinoDIR, OUTPUT);
digitalWrite(_pinoDIR, LOW);
_SentidoM = Parado;
}
if (_pinoBRK > -1) {
pinMode(_pinoBRK, OUTPUT);
digitalWrite(_pinoBRK, LOW);
}
if (_pinoSTP > -1) {
pinMode(_pinoSTP, OUTPUT);
digitalWrite(_pinoSTP, HIGH);
}
if (_pinoHLA > -1) {
pinMode(_pinoHLA, INPUT);
ultimaLeituraHallA = digitalRead(_pinoHLA);
RPM = 0;
periodo = 0;
tempoAnterior = 0;
xTaskCreatePinnedToCore(&Motor::RPMTaskWrapper, "RPMTask", 15000, this, 25 - _canal, &RPMTaskHandle, tskNO_AFFINITY);
ReiniciarAceleracaoArr();
ReiniciarHallArr();
_PID = new PID(&RPM, &PotenciaAtual, &_RPM_SP, _Kp, _Ki, _Kd, DIRECT);
_PID->SetOutputLimits(RampaMin, RampaMax);
_PID->SetMode(AUTOMATIC);
}
if (_pinoHLB > -1) {
pinMode(_pinoHLB, INPUT);
}
if (_pinoHLC > -1) {
pinMode(_pinoHLC, INPUT);
}
if (_pinoTMP > -1) {
pinMode(_pinoTMP, INPUT);
tempKalman = new SimpleKalmanFilter(2, 2, 0.01);
}
xTaskCreatePinnedToCore(&Motor::RampaTaskWrapper, "RampaTask", 5000, this, 21 - _canal + 4, &RampaTaskHandle, tskNO_AFFINITY);
EnviarDadosSerial(_ID + " Iniciado");
Iniciado = true;
EnviarDadosSerial(MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
}
void Desligar() {
if (!Iniciado) {
EnviarDadosSerial(_ID + " nao esta inicializado");
EnviarDadosSerial(MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
return;
}
// Parar a execução das tarefas
vTaskDelete(RampaTaskHandle);
if (_pinoHLA > -1) {
vTaskDelete(RPMTaskHandle);
}
if (_pinoTMP > -1) {
delete tempKalman;
}
// Desanexar o canal PWM
if (_pinoPWM > -1) {
ledcDetachPin(_pinoPWM);
}
// Redefinir as configurações para os valores iniciais
pinMode(_pinoPWM, INPUT);
pinMode(_pinoDIR, INPUT);
pinMode(_pinoBRK, INPUT);
pinMode(_pinoSTP, INPUT);
pinMode(_pinoHLA, INPUT);
pinMode(_pinoHLB, INPUT);
pinMode(_pinoHLC, INPUT);
pinMode(_pinoTMP, INPUT);
// Outras redefinições de variáveis de estado, se necessário
delete _PID;
EnviarDadosSerial(_ID + " Desligado");
Iniciado = false;
EnviarDadosSerial(MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
}
void ReiniciarAceleracaoArr() {
for (int i = 0; i < leituras; i++) {
RPM_arr[i] = -1.0;
}
}
void ReiniciarHallArr() {
for (int i = 0; i < leituras; i++) {
Hall_arr[i][0] = false;
Hall_arr[i][1] = false;
Hall_arr[i][2] = false;
}
}
void ReverterSentidoGiro() {
_SentidoM = _SentidoM == Horario ? Antihorario : Horario;
}
private:
TaskHandle_t RPMTaskHandle = NULL;
static void RPMTaskWrapper(void *pvParameters) {
Motor *motor = static_cast<Motor*>(pvParameters);
motor->RPMTask();
}
void RPMTask() {
const int RpmMax = 650; // RPM Máximo aferir
const float RelacaoPPR = (60 / PPR) * 1000; // Multiplicador do cálculo de RPM (período em ms)
const float MenorPeriodo = RelacaoPPR / RpmMax; // Tempo mínimo de leitura
unsigned long firstMilis = millis();
int pulsos = 0;
while (1)
{
if (!Conectado) {
// Caso não esteja conectado, aguarda 1 segundo até a próxima verificação, liberando uso de CPU
vTaskDelay(1000);
continue;
}
// Medir RPM apenas quando ocorrer um pulso no sensor HALL
int LeituraHa = digitalRead(_pinoHLA);
if (LeituraHa != ultimaLeituraHallA) {
ultimaLeituraHallA = LeituraHa;
pulsos++;
// Calcular o período em microssegundos
unsigned long tempoAtual = micros();
unsigned long periodoUs = tempoAtual - tempoAnterior;
periodo = periodoUs / 1000.0; // Converte de us para ms (2300 us para 2,3 ms)
// Salva o valor do RPM anterior
double RPM_A = RPM;
// Se o período entre pulsos for menor que o tempo mínimo entre pulsos em ms, significa que o sensor está em uma posição em que existe oscilação de leitura,
// pois o RPM estaria acima do máximo, logo, assumir o valor de RPM aferido anteriormente
if (periodo < MenorPeriodo) {
RPM = RPM_A;
}
// Calcular RPM se houve variação de tempo entre o pulso atual e o pulso anterior
else if (periodo != 0) {
// RPM = 60 / (Pulsos por Revolução * Período em segundos)
// A fórmula foi adaptada para otimizar processamento
RPM = RelacaoPPR / periodo;
}
// Se não houve alteração no período, então o motor não se moveu
else {
RPM = 0;
}
CalcularSentidoGiro(RPM);
// Reiniciar variáveis
tempoAnterior = tempoAtual;
}
CorrigirPotenciaMotor();
long intMillis = (millis() - firstMilis);
// A cada _TaxaAmostragem, enviar os dados para o software
if (intMillis >= _TaxaAmostragem) {
if (pulsos == 0) {
RPM = 0;
periodo = 0;
CalcularSentidoGiro(RPM);
}
pulsos = 0;
double PotAtual = fmap(PotenciaAtual, RampaMin, RampaMax, 0.0, 100.0);
EnviarDadosSerial(MontarProtocoloSensor(sRPM, _ID, MontarDadosProtocoloRPM(RPM, PotAtual, Aceleracao, _Sentido, Revertendo)));
firstMilis = millis();
}
// Aguarda metade do menor período possível entre leituras
vTaskDelay(1);
}
}
void CalcularSentidoGiro(float _RPM) {
if (_pinoHLA == -1 || _pinoHLB == -1 || _pinoHLC == -1) {
CalculaAceleracao(_RPM);
return;
}
bool LeituraHa = ultimaLeituraHallA == 1;
bool LeituraHb = digitalRead(_pinoHLB) == 1;
bool LeituraHc = digitalRead(_pinoHLC) == 1;
for (int i = 1; i < leituras; i++) {
Hall_arr[i - 1][0] = Hall_arr[i][0];
Hall_arr[i - 1][1] = Hall_arr[i][1];
Hall_arr[i - 1][2] = Hall_arr[i][2];
}
Hall_arr[leituras - 1][0] = LeituraHa;
Hall_arr[leituras - 1][1] = LeituraHb;
Hall_arr[leituras - 1][2] = LeituraHc;
// Leituras dos sensores Hall nas leituras anteriores
bool LeituraAnteriorHa = Hall_arr[leituras - 2][0];
bool LeituraAnteriorHb = Hall_arr[leituras - 2][1];
bool LeituraAnteriorHc = Hall_arr[leituras - 2][2];
// Comparação das leituras atuais com as leituras anteriores
if (LeituraHa == LeituraAnteriorHc && LeituraHc == LeituraAnteriorHa) {
_Sentido = Antihorario;
}
else if (LeituraHa == LeituraAnteriorHb && LeituraHb == LeituraAnteriorHa) {
_Sentido = Horario;
}
else {
// Outros casos (não determinados)
}
CalculaAceleracao(_RPM);
}
void CalculaAceleracao(float _RPM) {
float RPM_total = _RPM;
int Desconsiderar = 0;
// Salvar as ultimas leituras
for (int i = 1; i < leituras; i++) {
RPM_arr[i - 1] = RPM_arr[i];
RPM_total += RPM_arr[i - 1] < 0 ? 0 : RPM_arr[i - 1];
Desconsiderar += RPM_arr[i - 1] < 0 ? 1 : 0;
}
RPM_arr[leituras - 1] = _RPM;
float RPM_medio = RPM_total / (leituras - Desconsiderar);
AceleracaoA = Aceleracao;
if (_SentidoSP == Parado && _RPM == 0) {
Aceleracao = Estavel;
} else if (RPM_arr[leituras - 3] < (RPM_arr[leituras - 2] - _Margem) && RPM_arr[leituras - 2] < (_RPM - _Margem)) {
Aceleracao = Acelerando;
} else if (RPM_arr[leituras - 3] > (RPM_arr[leituras - 2] + _Margem) && RPM_arr[leituras - 2] > (_RPM + _Margem)) {
Aceleracao = Desacelerando;
} else {
Aceleracao = Estavel;
}
}
void CorrigirPotenciaMotor() {
if (_MalhaFechada && !Revertendo && _SentidoSP != Parado) {
if (_pinoHLA > -1 && _pinoHLB > -1 && _pinoHLC > -1) {
SentidoContrario = _Sentido != _SentidoSP;
}
float _rpmA = RPM;
if (SentidoContrario) {
RPM = RPM * -1;
}
/*else if (Aceleracao == Desacelerando && AceleracaoA == Estavel) {
RPM = 0;
}*/
_PID->Compute();
//RPM = _rpmA;
}
}
TaskHandle_t RampaTaskHandle = NULL;
static void RampaTaskWrapper(void *pvParameters) {
Motor *motor = static_cast<Motor*>(pvParameters);
motor->RampaTask();
}
void RampaTask() {
unsigned long firstMilis = millis();
while (1)
{
if (!Conectado) {
// Caso não esteja conectado, aguarda 1 segundo até a próxima verificação, liberando uso de CPU
vTaskDelay(1000);
continue;
}
Atualizar();
long intMillis = (millis() - firstMilis);
if (intMillis >= _TaxaAmostragem) {
AferirTemperatura();
firstMilis = millis();
}
vTaskDelay(1);
}
}
void Atualizar() {
bool Travado = _PotMap > ZeroRampa && RPM_arr[leituras - 1] == 0 && RPM_arr[leituras - 2] > 0 && RPM_arr[leituras - 3] > 0 && _Sentido != Parado;
if (_pinoPWM > -1 && Travado) {
_PotMap = ZeroRampa;
ledcWrite(_canal, _PotMap);
vTaskDelay(400);
_PotMap = PotenciaAtual;
}
if (_pinoDIR > -1) {
Revertendo = _SentidoSP != Parado && _SentidoSP != _SentidoM;
if (Revertendo) {
ledcWrite(_canal, ZeroRampa);
vTaskDelay(400);
_SentidoM = _SentidoSP;
Revertendo = false;
}
digitalWrite(_pinoDIR, _SentidoSP == Horario);
}
if (_pinoBRK > -1) {
digitalWrite(_pinoBRK, _Freio);
}
if (_pinoSTP > -1) {
//digitalWrite(_pinoSTP, HIGH);
}
if (_pinoPWM > -1) {
if (_SentidoSP == Parado) {
_PotMap = ZeroRampa;
}
else {
_PotMap = PotenciaAtual;
}
ledcWrite(_canal, _PotMap);
}
}
// TEMPERATURA E UMIDADE
void AferirTemperatura() {
if (_pinoTMP > -1) {
double Vout, Rt = 0;
double T, Tc, Tf, adc = 0;
adc = analogRead(_pinoTMP);// VARIÁVEL QUE RECEBE A LEITURA DO NTC10K
float adcValue = tempKalman->updateEstimate(adc);
//CALCULOS PARA CONVERSÃO DA LEITURA RECEBIDA PELO ESP32 EM TEMPERATURA EM °C
Vout = adcValue * Vs/adcMax;
Rt = R1 * Vout / (Vs - Vout);
T = 1/(1/To + log(Rt/Ro)/Beta);
Tc = T - 273.15;
Tf = Tc * 9 / 5 + 32;
EnviarDadosSerial(MontarProtocoloSensor(sTMP, _ID, MontarDadosProtocoloNTC10K(Tc)));
}
}
};
Motor M1("ET");
Motor M2("EF");
Motor M3("DT");
Motor M4("DF");
void setup() {
Serial.begin(_baudRate);
delay(10);
if (_pinoReleGeral > -1) {
pinMode(_pinoReleGeral, OUTPUT);
digitalWrite(_pinoReleGeral, LOW);
}
}
void loop() {
if (Serial.available() > 3) {
String Protocolo = "";
F_Code _funcao = Nda;
while (Serial.available()) {
char Entrada = (char)Serial.read();
if (Entrada == EndLine) {
break;
}
Protocolo += Entrada;
if (Protocolo.length() == 3) {
if (_funcao == Nda) {
_funcao = (F_Code)((String)Protocolo[0] + (String)Protocolo[1] + (String)Protocolo[2]).toInt();
Protocolo = "";
}
}
}
EnviarDadosSerial("OK");
if (_funcao == Chk) {
EnviarDadosSerial(MontarProtocoloVerificacao(D_Code));
}
else if (_funcao == Cfg) {
String ID = ((String)Protocolo[0] + (String)Protocolo[1]);
bool Conectar = (String)Protocolo[3] == "1";
if (ID == "MD") {
_TaxaAmostragem = ((String)Protocolo[5] + (String)Protocolo[6] + (String)Protocolo[7] + (String)Protocolo[8] + (String)Protocolo[9]).toInt();
int pinoReleGeral = ((String)Protocolo[11] + (String)Protocolo[12]).toInt();
int _RampaMin = ((String)Protocolo[14] + (String)Protocolo[15] + (String)Protocolo[16] + (String)Protocolo[17]).toInt();
int _RampaMax = ((String)Protocolo[19] + (String)Protocolo[20] + (String)Protocolo[21] + (String)Protocolo[22]).toInt();
int _PPR = ((String)Protocolo[24] + (String)Protocolo[25] + (String)Protocolo[26]).toInt();
RampaMin = _RampaMin;
RampaMax = _RampaMax;
//PPR = _PPR;
if (pinoReleGeral > -1) {
pinMode(_pinoReleGeral, INPUT);
_pinoReleGeral = pinoReleGeral;
pinMode(_pinoReleGeral, OUTPUT);
digitalWrite(_pinoReleGeral, Conectar);
}
vTaskDelay(pdMS_TO_TICKS(100));
Conectado = Conectar;
EnviarDadosSerial(MontarProtocoloSensor(sCFG, "MD", Conectado ? "1" : "0"));
}
else {
int canal = ((String)Protocolo[5]).toInt();
bool _foc = (String)Protocolo[7] == "1";
bool motor_ativado = (String)Protocolo[9] == "1";
double _Kp = ((String)Protocolo[11] + (String)Protocolo[12] + (String)Protocolo[13] + (String)Protocolo[14] + (String)Protocolo[15]).toDouble();
double _Ki = ((String)Protocolo[17] + (String)Protocolo[18] + (String)Protocolo[19] + (String)Protocolo[20] + (String)Protocolo[21]).toDouble();
double _Kd = ((String)Protocolo[23] + (String)Protocolo[24] + (String)Protocolo[25] + (String)Protocolo[26] + (String)Protocolo[27]).toDouble();
int pwm = ((String)Protocolo[29] + (String)Protocolo[30]).toInt();
int dir = ((String)Protocolo[32] + (String)Protocolo[33]).toInt();
int brk = ((String)Protocolo[35] + (String)Protocolo[36]).toInt();
int stp = ((String)Protocolo[38] + (String)Protocolo[39]).toInt();
int hallA = ((String)Protocolo[41] + (String)Protocolo[42]).toInt();
int hallB = ((String)Protocolo[44] + (String)Protocolo[45]).toInt();
int hallC = ((String)Protocolo[47] + (String)Protocolo[48]).toInt();
int tmp = ((String)Protocolo[50] + (String)Protocolo[51]).toInt();
Motor* _motor = ID == "ET" ? &M1 : ID == "EF" ? &M2 : ID == "DT" ? &M3 : &M4;
if (motor_ativado) {
if (Conectar) {
_motor->_canal = canal;
_motor->_pinoPWM = pwm;
_motor->_pinoDIR = dir;
_motor->_pinoBRK = brk;
_motor->_pinoSTP = stp;
_motor->_pinoHLA = hallA;
_motor->_pinoHLB = hallB;
_motor->_pinoHLC = hallC;
_motor->_pinoTMP = tmp;
_motor->_MalhaFechada = _foc;
_motor->_Kp = _Kp;
_motor->_Ki = _Ki;
_motor->_Kd = _Kd;
_motor->Inicializar();
}
else {
_motor->Desligar();
}
vTaskDelay(pdMS_TO_TICKS(500));
}
}
}
else if (_funcao == Cmd) {
//canal;potencia;sentido;rampa;precisao;rpm
//0;000;0;000;000;000
String ID = ((String)Protocolo[0] + (String)Protocolo[1]);
Motor* _motor = ID == "ET" ? &M1 : ID == "EF" ? &M2 : ID == "DT" ? &M3 : &M4;
_motor->_SentidoSP = (Sentido)((String)Protocolo[3]).toInt();
_motor->_RPM_SP = ((String)Protocolo[5] + (String)Protocolo[6] + (String)Protocolo[7]).toInt();
_motor->_MalhaFechada = (String)Protocolo[9] == "1";
_motor->ReiniciarAceleracaoArr();
bool reverter = ((String)Protocolo[11]) == "1";
if (reverter) {
_motor->ReverterSentidoGiro();
}
}
else if (_funcao == Tst) {
String ID = ((String)Protocolo[0] +(String)Protocolo[1]);
Motor* _motor = ID == "ET" ? &M1 : ID == "EF" ? &M2 : ID == "DT" ? &M3 : &M4;
bool EmTeste = _motor->Testando;
if (!EmTeste) {
//_motor->Testar();
}
}
}
}

View File

@ -0,0 +1,8 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
"version": "0.2.0",
"configurations": [
]
}

View File

@ -0,0 +1,560 @@
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\SerialService.h"
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\utils.h"
#include <PID_v1.h>
#define D_Code Mov
#define _pinoLED RGB_BUILTIN
int _pinoReleGeral = -1;
long _baudRate = 115200;
bool Conectado = false;
int _TaxaAmostragem = 500;
const int PPR = 22; // Pulsos por revolução
int RampaMin = 0;
int ZeroRampa = 0;
int RampaMax = 1023;
class Motor {
public:
// Construtor
Motor(String desc) {
_ID = desc;
}
// Definições
String _ID;
int _canal;
int _pinoPWM;
int _pinoDIR;
int _pinoBRK;
int _pinoSTP;
int _pinoHLA;
int _pinoHLB;
int _pinoHLC;
double _Kp;
double _Ki;
double _Kd;
PID* _PID = nullptr;
bool Iniciado = false;
bool Testando = false;
bool Revertendo = false;
bool SentidoContrario = false;
StatusMotor Aceleracao = Estavel;
StatusMotor AceleracaoA = Estavel;
// Consumo
const int leituras = 5;
volatile float RPM_arr[5];
volatile bool Hall_arr[5][3];
double RPM;
double PotenciaAtual;
volatile int ultimaLeituraHallA = 0;
volatile int ultimaLeituraHallB = 0;
volatile int ultimaLeituraHallC = 0;
volatile unsigned int tempoAnterior = 0;
volatile float periodo = 0;
// Entrada de dados
bool _MalhaFechada;
int _PotMap;
double _RPM_SP;
Sentido _SentidoSP = Parado;
Sentido _SentidoM = Parado;
Sentido _Sentido = Parado;
int _US_Addr;
bool _Freio = false;
int _Margem = 2;
void Inicializar() {
if (Iniciado) {
EnviarDadosSerial(_ID + " ja inicializado");
EnviarDadosSerial(MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
return;
}
if (_pinoPWM > -1) {
ledcSetup(_canal, 1000, 10);
ledcAttachPin(_pinoPWM, _canal);
PotenciaAtual = ZeroRampa;
_PotMap = PotenciaAtual;
_RPM_SP = 0;
ledcWrite(_canal, _PotMap);
}
if (_pinoDIR > -1) {
pinMode(_pinoDIR, OUTPUT);
digitalWrite(_pinoDIR, LOW);
_SentidoM = Parado;
}
if (_pinoBRK > -1) {
pinMode(_pinoBRK, OUTPUT);
digitalWrite(_pinoBRK, LOW);
}
if (_pinoSTP > -1) {
pinMode(_pinoSTP, OUTPUT);
digitalWrite(_pinoSTP, HIGH);
}
if (_pinoHLA > -1) {
pinMode(_pinoHLA, INPUT);
ultimaLeituraHallA = digitalRead(_pinoHLA);
RPM = 0;
periodo = 0;
tempoAnterior = 0;
xTaskCreatePinnedToCore(&Motor::RPMTaskWrapper, "RPMTask", 15000, this, 25 - _canal, &RPMTaskHandle, tskNO_AFFINITY);
ReiniciarAceleracaoArr();
ReiniciarHallArr();
_PID = new PID(&RPM, &PotenciaAtual, &_RPM_SP, _Kp, _Ki, _Kd, DIRECT);
_PID->SetOutputLimits(RampaMin, RampaMax);
_PID->SetMode(AUTOMATIC);
}
if (_pinoHLB > -1) {
pinMode(_pinoHLB, INPUT);
ultimaLeituraHallB = digitalRead(_pinoHLB);
}
if (_pinoHLC > -1) {
pinMode(_pinoHLC, INPUT);
ultimaLeituraHallC = digitalRead(_pinoHLC);
}
xTaskCreatePinnedToCore(&Motor::RampaTaskWrapper, "RampaTask", 5000, this, 21 - _canal + 4, &RampaTaskHandle, tskNO_AFFINITY);
EnviarDadosSerial(_ID + " Iniciado");
Iniciado = true;
EnviarDadosSerial(MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
}
void Desligar() {
if (!Iniciado) {
EnviarDadosSerial(_ID + " nao esta inicializado");
EnviarDadosSerial(MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
return;
}
// Parar a execução das tarefas
vTaskDelete(RampaTaskHandle);
if (_pinoHLA > -1) {
vTaskDelete(RPMTaskHandle);
}
// Desanexar o canal PWM
if (_pinoPWM > -1) {
ledcDetachPin(_pinoPWM);
}
// Redefinir as configurações para os valores iniciais
pinMode(_pinoPWM, INPUT);
pinMode(_pinoDIR, INPUT);
pinMode(_pinoBRK, INPUT);
pinMode(_pinoSTP, INPUT);
pinMode(_pinoHLA, INPUT);
pinMode(_pinoHLB, INPUT);
pinMode(_pinoHLC, INPUT);
// Outras redefinições de variáveis de estado, se necessário
delete _PID;
EnviarDadosSerial(_ID + " Desligado");
Iniciado = false;
EnviarDadosSerial(MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
}
void ReiniciarAceleracaoArr() {
for (int i = 0; i < leituras; i++) {
RPM_arr[i] = -1.0;
}
}
void ReiniciarHallArr() {
for (int i = 0; i < leituras; i++) {
Hall_arr[i][0] = false;
Hall_arr[i][1] = false;
Hall_arr[i][2] = false;
}
}
void ReverterSentidoGiro() {
_SentidoM = _SentidoM == Horario ? Antihorario : Horario;
}
private:
TaskHandle_t RPMTaskHandle = NULL;
static void RPMTaskWrapper(void *pvParameters) {
Motor *motor = static_cast<Motor*>(pvParameters);
motor->RPMTask();
}
void RPMTask() {
const int RpmMax = 650; // RPM Máximo aferir
const float RelacaoPPR = (60 / PPR) * 1000; // Multiplicador do cálculo de RPM (período em ms)
const float MenorPeriodo = RelacaoPPR / RpmMax; // Tempo mínimo de leitura
unsigned long firstMilis = millis();
int pulsos = 0;
while (1)
{
if (!Conectado) {
// Caso não esteja conectado, aguarda 1 segundo até a próxima verificação, liberando uso de CPU
vTaskDelay(1000);
continue;
}
// Medir RPM apenas quando ocorrer um pulso no sensor HALL
bool LeituraHa = digitalRead(_pinoHLA) == 1;
if (LeituraHa != ultimaLeituraHallA) {
ultimaLeituraHallA = LeituraHa;
pulsos++;
// Calcular o período em microssegundos
unsigned long tempoAtual = micros();
unsigned long periodoUs = tempoAtual - tempoAnterior;
periodo = periodoUs / 1000.0; // Converte de us para ms (2300 us para 2,3 ms)
// Salva o valor do RPM anterior
double RPM_A = RPM;
// Se o período entre pulsos for menor que o tempo mínimo entre pulsos em ms, significa que o sensor está em uma posição em que existe oscilação de leitura,
// pois o RPM estaria acima do máximo, logo, assumir o valor de RPM aferido anteriormente
if (periodo < MenorPeriodo) {
RPM = RPM_A;
}
// Calcular RPM se houve variação de tempo entre o pulso atual e o pulso anterior
else if (periodo != 0) {
// RPM = 60 / (Pulsos por Revolução * Período em segundos)
// A fórmula foi adaptada para otimizar processamento
RPM = RelacaoPPR / periodo;
}
// Se não houve alteração no período, então o motor não se moveu
else {
RPM = 0;
}
CalcularSentidoGiro(RPM);
// Reiniciar variáveis
tempoAnterior = tempoAtual;
}
CorrigirPotenciaMotor();
long intMillis = (millis() - firstMilis);
// A cada _TaxaAmostragem, enviar os dados para o software
if (intMillis >= _TaxaAmostragem) {
if (pulsos == 0) {
RPM = 0;
periodo = 0;
CalcularSentidoGiro(RPM);
}
pulsos = 0;
double PotAtual = fmap(PotenciaAtual, RampaMin, RampaMax, 0.0, 100.0);
EnviarDadosSerial(MontarProtocoloSensor(sRPM, _ID, MontarDadosProtocoloRPM(RPM, PotAtual, Aceleracao, _Sentido, Revertendo)));
firstMilis = millis();
}
// Aguarda metade do menor período possível entre leituras
vTaskDelay(1);
}
}
void CalcularSentidoGiro(float _RPM) {
if (_pinoHLA == -1 || _pinoHLB == -1 || _pinoHLC == -1) {
CalculaAceleracao(_RPM);
return;
}
bool LeituraHa = ultimaLeituraHallA == 1;
bool LeituraHb = digitalRead(_pinoHLB) == 1;
bool LeituraHc = digitalRead(_pinoHLC) == 1;
for (int i = 1; i < leituras; i++) {
Hall_arr[i - 1][0] = Hall_arr[i][0];
Hall_arr[i - 1][1] = Hall_arr[i][1];
Hall_arr[i - 1][2] = Hall_arr[i][2];
}
Hall_arr[leituras - 1][0] = LeituraHa;
Hall_arr[leituras - 1][1] = LeituraHb;
Hall_arr[leituras - 1][2] = LeituraHc;
// Leituras dos sensores Hall nas leituras anteriores
bool LeituraAnteriorHa = Hall_arr[leituras - 2][0];
bool LeituraAnteriorHb = Hall_arr[leituras - 2][1];
bool LeituraAnteriorHc = Hall_arr[leituras - 2][2];
// Comparação das leituras atuais com as leituras anteriores
if (LeituraHa == LeituraAnteriorHc && LeituraHc == LeituraAnteriorHa) {
_Sentido = Antihorario;
}
else if (LeituraHa == LeituraAnteriorHb && LeituraHb == LeituraAnteriorHa) {
_Sentido = Horario;
}
else {
// Outros casos (não determinados)
}
CalculaAceleracao(_RPM);
}
void CalculaAceleracao(float _RPM) {
float RPM_total = _RPM;
int Desconsiderar = 0;
// Salvar as ultimas leituras
for (int i = 1; i < leituras; i++) {
RPM_arr[i - 1] = RPM_arr[i];
RPM_total += RPM_arr[i - 1] < 0 ? 0 : RPM_arr[i - 1];
Desconsiderar += RPM_arr[i - 1] < 0 ? 1 : 0;
}
RPM_arr[leituras - 1] = _RPM;
float RPM_medio = RPM_total / (leituras - Desconsiderar);
AceleracaoA = Aceleracao;
if (_SentidoSP == Parado && _RPM == 0) {
Aceleracao = Estavel;
} else if (RPM_arr[leituras - 3] < (RPM_arr[leituras - 2] - _Margem) && RPM_arr[leituras - 2] < (_RPM - _Margem)) {
Aceleracao = Acelerando;
} else if (RPM_arr[leituras - 3] > (RPM_arr[leituras - 2] + _Margem) && RPM_arr[leituras - 2] > (_RPM + _Margem)) {
Aceleracao = Desacelerando;
} else {
Aceleracao = Estavel;
}
}
void CorrigirPotenciaMotor() {
if (_MalhaFechada && !Revertendo && _SentidoSP != Parado) {
if (_pinoHLA > -1 && _pinoHLB > -1 && _pinoHLC > -1) {
SentidoContrario = _Sentido != _SentidoSP;
}
float _rpmA = RPM;
if (SentidoContrario) {
RPM = RPM * -1;
}
/*else if (Aceleracao == Desacelerando && AceleracaoA == Estavel) {
RPM = 0;
}*/
_PID->Compute();
//RPM = _rpmA;
}
}
TaskHandle_t RampaTaskHandle = NULL;
static void RampaTaskWrapper(void *pvParameters) {
Motor *motor = static_cast<Motor*>(pvParameters);
motor->RampaTask();
}
void RampaTask() {
unsigned long firstMilis = millis();
while (1)
{
if (!Conectado) {
// Caso não esteja conectado, aguarda 1 segundo até a próxima verificação, liberando uso de CPU
vTaskDelay(1000);
continue;
}
Atualizar();
vTaskDelay(1);
}
}
void Atualizar() {
bool Travado = _PotMap > ZeroRampa && RPM_arr[leituras - 1] == 0 && RPM_arr[leituras - 2] > 0 && RPM_arr[leituras - 3] > 0 && _Sentido != Parado;
if (_pinoPWM > -1 && Travado) {
_PotMap = ZeroRampa;
ledcWrite(_canal, _PotMap);
vTaskDelay(400);
_PotMap = PotenciaAtual;
}
if (_pinoDIR > -1) {
Revertendo = _SentidoSP != Parado && _SentidoSP != _SentidoM;
if (Revertendo) {
ledcWrite(_canal, ZeroRampa);
vTaskDelay(400);
_SentidoM = _SentidoSP;
Revertendo = false;
}
digitalWrite(_pinoDIR, _SentidoSP == Horario);
}
if (_pinoBRK > -1) {
digitalWrite(_pinoBRK, _Freio);
}
if (_pinoSTP > -1) {
//digitalWrite(_pinoSTP, HIGH);
}
if (_pinoPWM > -1) {
if (_SentidoSP == Parado) {
_PotMap = ZeroRampa;
}
else {
_PotMap = PotenciaAtual;
}
ledcWrite(_canal, _PotMap);
}
}
};
Motor M1("ET");
Motor M2("EF");
Motor M3("DT");
Motor M4("DF");
void setup() {
Serial.begin(_baudRate);
delay(10);
if (_pinoReleGeral > -1) {
pinMode(_pinoReleGeral, OUTPUT);
digitalWrite(_pinoReleGeral, LOW);
}
}
void loop() {
if (Serial.available() > 3) {
String Protocolo = "";
F_Code _funcao = Nda;
while (Serial.available()) {
char Entrada = (char)Serial.read();
if (Entrada == EndLine) {
break;
}
Protocolo += Entrada;
if (Protocolo.length() == 3) {
if (_funcao == Nda) {
_funcao = (F_Code)((String)Protocolo[0] + (String)Protocolo[1] + (String)Protocolo[2]).toInt();
Protocolo = "";
}
}
}
EnviarDadosSerial("OK");
if (_funcao == Chk) {
EnviarDadosSerial(MontarProtocoloVerificacao(D_Code));
}
else if (_funcao == Cfg) {
String ID = ((String)Protocolo[0] + (String)Protocolo[1]);
bool Conectar = (String)Protocolo[3] == "1";
if (ID == "MD") {
_TaxaAmostragem = ((String)Protocolo[5] + (String)Protocolo[6] + (String)Protocolo[7] + (String)Protocolo[8] + (String)Protocolo[9]).toInt();
int pinoReleGeral = ((String)Protocolo[11] + (String)Protocolo[12]).toInt();
int _RampaMin = ((String)Protocolo[14] + (String)Protocolo[15] + (String)Protocolo[16] + (String)Protocolo[17]).toInt();
int _RampaMax = ((String)Protocolo[19] + (String)Protocolo[20] + (String)Protocolo[21] + (String)Protocolo[22]).toInt();
int _PPR = ((String)Protocolo[24] + (String)Protocolo[25] + (String)Protocolo[26]).toInt();
RampaMin = _RampaMin;
RampaMax = _RampaMax;
//PPR = _PPR;
if (pinoReleGeral > -1) {
pinMode(_pinoReleGeral, INPUT);
_pinoReleGeral = pinoReleGeral;
pinMode(_pinoReleGeral, OUTPUT);
digitalWrite(_pinoReleGeral, Conectar);
}
vTaskDelay(pdMS_TO_TICKS(100));
Conectado = Conectar;
EnviarDadosSerial(MontarProtocoloSensor(sCFG, "MD", Conectado ? "1" : "0"));
}
else {
int canal = ((String)Protocolo[5]).toInt();
bool _foc = (String)Protocolo[7] == "1";
bool motor_ativado = (String)Protocolo[9] == "1";
double _Kp = ((String)Protocolo[11] + (String)Protocolo[12] + (String)Protocolo[13] + (String)Protocolo[14] + (String)Protocolo[15]).toDouble();
double _Ki = ((String)Protocolo[17] + (String)Protocolo[18] + (String)Protocolo[19] + (String)Protocolo[20] + (String)Protocolo[21]).toDouble();
double _Kd = ((String)Protocolo[23] + (String)Protocolo[24] + (String)Protocolo[25] + (String)Protocolo[26] + (String)Protocolo[27]).toDouble();
int pwm = ((String)Protocolo[29] + (String)Protocolo[30]).toInt();
int dir = ((String)Protocolo[32] + (String)Protocolo[33]).toInt();
int brk = ((String)Protocolo[35] + (String)Protocolo[36]).toInt();
int stp = ((String)Protocolo[38] + (String)Protocolo[39]).toInt();
int hallA = ((String)Protocolo[41] + (String)Protocolo[42]).toInt();
int hallB = ((String)Protocolo[44] + (String)Protocolo[45]).toInt();
int hallC = ((String)Protocolo[47] + (String)Protocolo[48]).toInt();
Motor* _motor = ID == "ET" ? &M1 : ID == "EF" ? &M2 : ID == "DT" ? &M3 : &M4;
if (motor_ativado) {
if (Conectar) {
_motor->_canal = canal;
_motor->_pinoPWM = pwm;
_motor->_pinoDIR = dir;
_motor->_pinoBRK = brk;
_motor->_pinoSTP = stp;
_motor->_pinoHLA = hallA;
_motor->_pinoHLB = hallB;
_motor->_pinoHLC = hallC;
_motor->_MalhaFechada = _foc;
_motor->_Kp = _Kp;
_motor->_Ki = _Ki;
_motor->_Kd = _Kd;
_motor->Inicializar();
}
else {
_motor->Desligar();
}
vTaskDelay(pdMS_TO_TICKS(500));
}
}
}
else if (_funcao == Cmd) {
//canal;potencia;sentido;rampa;precisao;rpm
//0;000;0;000;000;000
String ID = ((String)Protocolo[0] + (String)Protocolo[1]);
Motor* _motor = ID == "ET" ? &M1 : ID == "EF" ? &M2 : ID == "DT" ? &M3 : &M4;
_motor->_SentidoSP = (Sentido)((String)Protocolo[3]).toInt();
_motor->_RPM_SP = ((String)Protocolo[5] + (String)Protocolo[6] + (String)Protocolo[7]).toInt();
_motor->_MalhaFechada = (String)Protocolo[9] == "1";
_motor->ReiniciarAceleracaoArr();
bool reverter = ((String)Protocolo[11]) == "1";
if (reverter) {
_motor->ReverterSentidoGiro();
}
}
else if (_funcao == Tst) {
String ID = ((String)Protocolo[0] +(String)Protocolo[1]);
Motor* _motor = ID == "ET" ? &M1 : ID == "EF" ? &M2 : ID == "DT" ? &M3 : &M4;
bool EmTeste = _motor->Testando;
if (!EmTeste) {
//_motor->Testar();
}
}
}
}

View File

@ -0,0 +1,8 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
"version": "0.2.0",
"configurations": [
]
}

View File

@ -0,0 +1,198 @@
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\SerialService.h"
#define D_Code Sen
#define _pinoLED RGB_BUILTIN
long _baudRate = 115200;
bool Conectado = false;
int _TaxaAmostragem;
int FrequenciaMaxima = 10000;
class SensorTemperatura {
public:
SensorTemperatura(String desc) {
_ID = desc;
}
// Definições
String _ID;
S_Code _componente = sTMP;
int _pino;
int _delayAmostragem;
int _prioridade;
bool Iniciado = false;
void Inicializar() {
if (Iniciado) {
EnviarDadosSerial(_ID + " ja inicializado");
EnviarDadosSerial(MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
return;
}
if (_pino > -1) {
pinMode(_pino, INPUT);
}
xTaskCreatePinnedToCore(&SensorTemperatura::STTaskWrapper, "STTask", 5000, this, _prioridade, &STTaskHandle, tskNO_AFFINITY);
EnviarDadosSerial(_ID + " Iniciado");
Iniciado = true;
EnviarDadosSerial(MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
}
void Desligar() {
if (!Iniciado) {
EnviarDadosSerial(_ID + " nao esta inicializado");
EnviarDadosSerial(MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
return;
}
// Parar a execução das tarefas
vTaskDelete(STTaskHandle);
// Redefinir as configurações para os valores iniciais
pinMode(_pino, INPUT);
EnviarDadosSerial(_ID + " Desligado");
Iniciado = false;
EnviarDadosSerial(MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
}
private:
// Variáveis
double Vs = 3.3; // TENSÃO DE SAIDA DO ESP32
double R1 = 10000; //RESISTOR UTILIZADO NO DIVISOR DE TENSÃO
double Beta = 3950; // VALOR DE BETA
double To = 298.15; // VALOR EM KELVIN REFERENTE A 25° CELSIUS
double Ro = 10000;
double adcMax = 4095.0;
TaskHandle_t STTaskHandle = NULL;
static void STTaskWrapper(void *pvParameters) {
SensorTemperatura *sensor = static_cast<SensorTemperatura*>(pvParameters);
sensor->STTask();
}
void STTask() {
unsigned long firstMilis = millis();
while (1)
{
if (!Conectado) {
// Caso não esteja conectado, aguarda 1 segundo até a próxima verificação, liberando uso de CPU
vTaskDelay(1000);
continue;
}
long intMillis = (millis() - firstMilis);
// A cada _TaxaAmostragem, enviar os dados para o software
if (intMillis >= (_TaxaAmostragem + _delayAmostragem)) {
AferirTemperatura();
firstMilis = millis();
}
// Aguarda metade do menor período possível entre leituras
vTaskDelay(1);
}
}
void AferirTemperatura() {
double Vout, Rt = 0;
double T, Tc, Tf, adc = 0;
adc = analogRead(_pino); // VARIÁVEL QUE RECEBE A LEITURA DO NTC10K
//float adcValue = tempKalman->updateEstimate(adc);
float adcValue = adc;
//CALCULOS PARA CONVERSÃO DA LEITURA RECEBIDA PELO ESP32 EM TEMPERATURA EM °C
Vout = adcValue * Vs / adcMax;
Rt = R1 * Vout / (Vs - Vout);
T = 1 / (1 / To + log(Rt / Ro) / Beta);
Tc = T - 273.15;
Tf = Tc * 9 / 5 + 32;
EnviarDadosSerial(MontarProtocoloSensor(sTMP, _ID, MontarDadosProtocoloNTC10K(Tc)));
}
};
SensorTemperatura TM1("TMVET");
SensorTemperatura TM2("TMVEF");
SensorTemperatura TM3("TMVDT");
SensorTemperatura TM4("TMVDF");
void setup() {
Serial.begin(_baudRate);
}
void loop() {
if (Serial.available() > 3) {
String Protocolo = "";
F_Code _funcao = Nda;
while (Serial.available()) {
char Entrada = (char)Serial.read();
if (Entrada == EndLine) {
break;
}
Protocolo += Entrada;
if (Protocolo.length() == 3) {
if (_funcao == Nda) {
_funcao = (F_Code)((String)Protocolo[0] + (String)Protocolo[1] + (String)Protocolo[2]).toInt();
Protocolo = "";
}
}
}
EnviarDadosSerial("OK");
if (_funcao == Chk) {
EnviarDadosSerial(MontarProtocoloVerificacao(D_Code));
} else if (_funcao == Cfg) {
String ID = ((String)Protocolo[0] + (String)Protocolo[1] + (String)Protocolo[2] + (String)Protocolo[3] + (String)Protocolo[4]);
bool Conectar = (String)Protocolo[6] == "1";
if (ID == "MD ") {
_TaxaAmostragem = ((String)Protocolo[8] + (String)Protocolo[9] + (String)Protocolo[10] + (String)Protocolo[11] + (String)Protocolo[12]).toInt();
vTaskDelay(pdMS_TO_TICKS(100));
Conectado = Conectar;
EnviarDadosSerial(MontarProtocoloSensor(sCFG, "MD", Conectado ? "1" : "0"));
}
else {
S_Code componente = (S_Code)((String)Protocolo[8] + (String)Protocolo[9] + (String)Protocolo[10]).toInt();
bool sensor_ativado = (String)Protocolo[12] == "1";
int delayAmostragem = ((String)Protocolo[14] + (String)Protocolo[15] + (String)Protocolo[16] + (String)Protocolo[17] + (String)Protocolo[18]).toInt();
int prioridade = ((String)Protocolo[20] + (String)Protocolo[21]).toInt();
int pino = ((String)Protocolo[23] + (String)Protocolo[24]).toInt();
if (componente == sTMP) {
SensorTemperatura* _sensor = ID == "TMVET" ? &TM1 : ID == "TMVEF" ? &TM2 : ID == "TMVDT" ? &TM3 : &TM4;
if (sensor_ativado) {
if (Conectar) {
_sensor->_pino = pino;
_sensor->_prioridade = prioridade;
_sensor->_delayAmostragem = delayAmostragem;
_sensor->Inicializar();
}
else {
_sensor->Desligar();
}
}
}
}
} else if (_funcao == Cmd) {
} else if (_funcao == Tst) {
}
}
}

View File

@ -0,0 +1,30 @@
#include <SimpleKalmanFilter.h>
SimpleKalmanFilter simpleKalmanFilter(2, 2, 0.01);
#define _pinoCOR 4
const float Vcc = 4.16; // Tensão de alimentação do ACS758
const float Voffset = 0.502; // Tensão de offset do ACS758
const float sensibilidade = 0.17; // Sensibilidade do ACS758 em V/A (40mV/A para este exemplo)
void setup() {
Serial.begin(115200);
pinMode(_pinoCOR, INPUT);
}
void loop() {
int adcValueO = analogRead(_pinoCOR);
float adcValue = simpleKalmanFilter.updateEstimate(adcValueO);
float voltage = adcValue * (Vcc / 4095.0); // Convertendo o valor ADC para tensão
float current = (voltage - Voffset) / sensibilidade; // Calculando a corrente em A
Serial.print("ADC Value: ");
Serial.print(adcValue);
Serial.print(" Voltage: ");
Serial.print(voltage, 3); // Mostra a tensão com 3 casas decimais
Serial.print(" Current: ");
Serial.println(current, 3); // Mostra a corrente com 3 casas decimais
delay(100);
}

View File

@ -0,0 +1,28 @@
int PinoNTC = 1; // PINO DO NTC10K
double Vs = 3.3; // TENSÃO DE SAIDA DO ESP32
double R1 = 10000; //RESISTOR UTILIZADO NO DIVISOR DE TENSÃO
double Beta = 3950; // VALOR DE BETA
double To=298.15; // VALOR EM KELVIN REFERENTE A 25° CELSIUS
double Ro=10000;
double adcMax = 4095.0;
void setup() {
Serial.begin(115200); // INICIA O MONITOR SERIAL A UMA TAXA DE ATUALIZAÇÃO DE 9600
}
void loop() {
//GARANTE QUE AS INFORMAÇÕES SERÃO RESETADAS APÓS CADA LEITURA
double Vout, Rt = 0;
double T, Tc, Tf, adc = 0;
adc = analogRead(PinoNTC);// VARIÁVEL QUE RECEBE A LEITURA DO NTC10K
//CALCULOS PARA CONVERSÃO DA LEITURA RECEBIDA PELO ESP32 EM TEMPERATURA EM °C
Vout = adc * Vs/adcMax;
Rt = R1 * Vout / (Vs - Vout);
T = 1/(1/To + log(Rt/Ro)/Beta);
Tc = T - 273.15;
Tf = Tc * 9 / 5 + 32;
//Imprime no monitor serial o texto e a temperatura lida pelo sensor
Serial.print("Temperatura: ");
Serial.print(Tc);
Serial.println(" °C");
delay(500); // atraso entre as leituras
}

View File

@ -0,0 +1,34 @@
from flask import Flask, jsonify, request
import folium
import sys
app = Flask(__name__)
# Armazena a última localização conhecida
last_known_location = (-22.1839247, -47.3824123)
# Rota para renderizar o mapa inicial
@app.route('/')
def index():
global last_known_location
folium_map = folium.Map(location=last_known_location, zoom_start=14)
folium.Marker(last_known_location, tooltip='Ponto GPS').add_to(folium_map)
return folium_map._repr_html_()
# Rota para atualizar as coordenadas do marcador
@app.route('/update_marker', methods=['POST'])
def update_marker():
global last_known_location
data = request.json
last_known_location = (data['lat'], data['lon'])
return jsonify({'message': 'Coordenadas atualizadas com sucesso!'}), 200
if __name__ == '__main__':
port = 5000 # Porta padrão
if len(sys.argv) > 1:
try:
port = int(sys.argv[1])
except ValueError:
print("Por favor forneça um número de porta válido.")
sys.exit(1)
app.run(debug=True, port=port)

View File

@ -0,0 +1,26 @@
from flask import Flask, jsonify, request
import folium
app = Flask(__name__)
# Armazena a última localização conhecida
last_known_location = (-22.1839247, -47.3824123)
# Rota para renderizar o mapa inicial
@app.route('/')
def index():
global last_known_location
folium_map = folium.Map(location=last_known_location, zoom_start=14)
folium.Marker(last_known_location, tooltip='Ponto GPS').add_to(folium_map)
return folium_map._repr_html_()
# Rota para atualizar as coordenadas do marcador
@app.route('/update_marker', methods=['POST'])
def update_marker():
global last_known_location
data = request.json
last_known_location = (data['lat'], data['lon'])
return jsonify({'message': 'Coordenadas atualizadas com sucesso!'}), 200
if __name__ == '__main__':
app.run(debug=True)