Bom dia pessoal, estou trabalhando neste código aqui, que foi o luisilva , aqui do site arduino.cc que me ajudou em grande parte, do código em questão, mais estou precisando de mais uma ajuda.
O problema aqui, e que eu, fiz duas parte deste código, uma para acionar um relé, chamado RELE_TAMPA, que só vai poder ser acionado quando a contagem, já estiver encerrada, e a outra parte que apresenta problema, que e a do botão de emergência que seria um botão normalmente fechado que se fosse diferente de zero, zerava o código, e se coso, fosse acionando o botão de acionamento do relé o código ,voltaria a contar tudo novamente do zero.
Esse código, funciona da seguinte maneira se o BOTAO for acionado, liga o rele, e inicia a contagem, já determinada MY_SETPOINT_IN_MINUTES, se caso for interronpido a energia do arduino e depois ele voltar a ser ligado, o código grava na eeprom o momento da interrupção, e quando o arduino e religado a energia ele recomeça a contagem do momento, em que havia parado.
A emergência , seria para se caso fosse necessário interromper a contagem era só aperta o botão de emergência, ele passaria a ser diferente de zero e a contagem iria para zero outra vez.
A outra parte, BOTAO_TAMPA e só para ligar um outro relé, que só pode ser acionando quando a contagem, já estiver acabado.
O meu problema, nesse código e que depois que adicionei essa emergência a contagem não e feita completamente, hora o tempo e contado corretamente, hora não, e o tempo e interrompido.
Se alguém puder me ajudar com esse problema agradeço desde já.
Att.
Átila Fonseca Silva
segue o código.
#include <EEPROM.h>
#define DEBUG1
#define MILISECONDS_IN_MINUTE 60000UL
#define MY_SETPOINT_IN_MINUTES 1
#define CLOCK_TIMER (MILISECONDS_IN_MINUTE * MY_SETPOINT_IN_MINUTES) .
#define EEPROM_LENGTH 1024
#define EEPROM_ADDR 0x00
byte RELE_TAMPA =12;
byte PORTA_TAMPA = 9;
byte BOTAO_TAMPA = 0;
byte emergencia = 11;
byte EMERGENCIA = 0;
byte rele = 8;
byte BOTAO = 0;
byte MOTOR = 0;
byte PORTA_B = 10;
unsigned long motorStartedAt = 0;
boolean motorON = false;
byte lastState;
unsigned long motorTime;
int motorTimeWrite;
int eepromAddr;
void setup()
{
Serial.begin(9600);
pinMode(PORTA_TAMPA,INPUT);
digitalWrite(PORTA_TAMPA,HIGH);
pinMode(RELE_TAMPA,OUTPUT);
digitalWrite(RELE_TAMPA,LOW);
pinMode(emergencia,INPUT);
digitalWrite(emergencia,HIGH);
pinMode(PORTA_B, INPUT);
digitalWrite(PORTA_B,HIGH);
pinMode(rele, OUTPUT);
digitalWrite(rele,LOW);
eepromAddr = EEPROM.read(EEPROM_ADDR) << 8;
eepromAddr = EEPROM.read(EEPROM_ADDR+1);
lastState = EEPROM.read(EEPROM_ADDR);
#ifdef DEBUG1
Serial.print("Last state: ");
Serial.println(lastState);
#endif
if (lastState == 1)
{
motorTime = EEPROM.read(EEPROM_ADDR+1) << 8;
motorTime = EEPROM.read(EEPROM_ADDR+2);
motorTime *= 1000UL;
#ifdef DEBUG1
Serial.print("Motor Time: ");
Serial.println(motorTime);
#endif
}
}
void loop()
{
BOTAO_TAMPA = digitalRead(PORTA_TAMPA);
EMERGENCIA = digitalRead(emergencia);
BOTAO = digitalRead(PORTA_B);
if ((BOTAO == LOW || lastState == 1) && !motorON && EMERGENCIA == LOW)
{
digitalWrite(rele,HIGH);
motorStartedAt = millis();
motorON = true;
if (lastState != 1)
{
motorTime = CLOCK_TIMER;
lastState = 1;
EEPROM.write(EEPROM_ADDR, lastState);
#ifdef DEBUG
Serial.print("Last state: ");
Serial.println(lastState);
#endif
}
else
{
motorTime = EEPROM.read(EEPROM_ADDR+1) << 8;
motorTime = EEPROM.read(EEPROM_ADDR+2);
motorTime *= 1000UL;
}
}
if(motorON == true && (millis() - motorStartedAt )>= motorTime)
{
digitalWrite(rele,LOW);
motorON = false;
lastState = 0;
EEPROM.write(EEPROM_ADDR, lastState);
#ifdef DEBUG1
Serial.print("Last state: ");
Serial.println(lastState);
#endif
}
if(motorON == true && (millis() - motorStartedAt) % 1000 == 0)
{
motorTimeWrite = (motorTime - (millis() - motorStartedAt)) / 1000;
#ifdef DEBUG
Serial.print("Motor Time Write: ");
Serial.println(motorTimeWrite);
Serial.println(motorTimeWrite>>8 & 0x00FF);
Serial.println(motorTimeWrite & 0x00FF);
#endif
EEPROM.write(EEPROM_ADDR+1, motorTimeWrite>>8 & 0x00FF);
EEPROM.write(EEPROM_ADDR+2, motorTimeWrite & 0x00FF);
}
if(EMERGENCIA != 0)
{
digitalWrite(rele,LOW);
motorON = false;
lastState = false;
}
if(BOTAO_TAMPA == 0 && lastState == 0 )
{
digitalWrite(RELE_TAMPA,HIGH);
}
if( BOTAO_TAMPA != 0 )
{
digitalWrite(RELE_TAMPA,LOW);
}
}