Merged in direcional (pull request #1)

implementacao firmware direcional v9
This commit is contained in:
Diego Freitas da Costa 2024-05-15 19:53:26 +00:00
commit 37d865168c
87 changed files with 27036 additions and 14294 deletions

Binary file not shown.

View File

@ -574,8 +574,8 @@ namespace AgroBase.Models
Valor = Sensor.Leituras[0],
Maximo = Sensor.Leituras[0] > Sensor.LimiteMaximo,
Minimo = Sensor.Leituras[0] < Sensor.LimiteMinimo,
ParaMaximo = true,
ParaMinimo = true
ParaMaximo = false,
ParaMinimo = false
};
bool Adicionado = false;

View File

@ -54,12 +54,19 @@ namespace AgroBase.Services
public static void MarcarMensagemRecebida(int Id)
{
var Mensagem = MensagensFila.FirstOrDefault(x => x.Id == Id);
if (Mensagem != null)
try
{
Mensagem.Enviado = true;
Mensagem.Recebido = true;
Mensagem.RecebidoEm = DateTime.Now;
var Mensagem = MensagensFila.FirstOrDefault(x => x.Id == Id);
if (Mensagem != null)
{
Mensagem.Enviado = true;
Mensagem.Recebido = true;
Mensagem.RecebidoEm = DateTime.Now;
}
}
catch
{
MarcarMensagemRecebida(Id);
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Momento":"2024-05-14T14:31:16.5514643-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":40.666666666666686,"BateriaConsumida":0.0,"DistanciaPercorrida":[0.0],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":0.0,"AnguloCarroBussola":0.0,"AnguloCarro":0.0,"SonarFrontal":null},{"Momento":"2024-05-14T14:31:21.5474662-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":38.000000000000021,"BateriaConsumida":0.0,"DistanciaPercorrida":[44.417076135074289],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":26.792489877337857,"AnguloCarroBussola":0.0,"AnguloCarro":26.792489877337857,"SonarFrontal":null},{"Momento":"2024-05-14T14:31:26.551465-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":40.333333333333364,"BateriaConsumida":0.0,"DistanciaPercorrida":[48.086473312388812],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":0.0,"AnguloCarroBussola":0.0,"AnguloCarro":0.0,"SonarFrontal":null},{"Momento":"2024-05-14T14:31:29.373471-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":40.666666666666686,"BateriaConsumida":0.0,"DistanciaPercorrida":[59.196241284562973],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":339.76236648495751,"AnguloCarroBussola":0.0,"AnguloCarro":339.76236648495751,"SonarFrontal":null}]

View File

@ -0,0 +1 @@
[{"Latitude":-22.213150166666665,"Longitude":-47.381637166666664,"DataHora":"2024-05-14T14:31:03","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213150166666665,"Longitude":-47.381637166666664,"DataHora":"2024-05-14T14:31:04","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213150166666665,"Longitude":-47.381637166666664,"DataHora":"2024-05-14T14:31:05","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213150166666665,"Longitude":-47.381637166666664,"DataHora":"2024-05-14T14:31:06","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213499333333335,"Longitude":-47.381491333333337,"DataHora":"2024-05-14T14:31:07","Altitude":634.1,"Velocidade":1.0167480000000002,"NumeroSatelites":4,"PrecisaoHorizontal":1.83,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213499333333335,"Longitude":-47.381491333333337,"DataHora":"2024-05-14T14:31:08","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213477333333334,"Longitude":-47.381479333333331,"DataHora":"2024-05-14T14:31:09","Altitude":633.8,"Velocidade":3.548432,"NumeroSatelites":4,"PrecisaoHorizontal":2.64,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213466166666667,"Longitude":-47.381445833333331,"DataHora":"2024-05-14T14:31:10","Altitude":633.6,"Velocidade":6.798692,"NumeroSatelites":3,"PrecisaoHorizontal":5.33,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213466166666667,"Longitude":-47.381445833333331,"DataHora":"2024-05-14T14:31:12","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213466166666667,"Longitude":-47.381445833333331,"DataHora":"2024-05-14T14:31:13","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213466166666667,"Longitude":-47.381445833333331,"DataHora":"2024-05-14T14:31:14","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.213455166666666,"Longitude":-47.3813825,"DataHora":"2024-05-14T14:31:16","Altitude":633.3,"Velocidade":4.5170280000000007,"NumeroSatelites":3,"PrecisaoHorizontal":2.93,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0},{"Latitude":-22.2134175,"Longitude":-47.3813975,"DataHora":"2024-05-14T14:31:17","Altitude":633.1,"Velocidade":4.183668,"NumeroSatelites":4,"PrecisaoHorizontal":1.97,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0}]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Momento":"2024-05-15T10:11:07.1130095-03:00","VelocidadeMedia":2.1575,"PorcentagemBateria":44.666666666666664,"BateriaConsumida":0.0,"DistanciaPercorrida":[0.963038400821167],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":313.83523287124854,"AnguloCarroBussola":180.9,"AnguloCarro":180.9,"SonarFrontal":null},{"Momento":"2024-05-15T10:11:12.1242647-03:00","VelocidadeMedia":3.275,"PorcentagemBateria":44.666666666666664,"BateriaConsumida":0.0,"DistanciaPercorrida":[2.98028488320971],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":327.73919233859016,"AnguloCarroBussola":180.9,"AnguloCarro":180.9,"SonarFrontal":null},{"Momento":"2024-05-15T10:11:17.1098177-03:00","VelocidadeMedia":0.68499999999999994,"PorcentagemBateria":44.666666666666664,"BateriaConsumida":0.0,"DistanciaPercorrida":[6.7887456315332546],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":359.15809931264033,"AnguloCarroBussola":225.0,"AnguloCarro":225.0,"SonarFrontal":null},{"Momento":"2024-05-15T10:11:22.1295084-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":44.666666666666664,"BateriaConsumida":0.0,"DistanciaPercorrida":[7.3131227937591419],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":70.198340852408933,"AnguloCarroBussola":225.0,"AnguloCarro":225.0,"SonarFrontal":null},{"Momento":"2024-05-15T10:11:27.1162514-03:00","VelocidadeMedia":0.5525,"PorcentagemBateria":44.500000000000028,"BateriaConsumida":0.0,"DistanciaPercorrida":[7.6614960836171493],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":155.1609399717413,"AnguloCarroBussola":225.0,"AnguloCarro":225.0,"SonarFrontal":null},{"Momento":"2024-05-15T10:11:32.1169405-03:00","VelocidadeMedia":0.2375,"PorcentagemBateria":43.000000000000028,"BateriaConsumida":0.0,"DistanciaPercorrida":[11.392174184706931],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":246.44973069290097,"AnguloCarroBussola":225.0,"AnguloCarro":225.0,"SonarFrontal":null},{"Momento":"2024-05-15T10:11:37.1063255-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":44.166666666666707,"BateriaConsumida":0.0,"DistanciaPercorrida":[12.758542054929476],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":257.80956171546052,"AnguloCarroBussola":225.0,"AnguloCarro":225.0,"SonarFrontal":null},{"Momento":"2024-05-15T10:11:42.1793396-03:00","VelocidadeMedia":0.052499999999999991,"PorcentagemBateria":44.000000000000007,"BateriaConsumida":0.0,"DistanciaPercorrida":[14.472118899110127],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":73.78485087846434,"AnguloCarroBussola":225.0,"AnguloCarro":225.0,"SonarFrontal":null},{"Momento":"2024-05-15T10:11:47.1317457-03:00","VelocidadeMedia":0.6875,"PorcentagemBateria":44.500000000000028,"BateriaConsumida":0.0,"DistanciaPercorrida":[15.410928497384353],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":60.23683523996209,"AnguloCarroBussola":225.0,"AnguloCarro":225.0,"SonarFrontal":null},{"Momento":"2024-05-15T10:11:52.1154138-03:00","VelocidadeMedia":0.515,"PorcentagemBateria":44.333333333333336,"BateriaConsumida":0.0,"DistanciaPercorrida":[16.508644053577292],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":200.32028971051378,"AnguloCarroBussola":225.0,"AnguloCarro":225.0,"SonarFrontal":null},{"Momento":"2024-05-15T10:11:57.1094736-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":44.333333333333336,"BateriaConsumida":0.0,"DistanciaPercorrida":[18.289986129955171],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":0.0,"AnguloCarroBussola":225.0,"AnguloCarro":225.0,"SonarFrontal":null},{"Momento":"2024-05-15T10:12:00.8741811-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":44.333333333333336,"BateriaConsumida":0.0,"DistanciaPercorrida":[18.428773556411564],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":269.99999980315897,"AnguloCarroBussola":225.0,"AnguloCarro":225.0,"SonarFrontal":null}],{"Momento":"2024-05-15T10:12:10.9568297-03:00","VelocidadeMedia":0.0,"PorcentagemBateria":44.500000000000028,"BateriaConsumida":0.0,"DistanciaPercorrida":[18.428773556411564],"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"AnguloCarroGPS":269.99999980315897,"AnguloCarroBussola":225.0,"AnguloCarro":225.0,"SonarFrontal":null}]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"ExpansorGPIO":false,"EnderecoExpansor":"","Pinos":[{"Controlador":1,"Barramento":0,"Pino":99,"Descricao":"1","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":98,"Descricao":"2","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":36,"Descricao":"3","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":39,"Descricao":"4","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":34,"Descricao":"5","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":35,"Descricao":"6","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":32,"Descricao":"7","Funcao":12,"Habilitado":true,"ComponenteID":"TMVET"},{"Controlador":1,"Barramento":0,"Pino":33,"Descricao":"8","Funcao":12,"Habilitado":true,"ComponenteID":"TMVEF"},{"Controlador":1,"Barramento":0,"Pino":25,"Descricao":"9","Funcao":12,"Habilitado":true,"ComponenteID":"TMVDT"},{"Controlador":1,"Barramento":0,"Pino":26,"Descricao":"10","Funcao":12,"Habilitado":true,"ComponenteID":"TMVDF"},{"Controlador":1,"Barramento":0,"Pino":27,"Descricao":"11","Funcao":38,"Habilitado":true,"ComponenteID":"LEDMN"},{"Controlador":1,"Barramento":0,"Pino":14,"Descricao":"12","Funcao":38,"Habilitado":true,"ComponenteID":"LEDAT"},{"Controlador":1,"Barramento":0,"Pino":12,"Descricao":"13","Funcao":38,"Habilitado":true,"ComponenteID":"LEDOP"},{"Controlador":1,"Barramento":0,"Pino":97,"Descricao":"14","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":13,"Descricao":"15","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":9,"Descricao":"16","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":10,"Descricao":"17","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":11,"Descricao":"18","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":96,"Descricao":"19","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":6,"Descricao":"26","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":7,"Descricao":"27","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":8,"Descricao":"28","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":15,"Descricao":"29","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":2,"Descricao":"30","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":0,"Descricao":"31","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":4,"Descricao":"32","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":16,"Descricao":"33","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":17,"Descricao":"34","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":5,"Descricao":"35","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":18,"Descricao":"36","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":19,"Descricao":"37","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":95,"Descricao":"38","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":21,"Descricao":"39","Funcao":33,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":3,"Descricao":"40","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":1,"Descricao":"41","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":22,"Descricao":"42","Funcao":34,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":23,"Descricao":"43","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":94,"Descricao":"44","Funcao":0,"Habilitado":false,"ComponenteID":""}]}
{"ExpansorGPIO":false,"EnderecoExpansor":"","Pinos":[{"Controlador":1,"Barramento":0,"Pino":99,"Descricao":"1","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":98,"Descricao":"2","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":36,"Descricao":"3","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":39,"Descricao":"4","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":34,"Descricao":"5","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":35,"Descricao":"6","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":32,"Descricao":"7","Funcao":12,"Habilitado":true,"ComponenteID":"TMVET"},{"Controlador":1,"Barramento":0,"Pino":33,"Descricao":"8","Funcao":12,"Habilitado":true,"ComponenteID":"TMVEF"},{"Controlador":1,"Barramento":0,"Pino":25,"Descricao":"9","Funcao":12,"Habilitado":true,"ComponenteID":"TMVDT"},{"Controlador":1,"Barramento":0,"Pino":26,"Descricao":"10","Funcao":12,"Habilitado":true,"ComponenteID":"TMVDF"},{"Controlador":1,"Barramento":0,"Pino":27,"Descricao":"11","Funcao":38,"Habilitado":true,"ComponenteID":"LEDOP"},{"Controlador":1,"Barramento":0,"Pino":14,"Descricao":"12","Funcao":38,"Habilitado":true,"ComponenteID":"LEDAT"},{"Controlador":1,"Barramento":0,"Pino":12,"Descricao":"13","Funcao":38,"Habilitado":true,"ComponenteID":"LEDMN"},{"Controlador":1,"Barramento":0,"Pino":97,"Descricao":"14","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":13,"Descricao":"15","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":9,"Descricao":"16","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":10,"Descricao":"17","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":11,"Descricao":"18","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":96,"Descricao":"19","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":6,"Descricao":"26","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":7,"Descricao":"27","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":8,"Descricao":"28","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":15,"Descricao":"29","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":2,"Descricao":"30","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":0,"Descricao":"31","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":4,"Descricao":"32","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":16,"Descricao":"33","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":17,"Descricao":"34","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":5,"Descricao":"35","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":18,"Descricao":"36","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":19,"Descricao":"37","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":95,"Descricao":"38","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":21,"Descricao":"39","Funcao":33,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":3,"Descricao":"40","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":1,"Descricao":"41","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":22,"Descricao":"42","Funcao":34,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":23,"Descricao":"43","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Controlador":1,"Barramento":0,"Pino":94,"Descricao":"44","Funcao":0,"Habilitado":false,"ComponenteID":""}]}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -25,7 +25,7 @@
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_f8872872d362397e346888da36799a6a {
#map_235fa83d4b51d53b0df06fc71795e861 {
position: relative;
width: 100.0%;
height: 100.0%;
@ -39,14 +39,14 @@
<body>
<div class="folium-map" id="map_f8872872d362397e346888da36799a6a" ></div>
<div class="folium-map" id="map_235fa83d4b51d53b0df06fc71795e861" ></div>
</body>
<script>
var map_f8872872d362397e346888da36799a6a = L.map(
"map_f8872872d362397e346888da36799a6a",
var map_235fa83d4b51d53b0df06fc71795e861 = L.map(
"map_235fa83d4b51d53b0df06fc71795e861",
{
center: [0.0, 0.0],
crs: L.CRS.EPSG3857,
@ -60,13 +60,13 @@
var tile_layer_c686e407ed5ff252b28559436200f4ac = L.tileLayer(
var tile_layer_248fb57e22960ed22012e87b50b24fca = L.tileLayer(
"https://tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "\u0026copy; \u003ca href=\"https://www.openstreetmap.org/copyright\"\u003eOpenStreetMap\u003c/a\u003e contributors", "detectRetina": false, "maxNativeZoom": 19, "maxZoom": 19, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
);
tile_layer_c686e407ed5ff252b28559436200f4ac.addTo(map_f8872872d362397e346888da36799a6a);
tile_layer_248fb57e22960ed22012e87b50b24fca.addTo(map_235fa83d4b51d53b0df06fc71795e861);
</script>
@ -87,7 +87,7 @@
}
trajeto_json_add({"features": []});
trajeto_json.addTo(map_f8872872d362397e346888da36799a6a);
trajeto_json.addTo(map_235fa83d4b51d53b0df06fc71795e861);
function adicionarGeometria(novaGeometria) {
trajeto_json.addData(novaGeometria);
@ -145,7 +145,7 @@
var marcadorDinamico = L.marker([0, 0], {
icon: customIcon
}).addTo(map_f8872872d362397e346888da36799a6a);
}).addTo(map_235fa83d4b51d53b0df06fc71795e861);
// Conectar ao broker MQTT
const client = mqtt.connect('ws://localhost:9001'); // Use wss para conexão segura
@ -184,7 +184,7 @@
marcadorDinamico.setRotationAngle(angulo);
adicionarCoordenada("Tj", [novaLongitude, novaLatitude]);
map_f8872872d362397e346888da36799a6a.setView(novaPosicao, map_f8872872d362397e346888da36799a6a.getZoom());
map_235fa83d4b51d53b0df06fc71795e861.setView(novaPosicao, map_235fa83d4b51d53b0df06fc71795e861.getZoom());
});
function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) {

File diff suppressed because one or more lines are too long

View File

@ -17,7 +17,7 @@ bool Conectado = false;
int _TaxaAmostragem;
int FrequenciaMaxima = 10000;
double _Margem = 2.0;
double _Margem = 1.0;
int dutyCycle = 512;
double _frequencia = 4000;
@ -76,7 +76,7 @@ class Motor {
_pinoDIR.Conectar(false);
_pinoEncoder.Conectar();
encoderKalman = new SimpleKalmanFilter(1, 2, 0.01);
encoderKalman = new SimpleKalmanFilter(0.5, 2, 0.01);
xTaskCreatePinnedToCore(&Motor::RampaTaskWrapper, "RampaTask", 5000, this, 20 - _canal, &RampaTaskHandle, tskNO_AFFINITY);
@ -183,7 +183,7 @@ class Motor {
}
double _ultimaLeituraValida = 0; // Armazena a última leitura válida do ângulo
double _limiarPico = 5; // Define o limiar máximo aceitável para a mudança de ângulo entre leituras
double _limiarPico = 3; // Define o limiar máximo aceitável para a mudança de ângulo entre leituras
int _vezesPico = 0;
void AferirPosicao() {

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,406 @@
// Dispositivo: Direcional
// Versão Firmware: 9
// Ultima atualização: 14/05/2024
// Atualização: Inclusão do potenciometro para aferição do angulo
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\SerialService.h"
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\Utils.h"
#include "C:\ZendionInc\agrobot_base\Firmware\Modulos\Pinout.h"
#include <SimpleKalmanFilter.h>
#define D_Code Dir
#define VERSION 9
#define _pinoLED RGB_BUILTIN
long _baudRate = 115200;
bool Conectado = false;
int _TaxaAmostragem;
int FrequenciaMaxima = 10000;
double _Margem = 0.5;
double _AgMin = 380;
double _AgMax = 3430;
int RefMin = -90;
int RefMax = 90;
int dutyCycle = 512;
double _frequencia = 4000;
PinoModel _pinoGeral;
class Motor {
public:
// Construtor
Motor(String desc) {
_ID = desc;
}
// Definições
String _ID;
int _canal;
PinoModel _pinoENA;
PinoModel _pinoDIR;
PinoModel _pinoPUL;
PinoModel _pinoEncoder;
SimpleKalmanFilter* encoderKalman;
bool Iniciado = false;
bool Testando = false;
bool Referenciando = false;
// Consumo
double _Angulo;
Sentido _Sentido;
// Entrada de dados
double _Angulo_SP;
int _Angulo_Offset = 0;
Sentido _Sentido_SP = Parado;
bool _MotorLigado = false;
bool _Estabilizar = true;
bool _Referenciar = true;
bool Referenciado = false;
void Inicializar() {
if (Iniciado) {
EnviarDadosSerial(_ID + " ja inicializado");
EnviarDadosSerial(MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
return;
}
if (_pinoPUL.Definido()) {
AtualizarPWM();
}
_pinoENA.Conectar(true);
_pinoDIR.Conectar(false);
_pinoEncoder.Conectar();
encoderKalman = new SimpleKalmanFilter(1, 2, 0.01);
xTaskCreatePinnedToCore(&Motor::RampaTaskWrapper, "RampaTask", 5000, this, 20 - _canal, &RampaTaskHandle, tskNO_AFFINITY);
ResetRef(_Referenciar);
EnviarDadosSerial(_ID + " Iniciado");
Iniciado = true;
EnviarDadosSerial(MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
}
void ResetRef(bool _Ref) {
_Sentido_SP = Parado;
_Sentido = Parado;
Referenciado = !_Ref;
Referenciando = _Ref;
_MotorLigado = _Ref;
}
void AtualizarPWM() {
ledcSetup(_canal, _frequencia, 10);
ledcAttachPin(_pinoPUL.num, _canal);
ledcWrite(_canal, dutyCycle);
}
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);
delete encoderKalman;
// Redefinir as configurações para os valores iniciais
_pinoENA.Desconectar();
_pinoDIR.Desconectar();
_pinoPUL.Desconectar();
_pinoEncoder.Desconectar();
EnviarDadosSerial(_ID + " Desligado");
Iniciado = false;
EnviarDadosSerial(MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
}
void Testar() {
Testando = true;
Testando = false;
}
private:
TaskHandle_t RampaTaskHandle = NULL;
static void RampaTaskWrapper(void *pvParameters) {
Motor* motor = static_cast<Motor*>(pvParameters);
motor->RampaTask();
}
void RampaTask() {
unsigned long previousMillisRampa = millis();
while (true) { // Loop infinito mais claro
// Verifica a conexão antes de prosseguir
if (!Conectado) {
// Espera por 1 segundo para reduzir o uso da CPU se não estiver conectado
vTaskDelay(1000 / portTICK_PERIOD_MS);
continue; // Pula para a próxima iteração do loop
}
// Executa as funções de controle e monitoramento do motor
AferirPosicao();
if (Referenciando) {
ReferenciarMotor();
} else {
VerificarAnguloSP();
}
Atualizar();
// Envia dados via serial em intervalos definidos por _TaxaAmostragem
if (millis() - previousMillisRampa >= _TaxaAmostragem) {
previousMillisRampa = millis(); // Atualiza o tempo para o próximo envio
EnviarDadosSerial(MontarProtocoloSensor(sENC, _ID, MontarDadosProtocoloEncoderAbsoluto(_Sentido, _Angulo, Referenciando, Referenciado)));
}
// Libera a CPU para outras tarefas por um curto período
vTaskDelay(1 / portTICK_PERIOD_MS); // Torna o delay mais explícito e ajustado ao tick do sistema
}
}
void Atualizar() {
_pinoENA.set(!_MotorLigado);
_pinoDIR.set(_Sentido_SP != Antihorario);
}
void AferirPosicao() {
if (_pinoEncoder.Definido()) {
int leitura = _pinoEncoder.get();
float leituraNormalizada = encoderKalman->updateEstimate(leitura);
double _angulo = fmap(leituraNormalizada, _AgMin, _AgMax, RefMin, RefMax);
double angulo_com_offset = _angulo - _Angulo_Offset;
// Normaliza o ângulo para o intervalo de -90 a 90 graus
while (angulo_com_offset > 90) angulo_com_offset -= 180;
while (angulo_com_offset < -90) angulo_com_offset += 180;
_Angulo = angulo_com_offset;
DefinirSentidoDeGiro();
}
}
double _anguloAnterior = 0;
int leituras = 0;
void DefinirSentidoDeGiro() {
double _anguloAtual = _Angulo;
if (leituras > 100) {
if (_MotorLigado) {
if (_anguloAtual > _anguloAnterior) {
_Sentido = Horario;
}
else if (_anguloAtual < _anguloAnterior) {
_Sentido = Antihorario;
}
}
else {
_Sentido = Parado;
}
_anguloAnterior = _anguloAtual;
leituras = 0;
}
leituras++;
}
unsigned long previousMillisCorrecao = millis();
void VerificarAnguloSP() {
bool ModoSP = (_Angulo_SP > -1);
if (_MotorLigado) {
double AnguloComparar = ModoSP ? _Angulo_SP : RefMax;
if (_Sentido_SP == Horario && _Angulo >= AnguloComparar) {
_MotorLigado = false;
}
else if (_Sentido_SP == Antihorario && _Angulo <= (AnguloComparar * -1)) {
_MotorLigado = false;
}
}
else if (ModoSP) {
if (millis() - previousMillisCorrecao >= 1500) {
previousMillisCorrecao = millis();
bool NoRangeZero = (_Angulo >= -_Margem && _Angulo <= _Margem);
bool NoRangeSP = (_Angulo >= (_Angulo_SP - _Margem) && _Angulo <= (_Angulo_SP + _Margem));
if (_Angulo_SP == 0 && !NoRangeZero && _Estabilizar) {
_Sentido_SP = _Angulo > 0 ? Antihorario : Horario;
_MotorLigado = true;
}
else if (!NoRangeSP) {
_MotorLigado = true;
}
}
}
}
void ReferenciarMotor() {
_Angulo_SP = 0;
Referenciado = false;
if (Referenciando && (_Angulo >= -_Margem && _Angulo <= _Margem)) {
Referenciando = false;
Referenciado = true;
_MotorLigado = false;
}
else {
_Sentido_SP = (_Angulo > 0) ? Antihorario : Horario;
}
}
};
Motor M1("ET");
Motor M2("EF");
Motor M3("DT");
Motor M4("DF");
Motor* MotorPorID(String ID) {
Motor* _motor =
ID == "ET" ? &M1 :
ID == "EF" ? &M2 :
ID == "DT" ? &M3 :
ID == "DF" ? &M4 :
nullptr;
return _motor;
}
void setup() {
Serial.begin(_baudRate);
//iniciarMCP(D_Code, 8, 18, 0x20, false);
}
void loop() {
std::vector<ProtocoloSerial> protocolos = LerBufferSerialFila();
for (int i = 0; i < protocolos.size(); i++) {
ProcessarProtocolo(protocolos[i].protocolo, protocolos[i].funcao, protocolos[i].idMensagem);
}
}
void ProcessarProtocolo(String Protocolo, F_Code _funcao, int idMensagem) {
if (_funcao == Chk) {
EnviarDadosSerial(MontarProtocoloVerificacao(D_Code, VERSION));
}
else if (_funcao == Cfg) {
std::vector<String> Partes = SplitString(Protocolo, (char*)",");
String ID = Partes[0];
bool Conectar = Partes[1] == "1";
if (ID == "MD") {
_TaxaAmostragem = Partes[2].toInt();
EnviarDadosSerial(MontarProtocoloSensor(sCFG, "MD", Conectar ? "1" : "0"));
vTaskDelay(pdMS_TO_TICKS(100));
Conectado = Conectar;
}
else {
Motor* _motor = MotorPorID(ID);
int canal = Partes[2].toInt();
bool motor_ativado = Partes[3] == "1";
bool estabilizar = Partes[4] == "1";
bool referenciar = Partes[5] == "1";
int _offset = Partes[6].toInt();
TiposBarramentos pulB = (TiposBarramentos)Partes[7].toInt();
int pul = Partes[8].toInt();
TiposBarramentos dirB = (TiposBarramentos)Partes[9].toInt();
int dir = Partes[10].toInt();
TiposBarramentos enaB = (TiposBarramentos)Partes[11].toInt();
int ena = Partes[12].toInt();
TiposBarramentos encB = (TiposBarramentos)Partes[13].toInt();
int encoder = Partes[14].toInt();
if (motor_ativado) {
if (Conectar) {
_motor->_canal = canal;
_motor->_Estabilizar = estabilizar;
_motor->_Referenciar = referenciar;
_motor->_Angulo_Offset = _offset;
_motor->_pinoPUL = PinoModel(pul, pulB, _PWM);
_motor->_pinoDIR = PinoModel(dir, dirB, _OUTPUT);
_motor->_pinoENA = PinoModel(ena, enaB, _OUTPUT);
_motor->_pinoEncoder = PinoModel(encoder, encB, _INPUT, ANALOGICO);
_motor->Inicializar();
}
else {
_motor->Desligar();
}
vTaskDelay(500);
}
}
}
else if (_funcao == Cmd) {
std::vector<String> Partes = SplitString(Protocolo, (char*)",");
String ID = Partes[0];
Motor* _motor = MotorPorID(ID);
Sentido sentido = (Sentido)Partes[1].toInt();
int angulo = Partes[2].toInt();
int porcentagem = Partes[3].toInt();
double frequencia = (porcentagem / 100.0) * FrequenciaMaxima;
bool referenciar = Partes[4] == "1";
int offset = Partes[5].toInt();
_frequencia = frequencia;
_motor->_Sentido_SP = sentido;
_motor->_Angulo_SP = angulo;
_motor->_Angulo_Offset = offset;
_motor->AtualizarPWM();
if (referenciar) {
_motor->ResetRef(referenciar);
}
else {
_motor->_MotorLigado = sentido != Parado;
}
}
else if (_funcao == Tst) {
std::vector<String> Partes = SplitString(Protocolo, (char*)",");
String ID = Partes[0];
Motor* _motor = MotorPorID(ID);
bool EmTeste = _motor->Testando;
if (!EmTeste) {
_motor->Testar();
}
}
EnviarDadosSerial(MontarProtocoloMensagemRecebida(idMensagem));
}

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": [
]
}