rtc 1302 problrma

salve seguo il forum ma non ho ancora scritto ,premetto che sono piuttosto scarso ed ho un problemino.
Devo chiudere un portone alle 22.00 e non lo so fare con l'rtc 1302 che gia' funziona (col programmino di esempio della libreria ) ,dovro' poi integrarlo con un altro programma di ricevente telecomando e pulsanti eccetera che gia' funziona.
Il problema è che non so come ottenere e raffrontare l'orario per eseguire l' if...
qualcuno puo darmi una mano
grazie

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

devi confrontare sia l'ora che i minuti. La libreria RTC ti da due valori interi, supponiamo hh e mm
Se fai il calcolo hh100+mm ottieni un numero unico più facile da confrontare.
Esempio 10:30 10
100+30 => 1030
Quindi un test del genere farà qualcosa dalla 18:20

if( hh*100+mm >= 1820)

scusami non sono pratico dei forum , ho postato la presentazione, non volevo imbottire di sciocchezze ma se capisco come si fa posto il codice

mauromasin:
scusami non sono pratico dei forum , ho postato la presentazione, non volevo imbottire di sciocchezze ma se capisco come si fa posto il codice

Vedi il regolamento sezione 7, spiega come fare

spero di non fare un casino,come vedi ho provato diversi sistemi ,cosi funziona la lettura delle ore sulla com percui rtc1302 è a posto(a parte che guadagna 10 secondi al giorno), devo capire come attivare il relè alle 22.00 o 22.30

// Example sketch for interfacing with the DS1302 timekeeping chip.
//
// Copyright (c) 2009, Matt Sparks
// All rights reserved.
//
// http://quadpoint.org/projects/arduino-ds1302
#include <stdio.h>
#include <DS1302.h>
#include <Time.h>
#define out4 4  //definisce usato pin 4
//Time ora;
namespace {

  // Set the appropriate digital I/O pin connections. These are the pin
  // assignments for the Arduino as well for as the DS1302 chip. See the DS1302
  // datasheet:
  //
  //   http://datasheets.maximintegrated.com/en/ds/DS1302.pdf
  const int kCePin   = 5;  // Chip Enable
  const int kIoPin   = 6;  // Input/Output
  const int kSclkPin = 7;  // Serial Clock

  // Create a DS1302 object.
  DS1302 rtc(kCePin, kIoPin, kSclkPin);
  String dayAsString(const Time::Day day) {
    switch (day) {
      case Time::kSunday: 
      return "Sunday";
      case Time::kMonday: 
      return "Monday";
      case Time::kTuesday: 
      return "Tuesday";
      case Time::kWednesday: 
      return "Wednesday";
      case Time::kThursday: 
      return "Thursday";
      case Time::kFriday: 
      return "Friday";
      case Time::kSaturday: 
      return "Saturday";
    }
    return "(unknown day)";
  }

  void printTime() {
    // Get the current time and date from the chip.
   Time t = rtc.time();
    //now = rtc.now();       //TENTATIVO DI OTTENERE ORA ADESSO
    //Hmin = now.hour();     //TENTATIVO DI CREARE PARAMETRO PER IF ORARIO
    // Name the day of the week.
    const String day = dayAsString(t.day);
    //const String t = hrAsString(t.hr);  
    // Format the time and date and insert into the temporary buffer.
    char buf[50];
    snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d",
    day.c_str(),
    t.yr, t.mon, t.date,
    t.hr, t.min, t.sec);

    // Print the formatted string to serial so we can see the time.
    Serial.println(buf);
  }

}  // namespace

void setup() {
  Serial.begin(9600);
  pinMode(out4, OUTPUT);        // definisce pin 4 uscita digitale
  digitalWrite( out4,HIGH );    //definisce pin 4 alta
}
                                   
  /* 

void avviotemporizzato()
String ora = rtc.getTimeStr();      // 1
if(ora == "22:00:00"){              // 1  se il tempo è uguale a quello segnato le 22 di default
String ora  = rtc.getTime(t.hr);    // 2
if(ora = DEC==22){                  // 2  se il tempo è uguale a quello segnato le 22 di default
  if( hh*100+mm == 2200) {   
  digitalWrite(out4, LOW);
  delay(200);
  digitalWrite(out4, HIGH);
  delay(200);}
}                                                                  
else if(ora != DEC==22){ //altrimenti continua
}                                   
  */   
                                                               
// Loop and print the time every second.
void loop() {
  printTime();
  delay(1000);
}

il cancelletto non c’è grazie della pazienza

Questa non l'ho capita:

if(ora = DEC==22){

Il test si fa con doppio uguale, se usi un solo uguale è assegnazione (occhio che il C lo accetta in un test)

Qualcosa del genere (lascia perdere le String) :

void avviotemporizzato()
{ int hh=rtc.getTime(t.hr);    
  int mm=rtc.getTime(t.min);
  if( hh*100+mm >= 2200) {   // se supera le 22:00 fa qualcosa
  { digitalWrite(out4, LOW);
  }
  else
  { digitalWrite(out4, HIGH);
  }
}

non acquisisce i comandi, problemi di librerie?

This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.
Arduino: 1.0.6 (Windows 7), Board: "Arduino Uno"
set_clock_relay.ino: In function 'void avviotemporizzato()':
set_clock_relay:90: error: 'class DS1302' has no member named 'getTime'
set_clock_relay:90: error: 't' was not declared in this scope
set_clock_relay:91: error: 'class DS1302' has no member named 'getTime'
set_clock_relay:95: error: expected `}' before 'else'

metti il codice aggiornato

// Example sketch for interfacing with the DS1302 timekeeping chip.
//
// Copyright (c) 2009, Matt Sparks
// All rights reserved.
//
// http://quadpoint.org/projects/arduino-ds1302
#include <stdio.h>
#include <DS1302.h>
#include <Time.h>
#define out4 4  //definisce usato pin 4
//Time ora;
namespace {

  // Set the appropriate digital I/O pin connections. These are the pin
  // assignments for the Arduino as well for as the DS1302 chip. See the DS1302
  // datasheet:
  //
  //   http://datasheets.maximintegrated.com/en/ds/DS1302.pdf
  const int kCePin   = 5;  // Chip Enable
  const int kIoPin   = 6;  // Input/Output
  const int kSclkPin = 7;  // Serial Clock

  // Create a DS1302 object.
  DS1302 rtc(kCePin, kIoPin, kSclkPin);
  String dayAsString(const Time::Day day) {
    switch (day) {
      case Time::kSunday: 
      return "Sunday";
      case Time::kMonday: 
      return "Monday";
      case Time::kTuesday: 
      return "Tuesday";
      case Time::kWednesday: 
      return "Wednesday";
      case Time::kThursday: 
      return "Thursday";
      case Time::kFriday: 
      return "Friday";
      case Time::kSaturday: 
      return "Saturday";
    }
    return "(unknown day)";
  }

  void printTime() {
    // Get the current time and date from the chip.
   Time t = rtc.time();
    //now = rtc.now();       //TENTATIVO DI OTTENERE ORA ADESSO
    //Hmin = now.hour();     //TENTATIVO DI CREARE PARAMETRO PER IF ORARIO
    // Name the day of the week.
    const String day = dayAsString(t.day);
    //const String t = hrAsString(t.hr);  
    // Format the time and date and insert into the temporary buffer.
    char buf[50];
    snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d",
    day.c_str(),
    t.yr, t.mon, t.date,
    t.hr, t.min, t.sec);

    // Print the formatted string to serial so we can see the time.
    Serial.println(buf);
  }

}  // namespace

void setup() {
  Serial.begin(9600);
  pinMode(out4, OUTPUT);        // definisce pin 4 uscita digitale
  digitalWrite( out4,HIGH );    //definisce pin 4 alta
}

void avviotemporizzato()
{ int hh=rtc.getTime(t.hr);    
  int mm=rtc.getTime(t.min);
  if( hh*100+mm >= 2200) {   // se supera le 22:00 fa qualcosa
  { digitalWrite(out4, LOW);
  }
  else
  { digitalWrite(out4, HIGH);
  }
}

void loop() {
  printTime();
  delay(1000);
}