Olá pessoal boa tarde.

Escrevi um código para Gravação em tempo real de um potenciometro e 2 botões.

O sistema funciona da seguinte forma;

O primeiro Arduino possui:

Um arduino Nano

Uma chave para selecionar o modo Play ou Rec

Um botão de estart ou pausa e encerramento da gravação ( Tudo no mesmo botão )

Um botão lado direito

Um botão lado esquerdo

Uma memória eeprom AT24c512

Um modulo nrf24l01

O segundo e terceiro Arduino

Um Arduino Nano

Um modulo nrf24l01

Uma ponte H

A idèia é ter 2 motores puxando o mesmo cabo no sentido contrario ( botão dir e esq ) um potenciometro para definir a velocidade em que puxa.

Ao selecionar o modo de gravação e precionar o botão start, tudo que fizer fica gravado na eeprom e para finalizar a gravação preciona-se novamente o botão start ( entra na rotina de Pausa e se segurar finaliza gravação ).

Se a chave estiver no modo Play, executa toda a gravação.

O código esta funcionando quase que perfeitamente mesmo que estaja HORRIVEL kkkk mas está dentro do que eu sei, e sei que pode ficar melhor.

Estou tendo problemas com o tempo ou seja, quando eu programo os motores enquanto estou programando, os motores funcionam perfeitamente.

Mas ao dar Play os motores funcionam mais tempo do que o que foi programado.

Não acho o erro.

Peço a ajuda de vocês e claro que aceito sugestões sobre o código HORRIVEL kkkk.

Tentei comentar ao maximo o programa.

Desde já, muito obrigado.

 

Exibições: 146

Anexos

Responder esta

Respostas a este tópico

Olá.

   Não achei o problema e não achei tão desorganizado assim, só uma questão de gosto... Eu organizo de forma diferente.

   Enfim, acredito que seu problema seja usar delays() sem necessidade. Tem delay() pra todo lado...

   Se entendi ele faz a leitura do potenciometro, dá um delay() de 15ms e transmite esse valor.

   Qual o tempo necessário para essa transmissão ?? Vai que são por ex 5ms ? aih vc já não sabe mais qual o tempo.

   Minha sugestão seria:

   - Tire todo delay() que possa ser tirado.

   - Confira se esses endereços que vc usa para escrita na eeprom estão corretos, não entendi pq são numeros tão altos, mas nunca usei chip externo. Normalmente por ex defino 64 bytes de eeprom e trabalho com numeros de 0 a 63 como endereço, algo assim.

   - Use um timer para gerar o "tick" que define o tempo. Vc pode usar uma simples variavel (flag), tipo: Vc no timer seta ela a cada 15ms (ou quanto precisar, desde que dentro dos limites de capacidade de processamento e transmissão). Aih vc dentro do ciclo zera essa variável e fica esperando ela setar (ir a 1).

    Ref: https://playground.arduino.cc/Code/Timer/

Olá Eduardo boa tarde.

Obrigado pelo retorno.

Gentileza sua sobre a organização kkkkk.

Os delays são para a gravação na memória que pelo que eu entendi são necessários 5ms para cada endereço que é 1 potenciometro e 2 botões que totaliza 3 endereços de memória dando os 15ms.

Utilizei esses mesmos tempos na leitura para poder bater o tempo mas não sei se na leitura também é necessário o delay de 5ms para cada endereço. 

Os endereços altos se da na divisão da memória que é de 65 mil endereços e ai a dividi em 3 partes 20 mil para o pot e 20 mil para cada botão ( me corrija se eu estiver errado mas foi o que entendi vendo alguns exemplos ).

Vou tentar entender melhor essa biblioteca que você informou, me parece interessante.

Olá, sobre os temporizadores eu também usava vários delays e como isso para o arduino me causava N problemas, então encontrei estes temporizadores sem delay na rede, segue o link da pagina:

https://www.crescerengenharia.com/post/temporizador-sem-delay-no-ar...

Como são configurados em milisegundos então me atendem em todos os meus projetos, penso que também poderão lhe ser úteis.

Olá João bom dia.

Muito obrigado, toda ajuda é sempre bem vinda.

Vou olhar sim.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço