Estou tentando fazer 5 leds se mover para esquerda e para direita com dois botões, eu consegui fazer os leds acender e apagar o anterior com um botão, porém estou com dificuldades de introduzir o segundo botão.

int l1 = 4;
int l2 = 5;
int l3 = 6;
int l4 = 7;
int l5 = 8;
#define botao 3
#define botao2 2
int estadoBotao;
int estadoBotao2;
int fase;
void setup() {
pinMode (l1, OUTPUT);
pinMode (l2, OUTPUT);
pinMode (l3, OUTPUT);
pinMode (l4, OUTPUT);
pinMode (l5, OUTPUT);
pinMode (botao, OUTPUT);

estadoBotao =1 ;
estadoBotao2 =0 ;
}

void loop() {
estadoBotao = digitalRead (botao);
estadoBotao2 = digitalRead (botao2);
if (estadoBotao == HIGH){
if (fase < 5){
fase ++;
}
else {
fase = 1;
}
}
if (estadoBotao2==LOW) {
if (fase<5) { fase --; } } if (fase == 1){ digitalWrite (l1, HIGH); digitalWrite (l2, LOW); digitalWrite (l3, LOW); digitalWrite (l4, LOW); digitalWrite (l5, LOW); } if (fase == 2){ digitalWrite (l1, LOW); digitalWrite (l2, HIGH); digitalWrite (l3, LOW); digitalWrite (l4, LOW); digitalWrite (l5, LOW); } if (fase == 3){ digitalWrite (l1, LOW); digitalWrite (l2, LOW); digitalWrite (l3, HIGH); digitalWrite (l4, LOW); digitalWrite (l5, LOW); } if (fase == 4){ digitalWrite (l1, LOW); digitalWrite (l2, LOW); digitalWrite (l3, LOW); digitalWrite (l4, HIGH); digitalWrite (l5, LOW); } if (fase == 5){ digitalWrite (l1, LOW); digitalWrite (l2, LOW); digitalWrite (l3, LOW); digitalWrite (l4, LOW); digitalWrite (l5, HIGH); } delay (150); }

Exibições: 372

Responder esta

Respostas a este tópico

Boa noite! voce chegou a testar o codigo que o colega Yuri Borges Nogueira te indicou no topico que voce fez , avancar e retornar com dois botoes,   la tem o site onde tem o codigo ,  caso queira outro exemplo esta em anexo,.. 

tem tambem o codigo do colega Yuri Borges Nogueira com o esquema de montagem em anexo,..

Anexos

Ola....
Liguei 12 leds nas portas do arduino uno (2 a 12) e fiz varios efeitos.
Não repare na maneira como foi escrito. Deve ter até alguns erros.(É que estou brincando com arduino a pouco tempo).
Nem sei se vai te servir,.. Um dos efeitos se der uma mudada faz o que voce quer.


int intervalo = 3;
int aceleracao = 0;
int Min = 0;
int Max = 10;

void setup() {
  Serial.begin(9600);
  for (int pino = 2; pino <= 13; pino = pino + 1) {
    pinMode(pino, OUTPUT);
  }
}

void loop() {
  aceleracao = 0;
  for (int solo = Min ; solo <= Max; solo = solo + 1) {
    aceleracao = aceleracao + intervalo;
    for (int pisca = 2; pisca <= 14; pisca = pisca + 1) {
      digitalWrite(pisca, HIGH);
      delay(aceleracao);
      digitalWrite(pisca, LOW);
    }
  }
  aceleracao = 33;
  for (int solo = Min ; solo <= Max; solo = solo + 1) {
    aceleracao = aceleracao - intervalo;
    for (int pisca = 14; pisca >= 2; pisca = pisca - 1) {
      digitalWrite(pisca, HIGH);
      delay(aceleracao);
      digitalWrite(pisca, LOW);
    }
  }
  aceleracao = 0;
  for (int solo = Min ; solo <= Max; solo = solo + 1) {
    aceleracao = aceleracao + intervalo;
    for (int pisca = 2; pisca <= 14; pisca = pisca + 2) {
      digitalWrite(pisca, HIGH);
      delay(aceleracao);
      digitalWrite(pisca, LOW);
    }
  }
  aceleracao = 33;
  for (int solo = Min ; solo <= Max; solo = solo + 1) {
    aceleracao = aceleracao - intervalo;
    for (int pisca = 14; pisca >= 2; pisca = pisca - 2) {
      digitalWrite(pisca, HIGH);
      delay(aceleracao);
      digitalWrite(pisca, LOW);
    }
  }
  aceleracao = 0;
  for (int solo = Min ; solo <= Max; solo = solo + 1) {
    aceleracao = aceleracao + intervalo;
    for (int pisca = 1; pisca <= 14; pisca = pisca + 2) {
      digitalWrite(pisca, HIGH);
      delay(aceleracao);
      digitalWrite(pisca, LOW);
    }
  }
  aceleracao = 33;
  //Serial.println(aceleracao);
  for (int solo = Min ; solo <= Max; solo = solo + 1) {
    aceleracao = aceleracao - intervalo;
    for (int pisca = 14; pisca >= 1; pisca = pisca - 2) {
      digitalWrite(pisca, HIGH);
      delay(aceleracao);
      digitalWrite(pisca, LOW);
    }
  }
  aceleracao = 50;
  for (int pisca = 0; pisca < 100; pisca = pisca + 1) {
    int aleatorio = random(2, 14);
    digitalWrite(aleatorio, HIGH);
    delay(aceleracao);
    digitalWrite(aleatorio, LOW);
  }
  aceleracao = 300;
  for (int pisca = 0; pisca < 10; pisca = pisca + 1) {
    int aleatorio = random(3);
    if (aleatorio == 0) {
      digitalWrite(2, HIGH);
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH);
      digitalWrite(5, HIGH);
      Serial.println(aleatorio);
      delay(aceleracao);
      digitalWrite(2, LOW);
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
    }
    if (aleatorio == 1) {
      digitalWrite(6, HIGH);
      digitalWrite(7, HIGH);
      digitalWrite(8, HIGH);
      digitalWrite(9, HIGH);
      delay(aceleracao);
      digitalWrite(6, LOW);
      digitalWrite(7, LOW);
      digitalWrite(8, LOW);
      digitalWrite(9, LOW);
    }
    if (aleatorio == 2) {
      digitalWrite(10, HIGH);
      digitalWrite(11, HIGH);
      digitalWrite(12, HIGH);
      digitalWrite(13, HIGH);
      delay(aceleracao);
      digitalWrite(10, LOW);
      digitalWrite(11, LOW);
      digitalWrite(12, LOW);
      digitalWrite(13, LOW);
    }
  }
  int diminui = 13;
  for (int solo = 0 ; solo <= 13; solo = solo + 1) {
    for (int pisca = 2; pisca <= diminui; pisca = pisca + 1) {
      digitalWrite(pisca, HIGH);
      delay(100);
      digitalWrite(pisca, LOW);
    }
    digitalWrite(diminui, HIGH);
    diminui = diminui - 1;    
  }
  int diminuii = 1;
  for (int solo = 0 ; solo <= 13; solo = solo + 1) {
    for (int pisca = 13; pisca >= diminuii; pisca = pisca - 1) {
      digitalWrite(pisca, HIGH);
      delay(100);
      digitalWrite(pisca, LOW);
    }
    digitalWrite(diminuii, HIGH);
    diminuii = diminuii + 1;
    Serial.println(diminuii);    
  }

for(int x=Min; x<Max; x=x+1){
  digitalWrite(2, HIGH);
  digitalWrite(3, LOW);
  digitalWrite(4, HIGH);
  digitalWrite(5, LOW);
  digitalWrite(6, HIGH);
  digitalWrite(7, LOW);
  digitalWrite(8, HIGH);
  digitalWrite(9, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);
  digitalWrite(12, HIGH);
  digitalWrite(13, LOW);
  delay(100);
  digitalWrite(2, LOW);
  digitalWrite(3, HIGH);
  digitalWrite(4, LOW);
  digitalWrite(5, HIGH);
  digitalWrite(6, LOW);
  digitalWrite(7, HIGH);
  digitalWrite(8, LOW);
  digitalWrite(9, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
  digitalWrite(12, LOW);
  digitalWrite(13, HIGH);
  delay(100);
  }
for(int x=2; x<=6; x=x+1){
  int y=14;
  y=y-1;
  digitalWrite(x,HIGH);
  digitalWrite(y,HIGH);
  }
  digitalWrite(7,HIGH);
  for (int m = 0; m <= 10; m = m + 1) {
    int y = 14;
    for (int x = 2; x <= 7; x = x + 1) {
      y = y - 1;
      digitalWrite(x, HIGH);
      digitalWrite(y, HIGH);
      delay(50);
    }
    digitalWrite(8, HIGH);
    int p = 7;
    for (int x = 7; x >= 2; x = x - 1) {
      p = p + 1;
      //Serial.println(y);
      digitalWrite(x, LOW);
      digitalWrite(p, LOW);
      delay(50);
    }
    digitalWrite(7, LOW);
  }
}

Olá Lucas,

Não testei o código mas acredito que o problema está nessa lógica (causando confusão na execução)...

"if (fase < 5){
fase ++;
}
else {
fase = 1;
}
}
if (estadoBotao2==LOW) {


if (fase<5) { fase --; }"

O valor de "fase" aumenta por causa do primeiro "if" mas logo em seguida, ao soltar o botão, esse valor diminui. se não pressionar nada, ficará menor que 1...

Dá uma verificada nesse trecho do código

Ja consegui arrumar o código, obrigado.

Poderia me ajudar com esse código? Eu consigo acender os leds da porta  0 a 6, mas eu queria desponibilizar as portas de 2 a 10, o que devo mudar no código? mexi nos hexadecimais, mas não consegui muita coisa.

Se poder me ajudar agradeço.

#define botao1 12
#define botao2 13
void led();
int desloca = 0x01;

void setup() {
// Todas as portas do 0 até a 7 são saidas
for(short i=0x00;i<0x20;i++) pinMode(i, OUTPUT);

pinMode(12, INPUT_PULLUP);
pinMode(13, INPUT_PULLUP);
}

void loop() {
PORTD = desloca;
led();
}

void led()
{
if(!digitalRead(botao1))
{
delay(500);
desloca = desloca 1;
if(desloca > 0x20) desloca = 0x00;
}
if(!digitalRead(botao2))
{
delay(500);
desloca = desloca >> 1;
if(desloca == 0x00) desloca = 0x20;
}
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço