RTC come aggiustare la data da un telecomando

Ciao, volevo variare la data del mio RTC ma con il telecomando. ho una funzione che legge i valori del telecomando: tipo:

switch (results.value) {
  
    case 0xFF6897:  
            numero = 0;
              break;
             case 0xFF30CF:  
            numero = 1;
              break;
...
}
return numero;

ma vorrei un consiglio su come modificare: RTC.adjust(DateTime(__DATE__, __TIME__));

questa la considero una stringa? non penso che basti fare l' append dei dati che ricevo via IR?

cosa ne pensate?

Grazie

guarda nella libreria che tipo di dati riceve in ingresso, che libreria stai usando? ci sarà una pagina di spiegazione dei metodi in internet...

?R: libreria stai usando?

include "RTClib.h"

grazie per la risposta. Purtroppo non ho trovato nulla a riguardo circa RTC.adjust

prova questo:

RTC.adjust(DateTime (year, month, day, hour, min, sec));

Grazie! se questa è una stringa? Prima parte risolta... ma come la compongo dal telecomando?

llluca: Grazie! se questa è una stringa?

non è una stringa, sono 6 variabili tu imposti il valore di ciascuna di esse per settare la data e l'ora.. prova se funziona

llluca: Prima parte risolta... ma come la compongo dal telecomando?

beh prova prima di dire che è risolto, dando uno sguardo veloce alla libreria mi pareva che così potesse andare

per la composizione dal telecomando hai già provato la barte di capire che tasti sono premuti? -se si devi strutturare il codice in modo che l'arduino interpreti una sequenza di comandi -se no dai un'occhiata a questi progetti che usano la libreria IR Remote: http://www.instructables.com/id/Arduino-IR-Remote-receiver/ http://www.instructables.com/id/The-Easiest-Way-to-Use-Any-IR-Remote-with-Ardiuno/

per il telecomando non ci sono problemi, con una funzione leggo i codici e restituisco il numero corrispondente stampato sul telecomando ad es:

switch (results.value) { case 0xFF6897: numero = 0; break;

funzione restituisce return numero;

il difficile è come unire i numeri per comporre (year, month, day, hour, min, sec)); ecc.

Da telecomando puoi dare dei numeri ma il difficile è capire a cosa servono.

Come fai a variare l'ora con una sveglia? Schiacci una sequenza di tasti per andare in variazione minuti e poi aumenti/diminuisci i minuti. Poi schiacci una sequenza di tasti e vai in modifica ore. Anche li poi aumenti/diminuisci. Il tutto con un feedback all'utente. Non proprio una cosa semplice. Oppure hai un telecomando con non solo le cifre ma anche dei tasti con scritto delle funzioni specifiche? ore, minuti, giorno,mese,anno?

Come dai il feedback all'utente? Ha collegato un LCD?

nid69ita: Non proprio una cosa semplice.

effettivamente....?????? Si uso un lcd. Stavo anche pensando di inserire una specie di menu per variare ore, minuti, giorno,mese,anno

llluca: per il telecomando non ci sono problemi, con una funzione leggo i codici e restituisco il numero corrispondente stampato sul telecomando ad es:

switch (results.value) { case 0xFF6897: numero = 0; break;

funzione restituisce return numero;

il difficile è come unire i numeri per comporre (year, month, day, hour, min, sec)); ecc.

ma quello non è poi così difficile, alla fine sono delle variabili numeriche che tu imposti, il difficile è quello che dice @nid69ita se non hai un feedback dovresti crearti un codice del tipo premi il tasto menu e poi premi due numeri e così imposti il valore di sec poi con un altro tasto selezioni i min e gli dici altre due cifre, e così via... se invece hai un lcd puoi navigare in un menu usando i tasti volume + o - e programmi +/-... con un po' di fantasia fai tutto :)

?R: ma quello non è poi così difficile, alla fine sono delle variabili numeriche che tu imposti, il difficile è quello che dice @nid69ita

Suggeriscimi cortesemente come unire la sequenza di numeri per fare 16.05 io ho una funzione :

int numero = telecomando();

premesso che tu devi arrivare ad una cosa così:

unsigned int year=2013;
byte month=7;
byte day=5;
byte hour=16;
byte min=5;
byte sec=0;
RTC.adjust(DateTime (year, month, day, hour, min, sec));

in che modo vuoi procedere con il menu sul lcd o con la sequenza con il telecomando?

?R: in che modo vuoi procedere con il menu sul lcd o con la sequenza con il telecomando?

Il massimo sarebbe entrambe le cose, Un menu ma da telecomando :-)

Ideona :. .concat andrebbe bene ma se non sbaglio serve non per numeri ma per stinghe e successimvamente lo ritrasformo con atoi?

Dovresti guardare la libreria MENUWIZ. C'e' un thread nel forum che ne parla. Potresti pilotarla da telecomando, non credo sia difficile. Di base lavora con dei pulsanti, ma puoi usare una tua funzione che si sostituisce ai tasti. Dovresti avere dei tasti su telecomando che intendi come su, giu, destra, sinistra, okay, annulla (che non siano i numeri!!!)

llluca:

 RTC.adjust(DateTime(__DATE__, __TIME__));

DATE e TIME sono costanti predefinite che in fase di compilazione il compilatore sostituisce con l’attuale data e l’attuale orario del computer su cui stai facendo la compilazione.

visto che hai un telecomando con tastiera numerica

Usi il tasto PROG ( o altro ) per entrare in una routine di programmazione.
a questo punto concateni in una stringa i dati ricevuti
es. 2 0 1 3 0 7 0 5 etc

poi o controlli la lunghezza della stringa, se e’ completa o usi un’altro tasto ( puo’ essere sempre il PROG ) per uscire dalla routine di programmazione ed assegnare quel valore all’RTC

nid69ita: Potresti pilotarla da telecomando, non credo sia difficile.

Grazie ma non ne sarei in grado

brunello: na routine di programmazione. a questo punto concateni in una stringa i dati ricevuti es. 2 0 1 3 0 7 0 5 etc

Era quello che pensavo Grazie! peccato che devo convertire in String o almeno penso

llluca:

nid69ita: Potresti pilotarla da telecomando, non credo sia difficile.

Grazie ma non ne sarei in grado

Ma ti posso dare una mano. Però devi imparare un minimo ad usare quella libreria. C'e' anche un tutorial in italiano. Io l'ho già fatto.

Se per la libreria dichiari un oggetto chiamato "tree" tra le variabili globali (all'inizio prima della setup):

menwiz tree;

Nella setup inizializzi lcd e menu (16x2) e dichiari che l'input del menu arriva da telecomando:

lcd.begin(16,2);
tree.begin(&lcd,16,2); //declare lcd object and screen size to menwiz lib
tree.addUsrNav(&scanNavIR,6);     // from IR input for menu

E qui la routine per pilotare il menu. Logicamente i valori di tasti sono del mio telecomando (di tipo NEC)

int scanNavIR()
{ int ret=MW_BTNULL;
  if(irrecv.decode(&results))
  { Serial.println(results.value);
    if(results.decode_type==NEC)
    { RIPETI:
      switch(results.value)   // BLUESKY values
      { case 0xFFD02F: ret=MW_BTD; break;    // down
        case 0xFF48B7: ret=MW_BTU; break;     // up
        case 0xFF30CF: ret=MW_BTL; break;   // left
        case 0xFF10EF: ret=MW_BTR; break;   //right
        case 0xFFC837:
        case 0xFF50AF: ret=MW_BTC; break;    // ok
        case 0xFF40BF: ret=MW_BTE; break;   // esc
      } 
    }  
    irrecv.resume();
  }
  return ret;
}

leo72:

llluca: RTC.adjust(DateTime(__DATE__, __TIME__));

DATE e TIME sono costanti predefinite che in fase di compilazione il compilatore sostituisce con l'attuale data e l'attuale orario del computer su cui stai facendo la compilazione.

beh se Leo dice così ha ragione lui, non so come faccia a prendere l'ora dal computer ma mi fido :grin: anzi mi studio come fa a farlo perchè è interessante ;)

però penso che per modificare la data e l'ora una volta staccato dal computer la funzione che ti ho dato io vada bene, prova..

?R:

leo72:

llluca: RTC.adjust(DateTime(__DATE__, __TIME__));

DATE e TIME sono costanti predefinite che in fase di compilazione il compilatore sostituisce con l'attuale data e l'attuale orario del computer su cui stai facendo la compilazione.

beh se Leo dice così ha ragione lui, non so come faccia a prendere l'ora dal computer ma mi fido :grin: anzi mi studio come fa a farlo perchè è interessante ;)

però penso che per modificare la data e l'ora una volta staccato dal computer la funzione che ti ho dato io vada bene, prova..

Leggi bene, non vorrei avessi inteso male. Sono valori costanti. Data e ora del preciso momento in cui compili. Se compili alle 13:10:23 del 05/07/2013 il compilatore sostituisce DATE e TIME con questi valori costanti. Anche se resetti Arduino.