Ajuda para adicionar push butoon em codigo no Arduino

#1

Boa tarde. Gostaria de uma ajuda para adicionar um push butoon ao meu código. Nao tenho muito conhecimento em programação, fiz algumas tentativas mas sem sucesso. o programa monitora o nivel de uma caixa d’agua, quando o nivel da agua cai abaixo do sensor de “nivel ninimo” o rele arma e liga uma bomba que permanece ligada ate o nivel da agua subir e tocar o sensor de “nivel maximo”, quando entao o rele desarma e desliga a bomba. o codigo funciona bem, porém gostaria de uma ajuda para adicionar um unico push button para poder ligar ou desligar o rele manualmente, para nao precisar ficar esperando pela ação dos sensores. Agradeço a todos que ajudarem.

#define sensor_max 3
#define sensor_min 4
#define botao_rele 5
#define led_max 7
#define led_min 8
#define pino_rele 9
static bool estado = LOW;

void setup() {

Serial.begin(9600);
pinMode(sensor_max,INPUT);
pinMode(sensor_min,INPUT);
pinMode(botao_rele, INPUT_PULLUP);
pinMode(led_max,OUTPUT);
pinMode(led_min,OUTPUT);
pinMode(pino_rele,OUTPUT);
}

void loop() {

int sen_max = digitalRead(sensor_max);
int sen_min = digitalRead(sensor_min);

if(sen_min == HIGH){
digitalWrite(led_min,HIGH);

if(sen_max == HIGH){
digitalWrite(pino_rele,LOW);
estado = LOW;
}
}
else{
digitalWrite(led_min,LOW);
}

if(sen_max == LOW){
digitalWrite(led_max,LOW);

if(sen_min == LOW){
digitalWrite(pino_rele,HIGH);
estado = HIGH;
}
}
else{
digitalWrite(led_max,HIGH);
}
delay(50);
}

0 Likes

#2

imagino que voce queira usar o botao_rele,

voce perguntaria, caso o botao estiver LOW
if(botao_rele == LOW){ digitalWrite(pino_rele,HIGH); }

o problema, vai ser que o codigo nao para, ele vai logo ler a proxima linha, e vai ficar ligando e desligando .

Por que a chegar nesta linha " if(sen_max == HIGH){digitalWrite(pino_rele,LOW);"
ele ja vai mudar o estado. Isso porque ele nao sabe que ainda esta segurando o botao.

o que voce precisa fazer e perguntar colocar um WHILE
while siginicifa enquanto. ele funciona assim :

while( enquanto o que estar aqui seja verdade ){ fique fazendo o que esta aqui}

então seu programa fica mais ou menos assim:

if(caso o botao esteja apertado){
while(enquanto o “sensor_cheio” nao for acionado ){ fique enchendo de agua; }
pronto ja , encheu agora desliga o rele
}

if(digitalRead(botao_rele) == LOW){

while (digitalRead(sensor_min) == LOW){
digitalWrite(pino_rele,HIGH);
}

digitalWrite(pino_rele,LOW);  

}

eu nao testei mas acho que o que tem abaixo faria o mesmo

void setup() {
pinMode(3,INPUT);
pinMode(4,INPUT);
pinMode(5, INPUT_PULLUP);
pinMode(8,OUTPUT);
pinMode(7,OUTPUT);
pinMode(9,OUTPUT);
}

void loop(){
if(digitalRead(4)==1 || digitalRead(5) == 0){
while(digitalRead(3)==0 ){ digitalwrite(9,1) ;
digitalwrite(8,digitalRead(4) );
digitalwrite(7,digitalRead(3) );
}
digitalwrite(9,0);
}
digitalwrite(8,digitalRead(4) );
digitalwrite(7,digitalRead(3) );
}

0 Likes