Olá!

Preciso de ajuda;

Gostaria de implementar 3 funções em um só botão.

Imaginem que tenho um botão e ois leds:

Acionando o botão o led 1 liga ( só pode liga depois que o botão for solto);

Mantendo o botão acionado por um tempo maior que um intervalo definido ele acenderia o led 2;

Quando o led 1 estiver ligado e o botão for acionado por um tempo menor que o intervalo ele desliga tudo.

Deu para intender?.

Já consegui algumas coisas, trabalhando com millis(). mas não tá dando muito certo.

Basicamente, preciso ligar uma máquina, manter ligada, ligar e desligar outra com o mesmo botão. Tenho que poder fazer isso várias vezes sem desligar a primeira. ( a segunda máquina pode ficar ligada somente com botão pressionado).

Estou tentado trabalhar com tempo de acionamento de  botão diferentes, mas não estou conseguindo.

Exibições: 1545

Responder esta

Respostas a este tópico

Bom, como não tive resposta, juntei uma dica com outra e deu nisso:

unsigned long intervalo = 500;
unsigned long t_high;
unsigned long tempo;

#define botao 5
#define aciona 8
#define troca 9

int est_atual = 0;
int est_anterior = 0;
int estado = 0; // guarda o valor 0 ou 1 (HIGH ou LOW)
int ok = 0;

void setup()
{
Serial.begin(9600);
pinMode(aciona, OUTPUT);
pinMode(troca, OUTPUT);
pinMode (botao, INPUT);
}
void imprimir()
{
Serial.print("t_high = ");
Serial.println(t_high);
Serial.print("tempo = ");
Serial.println(tempo);
}
void loop()
{
est_atual = digitalRead(botao); // detecta a mudança do estado
if ((est_atual == HIGH) && (est_anterior == LOW)) {
t_high = millis();
}
if ((est_atual == LOW) && (est_anterior == HIGH)) {// tefine o tempo em High
tempo = millis() - t_high;
imprimir();
}
est_anterior = est_atual;

if((est_atual == LOW) && (tempo >= intervalo)){ // compara o tempo com o intevelo
digitalWrite(aciona, HIGH);
ok = 1;
}
if((est_atual == HIGH) && (ok == 1)){ // aciona outra saida sem desligar a primeira
digitalWrite(troca, HIGH);
}
else{
digitalWrite(troca, LOW);
}
if((est_atual == LOW) && (tempo < intervalo)){
digitalWrite(aciona, LOW);
ok = 0;
}
}

Ta funcionando, mas se alguém tiver uma ideia melhor...

Ola  você devera trabalhar com tempo para cada maquina .

Maquina 1  N tempo  ligado.

Maquina 2  N tempo  ligado.

Maquina 3  N tempo  ligado.

veja nesta link se ajuda usando microcontrolador PIC.

http://microcontrolandos.blogspot.com.br/2012/12/timer-utilizando-o...

Valeu pela dica.

Mas por enquanto este código que fiz da rolando bem,do jeito que eu queria.

Só testei no Proteus,quanto chegar os meus Attiny85 vou fazer mais uns teste, se não der certo ai tendo outra forma. 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço