Olá pessoal estou com a elaboração de um projeto de controle de iluminaçao, muito simples , o  problema é que quando eu ponho o botao em meu programa , se caso o meu botao nao esteja aciona ele para a contagem  de tempo, mas quero adicionar um botao , para liberar a acao de ligar as lampadas sem que afete a contagem de tempo . 

  o codigo em uso sem um botao é o seguinte : 

 

int seg=0,

min=19,

hor=13;

#define led 9

int ledA = 2;
int ledB = 3 ;
int ledC = 4 ;
int ledD = 5 ;
int ledE = 6 ;
int ledF = 7 ;
int ledG = 8 ;
int ledH = 9 ;

int sirene = 13;



void setup()
{

pinMode (sirene, OUTPUT);
pinMode (led, OUTPUT);
Serial.begin(9600);
pinMode ( ledA, OUTPUT);
pinMode ( ledB, OUTPUT);
pinMode ( ledC, OUTPUT);
pinMode ( ledD, OUTPUT);
pinMode ( ledE, OUTPUT);
pinMode ( ledF, OUTPUT);
pinMode ( ledG, OUTPUT);
pinMode ( ledH, OUTPUT);
}

void loop(){


static unsigned long ult_tempo = 0;

int tempo = millis();

if(tempo - ult_tempo >= 1000) {

ult_tempo = tempo;

seg++;

}

if(seg>=60) {

seg = 0;

min++;

}

if(min>=60) {

min = 0;

hor++;

}

if(hor>=24) {

hor=0;

min=0;

}

Serial.print(hor);

Serial.print(":");

Serial.print(min);

Serial.print(":");

Serial.println(seg);

delay (1000);


while (min >= 8 )
{



digitalWrite( ledA, HIGH);
digitalWrite( ledC, HIGH);
digitalWrite( ledE, HIGH);
digitalWrite( ledG, HIGH);
digitalWrite( ledB, LOW);
digitalWrite( ledD, LOW);
digitalWrite( ledF, LOW);
digitalWrite( ledH, LOW);
break;
}






while (min >= 15)
{
digitalWrite( ledA, HIGH);
digitalWrite( ledC, HIGH);
digitalWrite( ledE, HIGH);
digitalWrite( ledG, HIGH);
digitalWrite( ledB, HIGH);
digitalWrite( ledD, HIGH);
digitalWrite( ledF, HIGH);
digitalWrite( ledH, HIGH);
break;
}


while ( min >= 30 )
{
digitalWrite( ledB, HIGH);
digitalWrite( ledD, HIGH);
digitalWrite( ledF, HIGH);
digitalWrite( ledH, HIGH);
digitalWrite( ledA, LOW);
digitalWrite( ledC, LOW);
digitalWrite( ledE, LOW);
digitalWrite( ledG, LOW);
break;
}

while ( min >= 45 )
{
digitalWrite( ledA, HIGH);
digitalWrite( ledC, HIGH);
digitalWrite( ledE, HIGH);
digitalWrite( ledG, HIGH);
digitalWrite( ledB, HIGH);
digitalWrite( ledD, HIGH);
digitalWrite( ledF, HIGH);
digitalWrite( ledH, HIGH);
break;
}
while ( min <= 8 )
{
digitalWrite( ledA, LOW);
digitalWrite( ledC, LOW);
digitalWrite( ledE, LOW);
digitalWrite( ledG, LOW);
digitalWrite( ledB, LOW);
digitalWrite( ledD, LOW);
digitalWrite( ledF, LOW);
digitalWrite( ledH, LOW);
break;
}
if ( min == 10 && seg > 0 && seg <=10 || min == 20 && seg <=10 || min == 30 && seg <=10 || min == 40 && seg <=10 || min == 50 && seg <=10 || min == 0 && seg <=10 ){
digitalWrite(sirene ,HIGH);

}
else {
digitalWrite (sirene ,LOW);
}

}

esse código esta em  " min " porque é experimental, o tempo de programação de acionamento das lampadas sera em horas .  acrescentei uma sirene so como ilustraçao , a parte principal será mesmo o acionamento das lampadas . 

Por favor  peço a ajuda de vocês para sanar esse problema . 

Exibições: 417

Responder esta

Respostas a este tópico


Sugestões de como "postar" no LdG por Rui Viana

Ao postar sketchs, dê preferência postando em arquivos, ou em sites como

www.pastebin.com, pois postando na área de texto do seu post, caracteres

podem ser perdidos

=================================

No seu caso, não é recomendado o uso de Delays, porque enaquanto a função tiver contando tempo, nenhuma ação poderá ser realizada.

Use outro tipo de contagem de tempo com a função  millis

https://www.arduino.cc/en/reference/millis

http://labdegaragem.com/forum/topics/multitarefa-para

http://labdegaragem.com/forum/topics/duvida-multitarefa-cooperativa...

 mas nao estou usando muito delay , o problema e que quando adciono o if( digitalread(botao) { } , se ele nao faz a leitura para a contagem do tempo . 

No seu caso, não é recomendado o uso de Delays, porque enquanto a função tiver contando tempo, nenhuma ação poderá ser realizada.

delay (1000);  delay de 1 segundo é uma eternidade para Arduino.

nao ultilizo delay, só quero adcionar um botao para dar a condicao de ligar as lampadas . sem parar que pare a contagem de tempo . 

kkkk tem um delay no serialprint, da uma checada de novo no seu código

Serial.print(hor);

Serial.print(":");

Serial.print(min);

Serial.print(":");

Serial.println(seg);

delay (1000);///olha o delay aqui

esse delay nao ta interfirindo no programa em si .    

desse jeito o meu codigo funciona , mas sem o uso de um  pushbutton . 

o problema é que gostaria de saber como adcionar um pushbutton só para acionar a iluminaçao , sem que pare a contagem do tempo, no caso quando eu incluo o pushbutton o tempo só conta caso o pushbuton esteja acionado  . 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço