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