Olá pessoal, 

Estou com um projeto simples mais estou encontrando dificuldades... eu queria fazer um botão fazer três acionamentos diferentes ..... funcionamento assim:

ao pressionar a primeira vez acenderá um led;

a segunda vez, apagará o led 1 e acenderá o led 2;

a terceira vez, que eu pressionar o botão acenderá um de cada vez, alternando-os por um tempo qualquer;

e a quarta vez apagara todos!!

alguem pode me dar alguma dicas .....

Desde já, Obrigado.

Exibições: 267

Responder esta

Respostas a este tópico

Ta ai, completinho

const int led1 = 5; // atribui os pinos 5 ao led 1
const int led2 = 6; // atribui os pinos 5 ao led 2
const int botao = 7; // atribui o pino 7 ao botao

int acao = 0;


void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(botao, INPUT);
}


void loop() {

if( digitalRead(botao) == 1 ){ // se o botao for pressionado
acao++; //soma mais um a variavel acao
if(acao==4){
acao=0;} // reinicia as acoes
delay(350);
}

switch (acao) {
case 0:
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
break;
case 1:
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
break;
case 2:
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
break;
case 3:
digitalWrite(led1, !digitalRead(led1));
delay(500);
digitalWrite(led2, !digitalRead(led2));
delay(500);
break;
}

}

Weider Duarte muito obrigado,, mas o senhor poderia me explica como faço pra tirar o delay?? Gostaria de usar o millis(), é possível ??  

Guilherme,

    O Delay no exemplo é usado pra duas coisas completamente diferentes,  em uma delas eu recomendo tirar na outra é pode, mas é mais complicado, vou explicar.

    No exemplo, o delay dentro do condicional IF que observa se o botão é pressionado, é utilizado porque se não houver, o arduino ira pensar em um simples pressionar que você esta apertando e soltando milhares de vezes em um simples toque, nesse caso é possivel mudar, mas exibe bastante logica.

    Já no caso do condicional CASE o delay em a simples função de segurar o led em tempo de picada.

     Bem,  vamos fazer assim,  existe na IDE do arduino um exemplo chamado BlinkWinthoutDelay,  ou seja, blink sem delay,  ele explica como fazer,   tenta ver o exemplo, tenta fazer você mesmo como exercicio,  se tiver duvida posta a duvida ai que vamos te ajudando,  assim você aprende melhor ok.

Weider Duarte nem sei como te agradecer !! vou postando minhas evoluções aqui.... obrigado novamente!!

#define led1 7
#define led2 6
#define led3 5
#define botao 8

int momento;

boolean ant = false;
boolean atu = false;
boolean estadoBotao = true;
boolean estAntBotao = true;
boolean estadoPisca = false;

unsigned long previousmillis = 0;

long intervalo = 1000;

void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(botao, INPUT);

}

void loop() {

//------------------------------------------------------------------------------------------------------------------------


atu = digitalRead(botao);
if (atu && !ant){
momento = momento + 1;

if(momento > 4){
momento = 0;
}
}

ant = atu;

switch(momento){

case 0:
digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
break;

case 1:
digitalWrite(led1,LOW);
digitalWrite(led2,HIGH);
digitalWrite(led1,LOW);
break;

case 2:
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);

break;



case 3:

unsigned long currentmillis = millis();

if(currentmillis - previousmillis > intervalo){

previousmillis = currentmillis;

if(led1 == LOW){

led1 = HIGH;
} else{

digitalWrite(led1, LOW);
}


}


break;

case 4:

break;

default:

digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
break;


}
}

Weider Duarte estava tentando em cima deste programa, tudo em cima do millis(), o senhor poderia me orientar neste projeto, como faço para millis zerar quando ele iniciar dentro da logica if ou case... por que ate onde sei, quando eu inicio o Arduíno o millis dispara e começa a contar ... como uso millis nessas situaçoes?? São simples esses programas 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço