Pages: [1]   Go Down
Author Topic: Código 3 Leds e 2 botões :(  (Read 1466 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Boas amigos... Estou a aprender a programar um pouco de arduino mas tenho tido algumas duvidas a fazer pequenos programas, como por exemplo um código com 3 leds e 2 botões..

O funcionamento que pretendia fazer era assim:
-Tinha o botao 1 e o botao 2 , quando clicava 1 VEZ no botao1 e UMA VEZ no botao 2 acendia o LED1;

-Quando clicava 2 VEZES no botão 1 e uma vez no botão 2 acendia o LED2 e apagava o LED1;

-Quando clicava 3 VEZES no botão 1 e uma vez no botão 2 acendia o LED3 e apagava o LED 2 e LED1;

Estou com algumas dificuldades a fazer isto..se me podessem ajudar agradecia  smiley

Obrigado  smiley-grin
Logged

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

Se não colocares o que já fizeste aqui, a ideia com que ficamos é que pretendes alguém que te faça esse programa.

Coloca aqui o que já fizeste e nós indicámos-te o caminho a seguir.
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
Jr. Member
**
Karma: 0
Posts: 52
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Escrevi um rascunho de programa aqui. Aviso que não testei e que seria necessário fazer os devidos ajustes. E não sei se os colegas do forum programam desta forma na hora de manipular botões. De qualquer forma, é melhor do que nada.

Code:
int mudaLuz;
int loop;
int loop2;
int loop3;

void loop(){
mudaLuz=0;
while(mudaLuz==0){
//pressiona o botao1 pela 1ª vez
if(Botao1==HIGH){
//espera o botao1 ser solto
While(botao1==HIGH){}
//entra em outro loop e espera o próximo botão
loop=1;
while(loop==1){
//pressiona o botao2 depois do botao 1
if(Botao2==HIGH){
//espera o botao2 ser solto
While(botao2==HIGH){}
//acender o led 1
acendeLed1();
//modificar a variável mudaluz
mudaLuz=1;
//sair do loop
loop=0;
}
//ou pressiona o botao1 pela segunda vez
if(Botao1==HIGH){
//espera o botao1 ser solto
While(botao1==HIGH){}
//entra em outro loop para esperar novo botão ser pressionado
loop2=1;
while(loop2==1){
//pressiona o botao2 depois do botao 1 duas vezes
if(Botao2==HIGH){
While(botao2==HIGH){}//espera o botao2 ser solto
//acender o led 2
acendeLed2();
//modificar a variável mudaluz
mudaLuz=1;
//sair do loop
loop=0;
loop2=0;
}
//ou pressiona o botao1 pela terceira vez
if(Botao1==HIGH){
//espera o botao1 ser solto
While(botao1==HIGH){}
//entra em outro loop para esperar novo botão ser pressionado
loop3=1;
while(loop3==1){
//pressiona o botao2 depois do botao 1 tres vezes
if(Botao2==HIGH){
While(botao2==HIGH){}//espera o botao2 ser solto
//acender o led 3
acendeLed3();
//apaga os outros leds
apagaLed2();
apagaLed1();
//modificar a variável mudaluz
mudaLuz=1;
//sair do loop
loop=0;
loop2=0;
loop3=0;
}
}
}
}
}
}
}
}
}

De qualquer forma, sou da mesma opinião do bubulindo. Quando for pedir algo, dar um código, mesmo que não funcione, é melhor do que nada.

Espero que o código acima ajude a pelo menos iniciar o projeto.

Abraços
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 52
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pensando bem, dá pra fazer algo muito mais simples que o que coloquei.
Cada vez que aperta o botão1 é só colocar para um contador adicionar. Aí é só atribuir uma ação dependendo do valor do contador.

Abraços
Logged

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

Aqui está a parte do programa...Peço desculpa nao sabia malta...

int led1=12;      // led no pino 12
int led2=11;     // led no pino 11
int led3 10;     // led no pino 10
int botao1=9;  // botão no pino 9
int botao2=8; // botão pino 8
int var=0;       // valor instantaneo enviado pelo botão
int var2=0;     // valor guardado
int n=0;
int led2=10;
void setup()
{
  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
  pinMode(botao1,INPUT);
  pinMode(botao2,INPUT);
  Serial.begin(9600);
}
void loop()
{
  var=digitalRead(botao); // ler o valor enviado pelo botão: "HIGH" ou "LOW"
  delay (200);
  Serial.print (var);
  Serial.print (var2);
  Serial.println (n);
  if ((var == HIGH) && (var2 == LOW)) {
   
    n++;
    delay(20); // de-bouncing
  }
  var2=var; 
  if (n == 1) {
    digitalWrite(led, HIGH); // liga o led
    digitalWrite(led2, LOW);  // desliga o led
  }
  if (n == 2) {
    digitalWrite(led2, HIGH); // liga o led
    digitalWrite(led, LOW);  // desliga o led
  }
  if (n == 3) {
    digitalWrite(led, HIGH); // liga o led
    digitalWrite(led2,HIGH);  // desliga o led
  }
 
  if (n == 4){
    digitalWrite(led, LOW);  // desliga o led
    digitalWrite(led2, LOW);  // desliga o led
    n = 0;
  }
}
Logged

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

Alguma ajuda mais clara sff ? continuo com o mesmo problema  smiley-sad-blue
Logged

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

Definiste o led2 duas vezes... isso está errado e não deve compilar.

Uma das definições do led2 é a mesma que o led3... isso também não funciona.

Falta-te um = na definição do led3.

Ligaste resistências de pull-up nos botões?

a variável led3 não é usada em lado nenhum.

Definiste botão1 e botao2... usas a variável botao que não está definida em lado algum.

Resolve isto tudo que eu meti aqui e voltamos a ver se existem problemas.
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
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

int led1=11;// led1 no pino 11
int led2=12;// led2 no pino 12
int led3=13;// led3 no pino 13
int bt1=8;// botão no pino 8
int bt2=9;// botao no pino 9
int var=0;// valor instantaneo enviado pelo botão
int var2=0;// valor guardado
int estado=0;// guarda o valor 0 ou 1 (HIGH ou LOW)
int n=0;
void setup()
{
  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
  pinMode(bt1,INPUT);
  pinMode(bt2,INPUT);
  Serial.begin(9600);
}
void loop()
{
  var=digitalRead(bt1); // ler o valor enviado pelo botão: "HIGH" ou "LOW"
  delay (200);
  Serial.print (var);
  Serial.print (var2);
  Serial.println (n);
  if ((var == HIGH) && (var2 == LOW)) {
    //estado = 1 - estado;
    n++;
    delay(20); // de-bouncing
  }
  var2=var;
  if (n==0) {
    digitalWrite(led1, LOW); // led1 apagado
    digitalWrite(led2, LOW); // led2 apagado
    digitalWrite(led3, LOW); // led3 apagado
  }
  if (n == 1) {
    digitalWrite(led1, HIGH); // liga led1
    digitalWrite(led2, LOW); // Não liga led2
    digitalWrite(led3, LOW); // Não liga led3
  }
  if (n == 2) {
    digitalWrite(led1, LOW); // Não liga led1
    digitalWrite(led2, HIGH);// Liga led2
    digitalWrite(led3, LOW);// Não liga led3
   }
 
  if (n == 3){
    digitalWrite(led1, LOW);  // Não liga led1
    digitalWrite(led2, LOW);  // Não liga led2
    digitalWrite(led3, HIGH); //Liga led3
    n = 0;
  }
 
  if (led3>=4){ // Volta para 1
    (led1==);
}
}





Assim está melhor amigos?
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 52
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quando você for colocar um código, utilize a opção "Insert code" do fórum. É o botão com um #. Sem esta formatação o código fica sem indetação, e fica mais difícil de ler.

Acredito que dará um problema nesta parte:
Code:
if ((var == HIGH) && (var2 == LOW)) {
    //estado = 1 - estado;
    n++;
    delay(20); // de-bouncing
  }

Não há qualquer parada neste if, com exceção daquele pequeno delay de 20. O loop vai passar diretamente por ele. Quando você apertá-lo o n será somado diversas vezes. Tente fazer isso:

Code:
if ((var == HIGH) && (var2 == LOW)) {
    //estado = 1 - estado;
    While(var==HIGH){}
    n++;
    delay(20); // de-bouncing
  }

Assim ele esperará o botão deixar de pressionado, sem fazer nada.

Outra coisa. O var2 seria o outro botão, não? Quando é que ele pega o valor deste botão?
« Last Edit: November 05, 2013, 10:31:40 am by Filantropic » Logged

Pages: [1]   Go Up
Jump to: