Preciso de uma ajuda.. Estou iniciando agora no arduino e não consegui achar um modo de fazer o que tenho em mente. Fiz um circuito simples com um push button e dois LED, que quando aperta o push button ele acende o primeiro e depois de um tempo acende o segundo. Em paralelo ele conta quantas vezes o botão foi pressionado.
A minha dúvida agora é a seguinte, eu quero fazer que o segundo LED pisque para indicar o a quantidade de vezes que o botão foi pressionado e isso será convertido para o delay() em segundos.
Por exemplo, se pressionar 4 vezes, o segundo LED precisa piscar 4 vezes e gerar um delay de 4 segundos para uma função delay(). O meu código inicialmente está assim:
const int buttonPin = 2;
const int ledPin = 4;
const int ledazul = 3;
O código seguinte é para colocar o segundo LED a piscar consoante o número de vezes que pressionas o botão, só pisca se o botão for pressionado.
Código:
void loop(){
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
Serial.println(contador);
contador++;
for(int i=contador;i>0;i--){
digitalWrite(ledazul, HIGH);
delay(1000);//Tempo que o led esta ligado
digitalWrite(ledazul, LOW);
}
Teste o código e vesse ajuda no teu problema.Não usei o delay como referiste mas penso que é a solução mais fácil.
Vou tentar explicar te porque deves seguir o conselho do Bubulindo.
delay(1000);//Tempo que o led esta ligado
Com isto o microcontrolador fica parado sem fazer rigorosamente nada, o que é mau pois tu podes querer carregar no botão para mudares o teu delay.
Teres isto no codigo vai fazer com que por vezes tu carregues no botao e nada aconteça.Existe uma soluçao simples e podes descobri-la procurando por "Blink Without delay".
Outra coisa que deves procurar e que terá impacto no teu codigo é o "Debouncing" do botão.
Quando pressionas o botão ocorrem "saltos" rápidos provocados pela própria natureza do botão, no qual a entrada do Arduino ira contar indevidamente como um impulso, causando que por vezes quando carregas apenas uma vez no botão conte mais que uma vez.
HugoPT:
Vou tentar explicar te porque deves seguir o conselho do Bubulindo.
delay(1000);//Tempo que o led esta ligado
Com isto o microcontrolador fica parado sem fazer rigorosamente nada, o que é mau pois tu podes querer carregar no botão para mudares o teu delay.
Teres isto no codigo vai fazer com que por vezes tu carregues no botao e nada aconteça.Existe uma soluçao simples e podes descobri-la procurando por "Blink Without delay".
Outra coisa que deves procurar e que terá impacto no teu codigo é o "Debouncing" do botão.
Quando pressionas o botão ocorrem "saltos" rápidos provocados pela própria natureza do botão, no qual a entrada do Arduino ira contar indevidamente como um impulso, causando que por vezes quando carregas apenas uma vez no botão conte mais que uma vez.
Acho que houve uma confusão.. O que não estou conseguindo fazer é o led piscar na quantidade de vezes que eu pressiono o botão..
Por exemplo:
Pressionei 1 vez, o led pisca 1 vez
Pressionei 5 vezes, o led pisca 5 vezes
Pretendo usar isso como interface para o usuário, assim ele sabe que quando tempo terá de delay em outro pino. Nessa segunda fase, se o led piscou 5 vezes outro pino irá enviar um pulso a cada 5 segundos...
Porem, caso queira utilizar o delay . Pode deixar o botão em um pino attach.
???
O que é um pino attach?
Acho que houve uma confusão.. O que não estou conseguindo fazer é o led piscar na quantidade de vezes que eu pressiono o botão..[/quote
Nao o estas a conseguir porque a soluçao para o teu problema como te ja foi dito consiste em:
Remover o delay(resolves a possivel falha de o cpu estar parado no momento que alguem carrega no botao)
Usar tecnica de debounce no botao(evitar que se tu carregares uma vez apenas o arduino nao interprete como umas 3 ou 4 vezes)
Sabendo isto consegues escrever o codigo?