Olá a todos! Estou tentando fazer um código onde eu acenda 6 LED por 10 seg. cada pressionando o botão correspondente, ou seja, um botão1 acende led 1, botão 2 acende LED 2, etc. O problema é que quando aciono um botão acende o LED, mas não consigo acender outro LED enquanto tiver algum outro aceso. estou usando delay, li em alguns posts na net que deve-se usar a função millis. Alguém pode me ajudar? Valeu!!!

int led2=3;
int led3=4;
int led4=5;
int led5=6;
int led6=7;
int led1=8;
int bt1=8;
int bt2=9;
int bt3=10;
int bt4=11;
int bt5=12;
int bt6=13;


void setup() {
  // put your setup code here, to run once:
pinMode (led1, OUTPUT);
pinMode (led2, OUTPUT);
pinMode (led3, OUTPUT);
pinMode (led4, OUTPUT);
pinMode (led5, OUTPUT);
pinMode (led6, OUTPUT);
pinMode (bt1, INPUT_PULLUP);
pinMode (bt2, INPUT_PULLUP);
pinMode (bt3, INPUT_PULLUP);
pinMode (bt4, INPUT_PULLUP);
pinMode (bt5, INPUT_PULLUP);
pinMode (bt6, INPUT_PULLUP);
}

void loop() {
  // put your main code here, to run repeatedly:
if(digitalRead(bt1)==0)
{
  digitalWrite(led1,HIGH);
  delay(10000);
}
else
{
  digitalWrite(led1, LOW);
}
if(digitalRead(bt2)==0)
{
  digitalWrite(led2,HIGH);
  delay(10000);
}
else
{
  digitalWrite(led2,LOW);
}
if(digitalRead(bt3)==0)
{
  digitalWrite(led3,HIGH);
  delay(10000);
}
else
{
  digitalWrite(led3,LOW);
}
if(digitalRead(bt4)==0)
{
  digitalWrite(led4,HIGH);
  delay(10000);
  }
else
{
  digitalWrite(led4,LOW);
  }
 if(digitalRead(bt5)==0)
{
  digitalWrite(led5,HIGH);
  delay(10000);
}
else
{
  digitalWrite(led5,LOW);
}
if(digitalRead(bt6)==0)
{
  digitalWrite(led6,HIGH);
  delay(10000);
}
else
{
  digitalWrite(led6,LOW);
}
}

Exibições: 589

Responder esta

Respostas a este tópico

La vou eu: primeiro, nunca tentei (nem vi tentarem) acender led nos pinos 1 e 2, se não me engano são reservados para funćões de comunicacao serial.

Mas tem um problema: vc quer usar 10 botoes e 10 leds, enquanto o Arduino só tem 13 pinos. Vai precisar dum Arduino Uno ou usar expansores de porta, o que é bem mais complicado. Vamos do princípio, para facilitar, vamos supor que eu use só 5 leds e 5 botões:

int led; //declara uma variavel para os leds
int bt;  //declara outra variavel para os botoes

void setup()

{

   for (led=3; led<8; led++) // para o led 3 até o led 7 (menor que 8)

   {

      pinMode (led1, OUTPUT); // define o pino dos leds como saída

   }

   for (bt=8; bt<13; bt++) // o mesmo para os botoes, como entradas.

   {
      pinMode (bt, INPUT);

   }
}
void loop()

{
   int botoes[10]; // declara um vetor, também chamado de array, de 10 membros.

//imagine uma matriz de 1 linha e 5 colunas.

   for (int x=0; x<10; x++) // coloque em cada posicao dessa matriz uma variavel q vc chama de x

   {

      pinos[x]=x+3; //define que a posicao zero = zero+2 (pino 3, entendeu?), posicao 1= pino 4, posicao 2=pino5

//e assim por diante, sempre somando 3 ao valor da posicao na matriz (a primeira é zero)

   }

if(digitalRead(pinos[x]==0)) // daí as condicoes de ligar e desligar

   {
      digitalWrite(pinos[x+5],LOW); // note que para o pino 3, o pino do led é (pino do botao)+3, ou seja, pino 8
   }

else

   {

      digitalWrite(pinos[x+5],HIGH);
      delay(10000);
   }

}

 Divirta-se!

Foi mal, é que fiz o código rapidão no trabalho, digitei errado na linha:

pinMode (led1, OUTPUT); // define o pino dos leds como saída

Troque led1 por led

e na linha

  pinos[x]=x+3;

acrescente int:

int pinos[x]=x+3;

Fiz um com 4 teclas e 6 leds talvez de ajude um pouco!

http://pastebin.com/JPDVxk52

https://www.youtube.com/watch?v=xKEV8uVUSJY

Mauricio é bem fácil e só vc colocar mais uma condição em cada if do teclado

antes  if (digitalRead(K2) == LOW) {

depois  if (digitalRead(K2) == LOW && digitalRead(habilita) == LOW ) {

Faz para todos os botoes no seu caso habilita e o pino 2!!!!

https://www.arduino.cc/en/Reference/Boolean

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço