Estou tentando montar um projeto, mas estou com dificuldade. O projeto é o seguinte:

Eu tenho que acender 5 leds  com um botão, cada vez que eu aperto o botão um led se acende e o outro se apaga. Estou com dificuldade de desenvolver o código no arduino.

Exibições: 3204

Responder esta

Respostas a este tópico

Boa tarde, fiz esse projeto alguns meses atras , usava um botao pra selecionar e outro pra confirmar , refiz a programação pra ficar como seu projeto.

Programção:

#define Sel1 6
#define led1 8
#define led2 9
#define led3 10
#define led4 11

char Array[20];
unsigned char Contagem;
boolean flag,flagBotao;
void setup()
{
Serial.begin(9600);

vw_setup(2000); // Bits per sec
pinMode(Sel1, INPUT_PULLUP);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);

Serial.println("selecione o led");

{
if(digitalRead(Sel1)==0&&flagBotao==0) //se a chave sel1 for pressionada
{
flagBotao=1;
//while(digitalRead(Sel1)==0); //enquanto Sel1 estiver pressiona...
flag=0;
Contagem=Contagem+1; //Incrementa Contagem
if(Contagem==5)Contagem=0;
Serial.print("Contagem = ");
Serial.println(Contagem);
delay(500);
}
else if(digitalRead(Sel1)==1)flagBotao=0;

if(Contagem==1&&flag==0){
flag=1;
digitalWrite(led1, HIGH);
digitalWrite(led4, LOW);
}
else if(Contagem==2&&flag==0){
flag=1;
digitalWrite(led2, HIGH);
digitalWrite(led1, LOW);
}
else if(Contagem==3&&flag==0){
flag=1;
digitalWrite(led3, HIGH);
digitalWrite(led2, LOW);
}
else if(Contagem==4&&flag==0){
flag=1;
digitalWrite(led4, HIGH);
digitalWrite(led3, LOW);
}
}
Serial.println("OK Pressionado");
Serial.print("led escolhido =");

}

byte count = 1;

void loop()

{
;
}

introduzi seu programa porem nao funcionou, mas valeu msm assim

Olá, boa tarde!

Você pode criar uma variável INT e atribuir um valor para cada LED.

Veja um exemplo básico abaixo: 

Este trecho de código eu fiz em um PIC, mas você pode adaptar a sintaxe para o Arduino...

...

...

int opc = 0;

...

while (opc != 0)                  //Continua enquanto a variável "opc" for diferente de "0"

{

   if (!input(pin_b0))     opc++;    //Cada vez que pressionar o Botão do Pino B0, incrementa "1" na variável int

   switch(opc)

   {

   case 1:                          //Caso opc == 1
       output_high(pin_b1);   //Acende Led do Pino B1
       delay_ms (1500);       //Aguarda 1,5 segundos

       output_low(pin_b1);    //Apaga Led do Pino B1

   break;

   case 2:                          //Caso opc == 2
       output_high(pin_b2);   //Acende Led do Pino B2
       delay_ms (1500);       //Aguarda 1,5 segundos

       output_low(pin_b2);    //Apaga Led do Pino B2

   break;

   case 3:                          //Caso opc == 3
       output_high(pin_b3);   //Acende Led do Pino B3
       delay_ms (1500);       //Aguarda 1,5 segundos

       output_low(pin_b3);    //Apaga Led do Pino B3

   break;

   }  //fim do case

...

...

}// fim do while

Obs.: Você também pode trocar o "switch/case" pelo "if..else.."

Obs. 2: Você também vai precisar acertar um dos "cases" pra voltar pra "1" a variável "opc" quando chegar em "5", senão, só vai passar uma vez pela rotina de acender os leds. 

Não é um código pronto para sua aplicação, mas imagino que pode lhe servir de base para resolver sua questão. 

Abraço e boa sorte!

Feliz Natal!

obrigado, valeu
vou adaptar aqui pra ver como fica

Boa noite! segue o codigo do projeto em anexo para teste.

Anexos

Otimo, funcionou pra mim aqui, mas eu gostaria de aumentar para 16 leds (o que ate consigo) porem estou na dúvida de como colocar um contador de 2 digitos para contar cada vez que o botão é pressionado.

Oi F, bom dia.
Como a definição da variavel ledState é byte " byte ledState = 0; ", a contagem já permite ter
256 valores (2 digitos), mas se quiser pode escrever assim: unsigned int ledState = 0; e poderá ter 32.000 valores diferentes.(2 bytes)
ou seja 4 digitos.
Rui

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço