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
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.
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.
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;
}
}
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;
}
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.
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:
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(){
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(){