Estou aprendendo a trabalhar com floats, preciso de ajuda - Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)2024-03-29T09:46:43Zhttps://labdegaragem.com/forum/topics/estou-aprendendo-a-trabalhar-com-floats-preciso-de-ajuda?commentId=6223006%3AComment%3A700525&feed=yes&xn_auth=noÉ arduino com radio lorawam o…tag:labdegaragem.com,2019-02-12:6223006:Comment:7003912019-02-12T11:22:54.947ZEdilson Maia Faverohttps://labdegaragem.com/profile/EdilsonMaiaFavero
<p>É arduino com radio lorawam os dois lados, imagine a lorawam no lugar de um ESP12 ou uma placa de rede, só muda a modulação e o protocolo de envio.</p>
<p>É arduino com radio lorawam os dois lados, imagine a lorawam no lugar de um ESP12 ou uma placa de rede, só muda a modulação e o protocolo de envio.</p> Funcionou perfeitamente usand…tag:labdegaragem.com,2019-02-12:6223006:Comment:7006092019-02-12T11:20:08.778ZEdilson Maia Faverohttps://labdegaragem.com/profile/EdilsonMaiaFavero
<p>Funcionou perfeitamente usando seu modelo. Parabéns. E obrigado por me sugerir o estudo de ponteiros.</p>
<p>Funcionou perfeitamente usando seu modelo. Parabéns. E obrigado por me sugerir o estudo de ponteiros.</p> Vou testar suas dicas, como d…tag:labdegaragem.com,2019-02-12:6223006:Comment:7005602019-02-12T10:39:48.994ZEdilson Maia Faverohttps://labdegaragem.com/profile/EdilsonMaiaFavero
<p>Vou testar suas dicas, como descrevi ali no fim do post o outro lado é um rádio lorawan, ele vai por exemplo no lugar que você usaria um esp12 ou uma placa de rede no arduino, a unica diferença é a modulação que não é wirelles e o protocolo que não é tcpip, mas a transmissão não influencia no código por isso não quis colocar tudo, a linguagem que estou usando é a nativa da ide do arduino. </p>
<p>Vou testar suas dicas, como descrevi ali no fim do post o outro lado é um rádio lorawan, ele vai por exemplo no lugar que você usaria um esp12 ou uma placa de rede no arduino, a unica diferença é a modulação que não é wirelles e o protocolo que não é tcpip, mas a transmissão não influencia no código por isso não quis colocar tudo, a linguagem que estou usando é a nativa da ide do arduino. </p> boa noite Edilson.
C…tag:labdegaragem.com,2019-02-09:6223006:Comment:7005302019-02-09T23:03:05.804ZElcids Chagashttps://labdegaragem.com/profile/ElcidsChagas
<p><span style="font-size: 12pt;">boa noite Edilson.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Como disse o <strong>Minerin</strong>, não são tão claras as informações que vc postou. Mas com algum esforço de suposição, pode-se talvez conseguir algum entendimento lógico.</span></p>
<p><span style="font-size: 12pt;"> Parece que vc está obtendo os dados de um <strong>GPS</strong>, e estes dados são do tipo "<strong>float</strong>", já que correspondem a cordenadas (tipo…</span></p>
<p><span style="font-size: 12pt;">boa noite Edilson.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Como disse o <strong>Minerin</strong>, não são tão claras as informações que vc postou. Mas com algum esforço de suposição, pode-se talvez conseguir algum entendimento lógico.</span></p>
<p><span style="font-size: 12pt;"> Parece que vc está obtendo os dados de um <strong>GPS</strong>, e estes dados são do tipo "<strong>float</strong>", já que correspondem a cordenadas (tipo as do Google Maps). Estes dados estão no vetor "<strong>gpsLL</strong>", e são: a <strong>latitude</strong>, a <strong>longitude</strong>, e o "<strong>id</strong>". Pelo que entendi, o "<strong>id</strong>" também é um "<strong>float</strong>".</span></p>
<p><span style="font-size: 12pt;"> Então você copia os dados do vetor <span>"<strong>gpsLL</strong>", para o vetor "<strong>buf</strong>". No entanto este vetor "<strong>buf</strong>" é do tipo "<strong>char</strong>" (ou seja "byte"). Então vc envia os dados do vetor "<strong>buf</strong>" para algum lugar (não sei como nem para onde, já que vc não informa isso).</span></span></p>
<p><span style="font-size: 12pt;"> Os dados são então recebidos no tal "outro lado" (só Deus e vc sabem que "lado" é esse), em um outro vetor "<span><strong>buf</strong></span>". Aí vc tem que "extrair" os dados do "<span><strong>buf</strong></span>", convertendo-os novamente para os "<strong>float</strong>" de cada variável (<span><strong>latitude</strong>, <strong>longitude</strong>, e o "<strong>id</strong>").</span></span></p>
<p></p>
<p><span style="font-size: 12pt;"> Tendo-se "entendido" isso, vamos ao seu "código". Há alguns problemas com este seu código. Vou enumerar e explicar os problemas, e como resolver cada um deles. Segue:</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <strong>1)</strong> Uma varável tipo "<strong>char</strong>" é do tamanho de <em><strong>1 byte</strong></em>. Um "<strong>float</strong>" no <strong>Arduino</strong> tem o tamanho de <em><strong>4 bytes</strong></em>. Portanto <span style="text-decoration: underline;"><em>não tem como</em></span> vc armazenar um valor "<strong>float</strong>" em uma variável tipo "<strong>char</strong>". Assim o valor "<strong>1.0</strong>" do seu "<strong>id</strong>" deve também ser armazenado em uma variável "<strong>float</strong>". Logo isso fica assim:</span></p>
<p><span style="font-size: 12pt;"> <em><strong>float id = 1.0;</strong></em></span></p>
<p></p>
<p><span style="font-size: 12pt;"> <strong>2)</strong> o seu vetor "<span><strong>buf</strong></span>" <span style="text-decoration: underline;"><em>deve ter</em></span> tamanho suficiente para armazenar todos os dados que vc quer enviar. Cada um dos seus dados é um "<strong>float</strong>", e cada "<strong>float</strong>" ocupa <em><strong>4 bytes</strong></em>. Então o melhor é vc definir o <span style="text-decoration: underline;"><em>número de dados</em></span> ou <em>elementos</em> que vc quer enviar, e usar esse número para dimensionar o seu vetor "<span><strong>buf</strong></span>". Veja como isso é feito (colei um figura devido à formatação do texto aqui no post):</span></p>
<p><span style="font-size: 10pt;"><em>(clique na figura para "zoom")</em></span></p>
<p><a href="https://storage.ning.com/topology/rest/1.0/file/get/1014814548?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/1014814548?profile=RESIZE_710x" class="align-center"/></a></p>
<p></p>
<p><span style="font-size: 12pt;"> Veja que o <strong>número de elementos</strong> é <strong>3</strong>. A constante "<em><strong>sizeof(float)</strong></em>" é igual a <strong>4</strong>, que é o tamanho de um valor "<strong>float</strong>". Logo o vetor "<strong>buf</strong>" é definido com tamanho igual a <strong>3x4</strong>, ou seja <strong>12 bytes</strong>. Por que? <em>simples</em>: cada "<strong>float</strong>" que será armazenado em "<strong>buf</strong>" ocupará <em><strong>4 bytes</strong></em>. Fazendo do jeito que mostrei acima, ao mudar a constante "<em><strong>Num_dados</strong></em>", automaticamente o vetor "<strong>buf</strong>" já será dimensionado com o tamanho suficiente para armazenar seus elementos (dados).</span></p>
<p><span style="font-size: 12pt;"> Bem, vc já deve ter percebido que o dimensionamento de <em><strong>8 bytes</strong></em> que vc tinha feito, <span style="text-decoration: underline;"><em>não era suficiente</em></span> para armazenar os todos os dados a serem copiados (inclusive este erro estava destruindo outros dados na memória do Arduíno, sem vc saber).</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <strong>3)</strong> o dimensionamento que vc fez do vetor "<span><strong>gpsLL</strong>", também não é o mais indicado. Já se a constante "<em><strong>Num_dados</strong></em>" é definida, o ideal então é definir o vetor "<strong>gpsLL</strong>" assim:</span></span></p>
<p><span style="font-size: 12pt;"><span> <em><strong>float gpsLL [ Num_dados] = ....</strong></em></span></span></p>
<p></p>
<p><span style="font-size: 12pt;"><span> Observe, que assim, o número de elementos do vetor "<strong>gpsLL</strong>" já fica automaticamente ajustado para o número de dados "<strong>float</strong>" que ele irá conter.</span></span></p>
<p></p>
<p><span style="font-size: 12pt;"> <strong>4)</strong> a forma como vc insere os dados (elementos) em "<strong>gpsLL</strong>" está correta, mas não é das mais versáteis dentro de um código (se possível, insira individualmente, como mostro no exemplo que anexei ao final do post). A cópia para do "<strong>gpsLL</strong>" para o "<strong>buf</strong>", também está correta, embora também não seja a mais "tradicional" (o ideal é fazer isso via um ponteiro de "float", mas isso é outra história).</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <strong>5)</strong> já do "<strong>outro lado</strong>", o vetor "<strong>buf</strong>" também deve ter sido definido exatamente como mostrei antes, a fim de que tenha tamanho suficiente para conter todos os dados que vc irá receber nele. Após ter recebido os dados, vc deve obtê-los como mostro a seguir:</span></p>
<p></p>
<p><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/1014959970?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/1014959970?profile=RESIZE_710x" class="align-center"/></a></span></p>
<p></p>
<p><span style="font-size: 12pt;"> Veja que foi usado um <strong>índice</strong> chamado "<strong>elemento</strong>", que é uma variável "<strong>char</strong>". Com este <strong>índice</strong> acessamos os elementos individualmente no vetor "<strong>buf</strong>", sem precisar calcular o "<em>offset</em>" do vetor. Dentro dos colchetes, este "<em>offset</em>" é calculado automaticamente, conforme o elemento que vc acessa. Veja que a constante "<em><strong>sizeof(float)</strong></em>", será igual a <strong>4</strong>, já que este é o tamanho de um "<strong>float</strong>". Pra vc entender o motivo de se estar subtraindo 1 do índice "<strong>elemento</strong>", é preciso que vc entenda como vetores funcionam na <strong>linguagem</strong> <strong>C/C++</strong> (estude isso, e vc entenderá o motivo, que é bem simples).</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <span style="text-decoration: underline;"><em><strong>Uma observação final</strong></em></span>: usar <em><strong>Ponteiros</strong></em> (não sei se vc percebeu, mas vc está usando), acrescenta um grau de sofisticação e versatilidade ao seu código. Mas é preciso saber usá-los corretamente, senão podem acontecer coisas "muito loucas" quando vc executar seu programa. Então tenha atenção a isso.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> No anexo ao fim do post, eu acrescentei um programa do <strong>Arduino</strong> que exemplifica o que vc está fazendo. As únicas partes que não tem, são o código que lê os dados do <strong>GPS</strong> e o que envia para algum lugar (o tal misterioso "<strong>outro lado</strong>"). Mas para o que vc postou, tudo que expliquei aqui eu coloquei no código, de forma organizada e coerente, a fim de facilitar o entendimento e uso.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Espero ter ajudado, e caso tenha alguma dúvida não deixe de perguntar (mas leia antes o que vc escreve, para ter certeza de que deixou bem claro).</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Abrçs,</span></p>
<p><span style="font-size: 12pt;"> Elcids</span></p>
<p></p>
<p><span style="font-size: 12pt;">código exemplo que preparei: <a href="https://storage.ning.com/topology/rest/1.0/file/get/1015025387?profile=original" target="_blank" rel="noopener">simula_enviar_receber_floats_GPS_01.ino</a></span></p>
<p></p> Bom dia EMF,
não entendi bem…tag:labdegaragem.com,2019-02-09:6223006:Comment:7005252019-02-09T17:14:06.065Zmineirin RVhttps://labdegaragem.com/profile/RuiViana
<p>Bom dia EMF,</p>
<p>não entendi bem o que vc quis dizer com "outro lado".</p>
<p>Qual plataforma vc está usando? Ou qual linguagem está usando? C++?<br/>RV</p>
<p>Bom dia EMF,</p>
<p>não entendi bem o que vc quis dizer com "outro lado".</p>
<p>Qual plataforma vc está usando? Ou qual linguagem está usando? C++?<br/>RV</p>