Boa tarde galera!
Preciso de uma pequena ajudinha com um programa bem simples que fiz. Porém é quase uma emergência.
Elaborei um descritivo do que tem que acontecer, e tbm um descritivo do que está tendo problemas, e logo abaixo estou postando o código para que possam ver meu erro.
O funcionamento é o seguinte:
*Elevador começa parado no chão.
Pino 8 – HIGH – Aciona Relé 01, por 12 segundos (Tempo que o elevador demora para subir)
*Elevador chegou em cima.
Pino 9 – HIGH – Desliga os relés por 2 segundos (Para não dar problema de acionar os dois relés juntos).
Pino 10 – HIGH – Aciona relé 02, por 7 segundos (Tempo que o elevador demora para descer)
*Elevador chegou no chão.
Pino 9 – HIGH – Desliga os relés por 2 segundos
---- TOTAL 1 CICLO-------
Pino 9 – HIGH – Desliga os relés por 4 minutos
Após os 4 minutos recomeça tudo novamente, isso por 5000 vezes.
*** Problemas que estão acontecendo:
-
Na troca de ciclo, entre subida e descida, um relé, fica levemente acionado, ainda passando corrente.
-
Cada troca de ciclo, o display apaga todos os dados, e reinicia novamente, porém com incremento de número de ciclos.
O que está sendo utilizado:
-
01 módulo de relé 24 v – Controlado por 5vcc (específico para arduíno) ( Alimentação VCC e GND é por fonte externa)
-
01 diplay LCD 16 x 2 – Alimentação de GND e VCC pelo arduíno
-
01 arduíno UNO
-----------------------CÓDIGO-------------------------
//Programa: ENSAIO DINAMICO ELAVADOR
//Autor: MATHEUS TUZZIN
//Carrega a biblioteca LiquidCrystal
#include <LiquidCrystal.h>
//Define os pinos que serão utilizados para ligação ao display
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int SOBE;
int DESCE;
int Intervalo;
int i=0;
byte fase;
void setup()
{
lcd.begin(16, 2); //Define o número de colunas e linhas do LCD
lcd.clear(); // Limpa a tela do LCD
pinMode(8, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
}
void loop()
{
SOBE= 12000;
DESCE= 7000;
Intervalo= 3000;
DESLSAIDA= 1000;
{
if(fase == 1) {
fase = 0;
}
else if(fase == 0) {
fase = 1;
}
}
if (fase == 1)
{
for (i=0; i<5000;i++)
{
digitalWrite(8,HIGH);//SOBE
digitalWrite(9,LOW);//INTERVALO
digitalWrite(10,LOW);//DESCE
delay(SOBE);
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
delay(Intervalo);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
delay(DESCE);
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
delay(Intervalo);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
delay(240);
//Posiciona o cursor na coluna 0, linha 0;
lcd.setCursor(0, 0);
//Envia o texto entre aspas para o LCD
lcd.print(“ENSAIO DINAMICO”);
delay(5);
lcd.setCursor(0, 1);
//Envia o texto entre aspas para o LCD
lcd.print(“N. CICLOS:”);
delay(5);
lcd.setCursor (11,1);
lcd.print (i);
delay(5);
}
}
else if(fase == 0){
digitalWrite(10,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
delay(10000);
}
}