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 .
Tags:
Sugestões de como "postar" no LdG por Rui Viana
Ao postar sketchs, dê preferência postando em arquivos, ou em sites como
o 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 .
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por