Pages: [1]   Go Down
Author Topic: Piscar LED baseado em Variável  (Read 1652 times)
0 Members and 1 Guest are viewing this topic.
SP - Brasil
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pessoas, boa tarde.

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;

int contador = 0;

int buttonState = 0;

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT); 
  pinMode(ledazul, OUTPUT); 
  pinMode(buttonPin, INPUT); 
}

void loop(){
  buttonState = digitalRead(buttonPin);

  if (buttonState == HIGH) {     
    Serial.println(contador);
    contador++;
    digitalWrite(ledPin, HIGH);
    delay(500);
    digitalWrite(ledPin, LOW);
      digitalWrite(ledazul, HIGH); 
      delay(250);
      digitalWrite(ledazul, LOW);
  } else {
    // turn LED off:
  }
}
---

Alguém tem alguma dica de como fazer isso funcionar?

Obrigado pela ajuda!!

[]'s
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3322
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Uma dica é esqueceres que o delay existe. Para temporizações vai ver o exemplo blink without delay.

Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Full Member
***
Karma: 0
Posts: 183
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
Code:
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.
« Last Edit: August 18, 2013, 05:16:38 pm by vasr » Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3322
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Uma dica é esqueceres que o delay existe. Para temporizações vai ver o exemplo blink without delay.

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);
     }

Qual é a parte de "esquece que o delay existe" que não percebeste?
« Last Edit: August 18, 2013, 07:16:48 pm by bubulindo » Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Portugal
Offline Offline
Edison Member
*
Karma: 37
Posts: 1595
Pretending you know everything then you will learn nothing.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vou tentar explicar te porque deves seguir o conselho do Bubulindo.
Quote
   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.

Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3322
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Vou tentar explicar te porque deves seguir o conselho do Bubulindo.
Quote
   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.

+1 karma pela paciência que tens.
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Portugal
Offline Offline
Edison Member
*
Karma: 37
Posts: 1595
Pretending you know everything then you will learn nothing.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Obrigado colega  smiley-lol
Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


Offline Offline
Full Member
***
Karma: 0
Posts: 183
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Obrigado pela explicação HugoPT, esta percebido.
Logged

São Paulo
Offline Offline
Jr. Member
**
Karma: 2
Posts: 87
Open your mind .
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Porem, caso queira utilizar o delay . Pode deixar o botão em um pino attach.
Logged

Arduino Duemilanove
Arduino Mega 2560  
Xbox 360

SP - Brasil
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Caros,

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...

Obrigado
Logged

Portugal
Offline Offline
Edison Member
*
Karma: 37
Posts: 1595
Pretending you know everything then you will learn nothing.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Porem, caso queira utilizar o delay . Pode deixar o botão em um pino attach.
???
O que é um pino attach?
Quote
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?
Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3322
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Porem, caso queira utilizar o delay . Pode deixar o botão em um pino attach.

Suponho que queiras dizer configurar o pino como uma interrupcão. E ao fazer isso, não resolveste um problema, criaste outro.
 
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Pages: [1]   Go Up
Jump to: