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);
}
}
Tags:
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!
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!!!!
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por