Boa noite a todos, me chamo André e estou iniciando no mundo de arduíno e estou fazendo alguns experimentos pra aprender mais sobre isso. 

O experimento que estou tentando fazer é o seguinte: fazer o monitotamentou contato que acende um led, e se esse contato for acionado mais de 1 vez no intervalo de 3 segundo ele manda sinal para um buzzer.

Se alguém puder me ajudar ficaria muito grato.

Exibições: 429

Responder esta

Respostas a este tópico

Tudo bem André Alves?

Entendi o que você deseja fazer, mas o que você já conseguiu fazer, para este fim, até o momento?

em todo caso, recomendo a leitura da postagem que fiz neste tópico:

https://labdegaragem.com/forum/topics/algu-m-para-me-ajudar-trocar-...

Se tiver qualquer dúvida, pode perguntar que irei tentar lhe ajudar.

Isso deve te ajudar..

debounce_timer.ino

Escrevi isso rapidinho, veja se consegue entender, e se conseguir, veja se resolve.

por favor, não esqueça de da o feedback, informando se teve sucesso e, em caso positivo, de que seu problema foi solucionado.

https://pastebin.com/bFT1iJUN

Boa noite Tiago e Hélio !!

Vou separar um tempo pra dar uma estudada no que vocês dois propuseram e assim que evoluir meu experimento aqui eu retorno com o resultado para vocês.

Obrigado pela atenção. 

Abrçs.

Boa noite pessoal tudo bem com vocês ?

Então vim tentando desenvolver esse projetinho e evolui um pouco com a ajuda de vocês e algumas pesquisas, mas como estou iniciando estou encontrando varias dificuldades.

O que quero fazer é o seguinte, um ohmímetro que imprime a resistência em um display, e se essa resistência for maior que 68 ohms ele ira acender um led sinalizador. até essa parte eu consegui de boa, a parte onde me complico vem a seguir.

Levando em consideração que vou testar vários resistores eu quero que toda vez que o valor do resistor for menos que 60 ohms ele incremente uma contagem que se chegar a 3 em um período pré determinado de tempo irá ascender outro led sinalizador.

os problemas que encontrei foram os seguintes:

- Quando eu removo o resistor do circuito ele meio que trava, fica com o display piscando e como nao tem nem um resistor gostaria que o valor impresso fosse 0.

-Não consegui achar uma forma de incrementar essa contagem que falei antes.

A programação que estou usando para os teste é essa que esta a seguir.

teste.ino

Estou usando nesse projeto um Esp32.

Desde já agradeço a ajuda de todos.

Abrçs.

Vamos lá.

1) É sempre bom você comentar seu código.

2) Posso ter me equivocado, mas acredito que você copiou o código de alguém, então, antes de mais nada, é bom entender a fundo o que cada coisa faz, pois isso pode te gerar bloqueios mais para frente. E me gerou dificuldade na leitura (e um pouco de resistência)

3) linha 41 e 44 estão repetidas.

"eu quero que toda vez que o valor do resistor for menos que 60 ohms ele incremente uma contagem que..."

isso é uma condição, definida, por um simples if.

Exemplo:

Se Resistor menor que 60, contador somará mais 1.

// if (Res<60) {cont++;}

"...  se chegar a 3..."

Se cont for igual a 3

if (cont==3){ evento }

"em um período pré determinado de tempo..."

aqui é o ponto em que comentei no outro tópico, já linkado na minha primeira postagem. Mais especificamente no "Pausa 5 -- Situação 4".

"... irá ascender outro led sinalizador."

digitalWrite(led, HIGH)

Quando eu removo o resistor do circuito ele meio que trava, fica com o display piscando e como nao tem nem um resistor gostaria que o valor impresso fosse 0.

Isso acontece por causa do item 2. Observe que em momento algum você condicionou a atualização do display, ele está girando num loop sem qualquer controle.

Linha 92, vc escreve: "// Se o valor do resistor for maior que 68 o led ascende", mas você codifica ao contrário, você informa: "se o valor do resistor for MENOR que 68"


if (R2 < 68)  ===> r2 MENOR que 68  //linha 93

if (R2 > 68)  ===> r2 MAIOR que 68

outra coisa, você citou "Debounce", isso é usado para corrigir bug de botão (input), mas não tem nenhuma referência de input.

Pessoalmente, acho que você está perdido nos códigos, mas não tem problema, se tiver interesse, a gente pode ir fazendo um passo-a-passo para você, desde que você vá sempre dando o feedback sobre a sua dificuldade. Acho que este seria o melhor caminho, pois você irá obter um pouco mais de conhecimento e não irá ficar travado futuramente.

Qual sua opinião?

Então Tiago eu realmente peguei o código do ohmimetro da internet mas eu vi vários videos sobre e tentei entender cada passo do que estava acontecendo no circuito, então essa parte do código eu consegui entender bem, até fiz um um pouco diferente onde eu mesmo programei passo a passo.

Fiz umas pesquisas sobre o display que estava usando e o tipo de comunicação que ele usava e essa parte do código também entendi tudo.

A unica parte que fiquei um pouco perdido foi essa da função mills pra fazer o contador, eu vi alguns videos e entendi bem por cima como funcionava a mills, mas não sabia como colocar em pratica e tbm nao achei nem um exemplo pra me basear.

Essa parte de incrementar a contagem quando a resistência for menor que 60 eu tive um problema pois no teste que eu fiz enquanto a resistência estava menor que 60 ele ficava incrementando infinitamente e queria que ele só fizesse isso uma vez.

Vou tentar pesquisar isso da atualização do display, por que pensei que como ele dependia do IF pra acontecer ele so iria imprimir se o IF fosse verdadeiro, mas acabei me perdendo no codigo.

Esse projeto que estou fazendo não tem nem uma usabilidade só estava fazendo como exercício pra praticar.

Agradeço pela explicação e gostaria sim desse 'passo a passo' se possível, como voce disse o codigo esta meio bagunçado mas vou tentar organizar e fazer mais testes e vou atualizando voces com minha evolução.

pra facilitar sua vida, a parte que imprime no lcd, coloca depois das 2 rotinas, e cria uma condição.

Boa noite,

Existe um erro na sua descrição:

Quando não tem resistor, a resistência será muita alta e o display deverá indicar "OVL" ou "999999".

Quando houver um curto-circuito, aí sim que deverá indicar "0"

Boa sorte e saúde,

  'Eiju

Boa noite, 

Você pode me falar uma forma de identificar que o circuito está sem o resistor. Algo como uma condição pra caso essa resistência for muito alta imprimir  o texto "sem resistor" resolveria?

Obrigado.

Então vamos lá, já que você está fazendo como um exercício, então vamos pegar esta linha de pensamento para melhorarmos nossa visão sobre o código ok?

Primeiro passo é organizar as coisas antes do setup() e deixar bem comentado.

- Comentar as libs adicionadas 

- Comentar os #define

- Separar as variáveis e comenta-las

veja o exemplo na imagem

Segundo passo é utilizar nomes FÁCEIS para suas variáveis.

A ideia aqui é você e as outras pessoas lerem e identificar RÁPIDO sobre o que se trata.

Então, utilizar variáveis como: "lastDebounceTime" quando você não usa nenhuma função para Debounce, deixa muito ruim a leitura. Pois apesar de ser uma variável genérica (como escrever "cachorro" ou "var138192") mas é muito comum em código, assim como um "i").

Sugestões: VarMillis (que será igualada ao millis()), VarTempo (que será o comparador da subtração ===> millis() - VarMillis == VarTempo), ou qualquer outra coisa.

Certa feita ouvi que programador tem que ser preguiçoso, isto é, quanto menos ele escreve (louvado sejam os for e matrizes) e quanto menos ele precisa pensar para interpretar, melhor.

Terceiro passo é dividir tudo em funções separadas.

Questão: Isso não vai gerar perda de performance? 

Resposta: mínima, mas SIM. Quando meu código é muito grande, eu costumo separar em funções e abas para facilitar a visualização. No final, eu gero 2 arquivos, o primeiro é o principal para edição, cheio de funções, e o segundo é o principal editado, isto é, para compilar para o controlador (que basicamente é recortar o conteúdo de algumas funções e colar em outra, reduzindo o número de chamadas).

Questão: Eu não vou perder tempo com isso?

Resposta: Para uma boa parcela aqui do fórum, e pelo tamanho do código, eu diria que sim, mas como a ideia aqui é exercitar, então temos que aprender a VER o código separado antes de junta-lo.

No seu caso, podemos criar as seguintes funções:

Ohmimetro();

Print_LCD();

Contador();

Resultado_Cont();

Exibicao_Led();

Zerar_Tempo();

E por fim, claro, comentar cada uma das funções, no mínimo, com o que ela deve fazer.

obs- o loop() pode deixar vazio por agora.

Então, vamos exercitar?

Sugiro que dê uma corrigida nesses pontos (que vai ser rápido), e em seguida daremos continuidade.

Assim que tiver um tempo vou fazer todas essas modificações que você sugeriu e posto o resultado aqui pra darmos continuidade. Agradeço a ajuda 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço