Pessoal... é a primeira vez que posto aqui....

Sou novo na área de Arduino, então vamos ao problema...

fiz um script que utiliza as portas analógicas e digitais.

as analógicas são para botões de fim de curso.

o primeiro e o segundo estão corretos, ao aciona-los cai para o segundo e o terceiro motor já do terceiro para o quarto só funciona se eu utilizar o botão do segundo.

Não estou entendendo, sendo que coloquei dentro das variáveis os números das portas analógicas 0, 1, 2 e 3.

Peço uma ajudinha de vocês e agradeço desde já!!!!

Segue o script em anexo.

codigo.c

Exibições: 732

Responder esta

Respostas a este tópico

creio q prar vc configurar as portas analogicas vc deve colocar o A na frente como A0, A1 e assim por diante.

Dei uma olhada rapida, deve ter mais detalhes, mas recomendaria:

Tentar usar entradas digitais para sinais digitais como fim de curso. Mesmo estando aterrado vc pode ter o valor de 1 ou 2 e isso impede a leitura correta. Se for por absoluta necessidade vc pode usar sim (não sei pq precisaria mas...) e aih use um <10 (menor que 10) por ex.
Ainda, um jeito legal de acompanhar a execução do seu programa é mandar os dados para a seria. Vc manda e acompanha tudo pelo terminal da propria IDE (monitor).
em:

analogRead(sensorFim[0] != 0) faltou fechar o ")".
Vc precisa fazer: (analogRead(sensorFim[0]) != 0)

Não entendi qual a necessidade de criar esse array para as portas... Normalmente não se faz assim. Fazendo assim vc gasta ram para guardar essas constantes. Se elas não vao mudar durante a execução a forma mais economica e polida (bonita) seria usar constantes.
Ficaria
#define sensorFim 3
Aih vc usaria
analogRead(sensorFim) simplesmente.

Para ler pinos analogicos como digitais (no caso de vc ter esgota todos os digitais) veja esse doc:
http://arduino.cc/en/Tutorial/AnalogInputPins




então... eu fiz esse array para facilitar a programação e substituir o numero da porta.

Eu fiz assim:
analogRead(sensorFim[0] != 0) )

o correto é assim:
analogRead(sensorFim[0]) != 0) ?

e como uso essa opção "#define???


Sim, a função analogRead() tem como parametro o numero da porta. O parametro vai dentro dos "()". O resultado disso (o retorno da função) que vc deve comparar com um numero.

Sobre define:

Quando vc usa por ex:

#define PinoX 3 

Definiu que "PinoX" deve receber o valor 3 sempre que for encontrado (o compilador como que substitui a string "PinoX" pelo valor 3. Os exemplos muitas vezes tb usam a definição de um int. Eu prefiro #define, mas é pessoal. Outros podem preferir definir uma int ou mesmo uma const. Todos dão praticamente o mesmo efeito.

Se vc já viu Peppa Pig... Tem um episodio em que o Papai Pig participa de uma competição de saltos em poças de lama. Ele fala que para ser um bom saltador em poças vc tem que estar em harmonia com a poça, tem que pensar como uma poça... Considerando isso e pensando como um microcontrolador executaria um ou outro código é que acredito que o #define é melhor. Já que o numero é pré substituído ainda na etapa de compilação, não restando nenhum comando a mais para concluir qual porta acionar no momento da execução.

Refs:

http://arduino.cc/en/Reference/Define

http://arduino.cc/en/Reference/analogRead

https://www.youtube.com/watch?v=q9Nf_-x5DJE

PS.: A brincadeira da Peppa é em função de ter assistido com minha filha de 2 aninhos e ter achado mto legal, não que esteja te chamando de "publico alvo da Peppa"... Hehehe, por favor entenda com humor.

e outra...

Li que ao utilizar pinMode(A0, OUTPUT) está mudando a porta digital 0 para analógica na função PWM.

Estou correto?

Qual é a maneira correta de se utilizar a entrada analógica?

Sim as portas analogicas estão precedidas de 0,1,2,3,4.. no Caso A0 seria o correto. Tracei um retangulo em vermelho na imagen abaixo. #define: http://arduino.cc/en/Reference/Define e aqui todas as referencias e exemplos: http://arduino.cc/en/Reference/HomePage ;

Veja uma ótima  resposta/explicação para sua pergunta

http://www.embarcados.com.br/arduino-saidas-pwm/ 

pinMode(sensorFim[0] , INPUT); 
digitalWrite(sensorFim[0] , HIGH);

if (digitalRead(sensorFim[0]) != HIGH)

O Ideal sempre que você usar fim de curso usar o pino em Pull-up  e verificar se ficou 0 quando o final de curso foi acionado.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço