Código 3 Leds e 2 botões :(

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 :slight_smile:

Obrigado :smiley:

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.

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.

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

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

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;
}
}

Alguma ajuda mais clara sff ? continuo com o mesmo problema :disappointed_relieved:

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.

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?

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:

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:

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?

Olá estou com um problema com um código eu preciso usar a função while para acender um led com a quantidade do numero digitado, por ex digitei o numero 5 o led acende e apaga 5 cinco vezes, isso com qualquer numero digitado. Alguem poderia ajudar

int led = 13;
int tempo = 250;

void setup(){
Serial.begin(9600);
pinMode(led, OUTPUT);
Serial.println("insira um numero para começar.");
}
void acende(){

digitalWrite(led, HIGH);
delay(tempo);
digitalWrite(led, LOW);
delay(tempo);

}
void loop(){
if (Serial.available()) {
int tecla = ('1','2','3','4','5','6','7','8','9');
tecla = Serial.read();

if ((tecla == '1','2','3','4','5','6','7','8','9'))
{
while( tecla < 10)
{

Serial.print(" variavel numero =");
Serial.println(tecla);

acende();
tecla++;
}
}
}
}

alisson2017:
Olá estou com um problema com um código eu preciso usar a função while para acender um led com a quantidade do numero digitado, por ex digitei o numero 5 o led acende e apaga 5 cinco vezes, isso com qualquer numero digitado. Alguem poderia ajudar

int led = 13;
int tempo = 250;

void setup(){
Serial.begin(9600);
pinMode(led, OUTPUT);
Serial.println("insira um numero para começar.");
}
void acende(){

digitalWrite(led, HIGH);
delay(tempo);
digitalWrite(led, LOW);
delay(tempo);

}
void loop(){
if (Serial.available()) {
int tecla = ('1','2','3','4','5','6','7','8','9');
tecla = Serial.read();

if ((tecla == '1','2','3','4','5','6','7','8','9'))
{
while( tecla < 10)
{

Serial.print(" variavel numero =");
Serial.println(tecla);

acende();
tecla++;
}
}
}
}

Nem sequer está próximo da solução.

alisson, que sabes de programação?