Rtc Ds1307+ Botão de Pressão

Boas, estou a fazer a progromaçao para um sistema de iluminação automático que liga entre as 6h e as 21h depois dessa hora liga por um botão de tempo extra que temporiza para tempo extra (1h) mas eu ao carregar no botao de pressao nao me esta a fazer nada, alguem me sabe dizer o que se esta a passar na programação>?

Programação em Anexo.

Final_Bot.ino (4.28 KB)

A parte que detecta a pressão do botão está desactivada (comentada), por isso é norma que o programa não faça nada nessa altura.

Para além disso tenho a apontar mais algumas coisas: 1º É bem mais simples fazer o mesmo que está aqui a ser feito, mas usando bibliotecas; (ainda ontem apontei a alguém esta, que é a que eu estou a utilizar) 2ºO seu código é praticamente ilegível; (há maneiras bem mais simples de fazer o mesmo que está a fazer mas usando formas diferentes de programação que tornam a leitura bastante mais fácil); 3º Fazer a verificação numa função que se chama "printDate", não é boa ideia. 4º Não percebo (para o caso de a parte do botão não estar comentada), porque é que a verificação do botão é feita se a hora for >21 ...

Sim, o código esta em comentário foi apenas porque eu antes estava a testar o horário, mas mesmo tirando o comentário não funciona. A verificação é feita as 21 que é para ligar o tempo extra também aos sábados e domingos.

Olá!

Eu tenho algumas perguntas.

Porque está usando tantos pinos do arduino para fazer a mesma coisa?

Onde é que acrescenta uma hora extra após pressionar o botão?

Eu acredito que se o circuito estiver correto esse código deve funcionar.
O que pode ocorrer é que a mudança de estado do pino é tão rápida que não consegue ver o que foi impresso.

Experimente pressionar o botão durante vários segundos.

Colocando o código aqui fica mais fácil de receber ajuda.

#include "Wire.h"
#define DS1307_ADDRESS 0x68
int botao = 53;
int flag = 0;
void setup(){
  pinMode(botao, INPUT); //Seta o pino como botao como entrada
  //digitalWrite(botao, HIGH); /Foi este que abir abocado,
  Wire.begin();
  Serial.begin(9600);
  //fixos
  pinMode(22, OUTPUT);
  pinMode(23, OUTPUT); // Este ??ya
  pinMode(24, OUTPUT);
  //em horario
  pinMode(25, OUTPUT);
  pinMode(26, OUTPUT);
  pinMode(27, OUTPUT);
  pinMode(28, OUTPUT);
  pinMode(29, OUTPUT);
  pinMode(30, OUTPUT);
  pinMode(31, OUTPUT);
  pinMode(32, OUTPUT);
  pinMode(33, OUTPUT);
  pinMode(34, OUTPUT);
  pinMode(35, OUTPUT);
  pinMode(36, OUTPUT);
  pinMode(37, OUTPUT);
  pinMode(38, OUTPUT);
  pinMode(39, OUTPUT);
  pinMode(40, OUTPUT);
  pinMode(41, OUTPUT);
  pinMode(42, OUTPUT);
}

void loop(){
  digitalWrite(22, HIGH);
  digitalWrite(23, HIGH);
  digitalWrite(24, HIGH);
  printDate();
  delay(1000);
}

byte bcdToDec(byte val)  {
  // Convert binary coded decimal to normal decimal numbers
  return ( (val/16*10) + (val%16) );
}
void printDate(){

  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);

  byte zero = 0x00;
  Wire.write(zero);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int second = bcdToDec(Wire.read());
  int minute = bcdToDec(Wire.read());
  int hora = bcdToDec(Wire.read() & 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
  int monthDay = bcdToDec(Wire.read());
  int month = bcdToDec(Wire.read());
  int year = bcdToDec(Wire.read());
  Serial.println("hora");
  Serial.println(hora);
  Serial.println("dia semana");
  Serial.println(weekDay);
  if(weekDay==1 || weekDay==7){
    Serial.println("OFF - Sabado / Domingo");
    digitalWrite(25, LOW);
    digitalWrite(26, LOW);
    digitalWrite(27, LOW);
    digitalWrite(28, LOW);
    digitalWrite(29, LOW);
    digitalWrite(30, LOW);
    digitalWrite(31, LOW);
    digitalWrite(32, LOW);
    digitalWrite(33, LOW);
    digitalWrite(34, LOW);
    digitalWrite(35, LOW);
    digitalWrite(36, LOW);
    digitalWrite(37, LOW);
    digitalWrite(38, LOW);
    digitalWrite(39, LOW);
    digitalWrite(40, LOW);
    digitalWrite(41, LOW);
    digitalWrite(42, LOW);
  }
  else{
    if(hora>=6 && hora<21){
      Serial.println("ON - hora");
      digitalWrite(25, HIGH);
      digitalWrite(26, HIGH);
      digitalWrite(27, HIGH);
      digitalWrite(28, HIGH);
      digitalWrite(29, HIGH);
      digitalWrite(30, HIGH);
      digitalWrite(31, HIGH);
      digitalWrite(32, HIGH);
      digitalWrite(33, HIGH);
      digitalWrite(34, HIGH);
      digitalWrite(35, HIGH);
      digitalWrite(36, HIGH);
      digitalWrite(37, HIGH);
      digitalWrite(38, HIGH);
      digitalWrite(39, HIGH);
      digitalWrite(40, HIGH);
      digitalWrite(41, HIGH); // asdasdsdlksdnn
      digitalWrite(42, HIGH);
    }
    if(hora>=21 || hora>=0 && hora<6){
      if(digitalRead(botao) == LOW){    // asdasdsdlksdnn
        Serial.println("ON - Botao");        // asdasdsdlksdnn
        digitalWrite(25, HIGH);            // asdasdsdlksdnn
        digitalWrite(26, HIGH);            // asdasdsdlksdnn               
        digitalWrite(27, HIGH);           // asdasdsdlksdnn
        digitalWrite(28, HIGH);           // asdasdsdlksdnn
        digitalWrite(29, HIGH);           // asdasdsdlksdnn
        digitalWrite(30, HIGH);           // asdasdsdlksdnn
        digitalWrite(31, HIGH);           // asdasdsdlksdnn
        digitalWrite(32, HIGH);           // asdasdsdlksdnn
        digitalWrite(33, HIGH);           // asdasdsdlksdnn
        digitalWrite(34, HIGH);           // asdasdsdlksdnn
        digitalWrite(35, HIGH);           // asdasdsdlksdnn
        digitalWrite(36, HIGH);           // asdasdsdlksdnn
        digitalWrite(37, HIGH);           // asdasdsdlksdnn
        digitalWrite(38, HIGH);           // asdasdsdlksdnn
        digitalWrite(39, HIGH);           // asdasdsdlksdnn
        digitalWrite(40, HIGH);           // asdasdsdlksdnn
        digitalWrite(41, HIGH);           // asdasdsdlksdnn
        digitalWrite(42, HIGH);            // asdasdsdlksdnn
      }
      else{ 
        Serial.println("OFF - hora");
        digitalWrite(25, LOW);
        digitalWrite(26, LOW);
        digitalWrite(27, LOW);
        digitalWrite(28, LOW);
        digitalWrite(29, LOW);
        digitalWrite(30, LOW);
        digitalWrite(31, LOW);
        digitalWrite(32, LOW);
        digitalWrite(33, LOW);
        digitalWrite(34, LOW);
        digitalWrite(35, LOW);
        digitalWrite(36, LOW);
        digitalWrite(37, LOW);
        digitalWrite(38, LOW);
        digitalWrite(39, LOW);
        digitalWrite(40, LOW);
        digitalWrite(41, LOW);
        digitalWrite(42, LOW);
      }
    }
  }
}

Abraço.
Fernando Garcia