Amigos, boa tarde.
Estou com uma dúvida. Sou novo no Arduino e estou tentando fazer um código para executar tarefas em sequência (talvez umas 8), com um tempo pré-definido e terminando as tarefas, o Arduino parar de executá-las. Para cada tarefa, tenho botões de segurança para acionamento de relês em caso de querer parar a operação.
Queria modificar o programa para executá-las em sequência a partir do acionamento do primeiro botão e não ter loop nenhum (tipo, voltar ao main), somente executar uma vez e mantendo os botões para interrupções. Pensei em usar o módulo RTC DS1302 para fazer o controle dos tempos das tarefas, ou talvez usar a função millis, para não ter delays.
Alguém tem alguma ideia para poder me ajudar? Obrigado.
Segue o código:
//Programa : Teste Rele - Botoes
//Porta ligada ao pino IN1 do modulo
int porta_rele1 = 7;
//Porta ligada ao pino IN2 do modulo
int porta_rele2 = 8;
//Porta ligada ao pino IN3 do modulo
int porta_rele3 = 9;
//Porta ligada ao pino IN4 do modulo
int porta_rele4 = 10;
//Porta ligada ao botao 1
int porta_botao1 = 2;
//Porta ligada ao botao 2
int porta_botao2 = 3;
//Porta ligada ao botao 3
int porta_botao3 = 4;
//Porta ligada ao botao 4
int porta_botao4 = 5;
//Armazena o estado do rele - 0 (LOW) ou 1 (HIGH)
int estadorele1 = 1;
int estadorele2 = 1;
int estadorele3 = 1;
int estadorele4 = 1;
//Armazena o valor lido dos botoes
int leitura1 = 0;
int leitura2 = 0;
int leitura3 = 0;
int leitura4 = 0;
void setup()
{
//Define pinos para o rele como saida
pinMode(porta_rele1, OUTPUT);
pinMode(porta_rele2, OUTPUT);
pinMode(porta_rele3, OUTPUT);
pinMode(porta_rele4, OUTPUT);
//Define pinos dos botoes como entrada
pinMode(porta_botao1, INPUT);
pinMode(porta_botao2, INPUT);
pinMode(porta_botao3, INPUT);
pinMode(porta_botao4, INPUT);
//Estado inicial dos reles - desligados
digitalWrite(porta_rele1, HIGH);
digitalWrite(porta_rele2, HIGH);
digitalWrite(porta_rele3, HIGH);
digitalWrite(porta_rele4, HIGH);
}
void loop(){
//Verifica o acionamento do botao 1
leitura1 = digitalRead(porta_botao1);
if (leitura1 != 0)
{
while(digitalRead(porta_botao1) != 0)
{
delay(1000);
}
//Inverte o estado da porta
estadorele1 = !estadorele1;
//Comandos para o rele 1
digitalWrite(porta_rele1, estadorele1);
}
{
//Verifica o acionamento do botao 2
leitura2 = digitalRead(porta_botao2);
if (leitura2 != 0)
{
while(digitalRead(porta_botao2) != 0)
{
delay(2000);
}
//Inverte o estado da porta
estadorele2 = !estadorele2;
//Comandos para o rele 2
digitalWrite(porta_rele2, estadorele2);
}
//Verifica o acionamento do botao 3
leitura3 = digitalRead(porta_botao3);
if (leitura3 != 0)
{
while(digitalRead(porta_botao3) != 0)
{
delay(100);
}
//Inverte o estado da porta
estadorele3 = !estadorele3;
//Comandos para o rele 3
digitalWrite(porta_rele3, estadorele3);
}
//Verifica o acionamento do botao 4
leitura4 = digitalRead(porta_botao4);
if (leitura4 != 0)
{
while(digitalRead(porta_botao4) != 0)
{
delay(100);
}
//Inverte o estado da porta
estadorele4 = !estadorele4;
//Comandos para o rele 4
digitalWrite(porta_rele4, estadorele4);
}
}}
Tags:
Amigo, você quer que só passa uma vez pelo loop ?
e quando você aperta o botão... ele faça o processo e depois para...
seria isso sua dúvida ?
Mauricio de Souza, obrigado pela resposta.
Cara, o problemado loop eu resolvi, usei um while (1) no fim. O esquema do botão é este mesmo que falou, um liga e desliga.
Pensei em usar um arduino uno como master, você sabe como faz?
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inicializa o display no endereco 0x3F
LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7,3, POSITIVE);
#define RELAY1 3
#define RELAY2 9
#define RELAY3 10
#define RELAY4 11
void setup()
{
Serial.begin(9600);
lcd.begin (20,4);
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(RELAY4, OUTPUT);
digitalWrite(RELAY1, HIGH);
digitalWrite(RELAY2, HIGH);
digitalWrite(RELAY3, HIGH);
digitalWrite(RELAY4, HIGH);
lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print("PROCESSO ");
lcd.setCursor(0,1);
lcd.print("INICIALIZADO");
delay(8000);
lcd.setBacklight(LOW);
delay(2000);
lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print("PROCESSO 1");
lcd.setCursor(0,1);
lcd.print("INICIALIZADO");
}
void loop()
{
digitalWrite(RELAY1,LOW); // Relé 1 ligado (ON)
delay(1800000); // espera do processo
digitalWrite(RELAY1,HIGH); // Relé 1 desligado (OFF)
lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print("PROCESSO 2");
lcd.setCursor(0,1);
lcd.print("INICIADO ");
digitalWrite(RELAY2,LOW); // Relé 2 ligado (ON)
delay(1200000); // espera do processo
digitalWrite(RELAY2,HIGH); // Relé 2 desligado (OFF)
lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print("PROCESSO 3 ");
lcd.setCursor(0,1);
lcd.print("INICIADO");
digitalWrite(RELAY3,LOW); // Relé 3 ligado (ON)
delay(1500000); // espera do processo
digitalWrite(RELAY3,HIGH); // Relé 3 desligado (OFF)
lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print("PROCESSO 4 ");
lcd.setCursor(0,1);
lcd.print("INICIADO ");
digitalWrite(RELAY4,LOW); // Relé 4 ligado (ON)
delay(1500000); // espera do processo
digitalWrite(RELAY4,HIGH); // Relé 4 desligado (OFF)
lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print("PROCESSO ");
lcd.setCursor(0,1);
lcd.print("FINALIZADO ");
while (1);
}
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por