swRTC

Testato:
pablos accomodati pure, ma ritengo non sia giusto riceverla.
credo siamo sulla stessa barca, anche io come te, ho avuto il terrore dell'overflow del millis, ora scopro che il problema non c'e', basta usare bene la formula.
Ti assicuro che in questi termini non si era mai espresso nessuno, infiniti commenti ci sono sul forum sul terrore millis, e lo stesso Leo ci ha scritto fiumi prima di arrivare alla soluzione definitiva.
Sottolineare che il problema non esiste credo sia cosa buona e giusta per il mondo intero :slight_smile: e Leo deve ricevere un premio nobel :slight_smile:

:slight_smile:

accomodati pure, ma ritengo non sia giusto riceverla.

Ueee guarda che scherzavo :smiley:

:slight_smile:

uhh nessuna citazione? =(

lesto:
uhh nessuna citazione? =(

Vero vero...
La seconda soluzione me l'hai suggerita tu. Anzi, per dirla tutta, mi ha fatto presente tu via PM che si poteva evitare il casting perché usando l'ordine delle operazioni ed il secondo metodo di confronto, che poi è risultato essere quello del BlinkWithoutDelay, il problema non si poneva.

Il premio nobel non si puo' dividere in due, quindi uno ciascuno.
Leo pero' ora devi mettere ufficialmente la citazione sul tuo Blog, e' il minimo :slight_smile:

Testato:
Il premio nobel non si puo' dividere in due, quindi uno ciascuno.

veramente il massimo sono due persone. Per esempio i coniugi Cuirie hanno fatto a metà con un altro tizio (per un'altra ricerca), mi pare fosse quello in fisica.. ora cerco altre info (quindi 50% Curie e 50% altro tizio, perchè il premio va alla ricerca, non alle persone)

ecco il link: http://www.nobelprize.org/nobel_prizes/physics/laureates/1903/index.html
Antoine Henri Becquerel "in recognition of the extraordinary services he has rendered by his discovery of spontaneous radioactivity" (scoperta della radioattività spontanea)

Pierre Curie and Marie Curie, née Sklodowska "in recognition of the extraordinary services they have rendered by their joint researches on the radiation phenomena discovered by Professor Henri Becquerel" in pratica se ricordo bene Antonie aveva trovato la teoria, i Cuirie invece l'hanno messa in pratica, bombardando di elettroni l'argento(o l'alluminio). Nello stesso periodo Fermi in Italia, scoperto questo fatto, usò del Bario e del Radon creando una sorgente di bombardamento di Neutroni, e quindi molto più efficaci non essendo rallentati o disturbati dai campi elettrici del nucleo.
L'inizio dell'era atomica. C'è una biografia carina di Pierre de Latil su Fermi, interessante come la scienza si mischi con la politica del periodo, e di come sia stato portato avanti il progetto Manhattan.

Testato:
Il premio nobel non si puo' dividere in due, quindi uno ciascuno.
Leo pero' ora devi mettere ufficialmente la citazione sul tuo Blog, e' il minimo :slight_smile:

:wink:

pablos:

Testato:
Scusa Leo, ma vista la grandezza della notizia, hai aperto un topic tipo "il problema millis non esiste ?"

Prima l'overflow fa schiantare il micro, poi, no quando arriva a termine riparte da 0, poi si riparte da 0 senza schiantare niente, ma i risultati ottenuti saranno falsi, ora mi dici che il problema millis non è mai esistito ahahahahhaha sta storia è peggio dei maya.

anche qui il tutorial mostra la stessa formula l'abbiamo sempre avuta sotto il naso :slight_smile: http://arduino.cc/en/Tutorial/BlinkWithoutDelay

EDIT: Testato .... ti posso dare una testata? :smiley:

Il tutorial che hai linkato è errato. previousMillis deve essere dichiarata unsigned long.

Il compilatore dovrebbe emettere una warning a proposito di signed vs. unsigned comparison...

tuxduino:
Il tutorial che hai linkato è errato. previousMillis deve essere dichiarata unsigned long.
Il compilatore dovrebbe emettere una warning a proposito di signed vs. unsigned comparison...

Viene fatto il casting a signed long.

Il tutorial che hai linkato è errato. previousMillis deve essere dichiarata unsigned long.

ehhh dai mettici un unsigned long previousMillis = 0; se ti fa piacere ]:smiley:
l'argomento era se fare + o -.
Date a lui il premio nobel per la pignoleria :smiley: :smiley: :smiley:

ciao

Massì, signed, unsigned, chissenefrega... tanto finché il programma funziona...

Mah...

Il problema è legato al rollover di millis().

Qui How To Handle Microsecond Rollover With Arduino’s micros() Function | Utopia Mechanicus il primo link che ho trovato. Non è uno dei migliori, ma sono di fretta...

Massì, signed, unsigned, chissenefrega... tanto finché il programma funziona...

ahahaha .... massiii dai :slight_smile:

Strano che non sia intervenuto Uwe a mettere giù punti e virgole a tutti noi dettagliando qualche formula scientifica delle sue :stuck_out_tongue_closed_eyes:

ciao

Leo ci ho rpovato, davvero ci ho rpovato, ma ora e' tardi e chiedo aiuto.
Credevo fosse una cosa banale invece non lo e', almeno per me.
Ricordi l'esempio che hai aggiunto nella swRTC che stampa sulla seriale l'orario con gli Zeri ?

Volevo modificarlo in modo da dirottare l'orario con gli zeri non verso la seriale, ma verso una Stringa, tipo:

String Orario = questobenedettoorologioconglizeri;

Ho speso un po' di tempo a capire la tua formula per inserire gli zeri, credo di averla capita, ma fa uso fortemente dell'hardware, cioe' stampi sulla seriale un carattere per volta e poi vai avanti con i calcoli, aggiungi i due punti :, ecc.
Ma fare le stesse cose tenendo come serbatoio una variabile mi e' oscuro, dove e' il trucco ?

Grazie

Fa uso dell'hardware? :sweat_smile:
E' una semplice formula che controlla se il numero è più grande di 9, in caso affermativo aggiunge uno "0".
Con un oggetto string la cosa è ancora più semplice perché gli string possono essere concatenati per cui al posto di Serial.print fai un semplice "+". Esempio: Orario += "0"

Una cosa così:

String Orario;

void setup() {....}
void loop() {
  Orario = "";
  printTime(WITHOUT_SECONDS);
}

void printTime(byte withSeconds) {
    sendNumber(rtc.getHours());
    Orario += ":";
    sendNumber(rtc.getMinutes());
    if (withSeconds) {
        Serial.print(":");
        sendNumber(rtc.getSeconds());
    }
}


void sendNumber(byte number) {
    byte temp; Serial.prin
    if (number>9) {
        temp=int(number/10);
        Orario +=(char(temp+48));
        number-=(temp*10);
    } else {
        Orario += "0";
    }
    Orario += (char(number+48));
}

Non so se funziona, l'ho scritto al volo

uso dell'hw nel senso che si appoggia alla memoria della seriale, intesa come hw, cioe' vai a scrivere il primo numero, poi vai a scrivere il secondo, poi vai a scrivere i due punti. usando sempre gli stessi comandi.
Avevo pensato alla concatenazione, ma cosi' a naso credevo non funzionasse. Ti fo sapere se va.
Grazie mille :slight_smile:

Funziona, e mi sono spiegato anche perche' ero fuori strada.
ho trovato un comportamento strano, forse dovuto alla 1.5 che uso ?
Alla stringa Orario, oltre all'ora, concatenavo anche degli spazi " ", delle barre '/' altri valori, ecc

ebbene usando due concatenazioni a seguire, con la prima inserisco solo l'orario con gli zeri, e poi nel rigo sotto inserisco le altre cose va.
se invece lascio tutto su un solo rigo si blocca il micro:
Questo si blocca

Stampa = Orario + "    " + rtc.getDay() + '/' + ....ecc.ecc.ecc

Questo va bene

Stampa = Orario;
Stampa += "    " + rtc.getDay() + '/' + ....ecc.ecc.ecc

Va bene cosi', i Bug sono brutta bestia, sono conctento che non ero io completamente rincoglionito perche' la concatenazione l'avevo provata e poi abbandonata subito visto il blocco del micro

Forse sarebbe il caso di segnalare il problema nel forum internazionale.
Io personalmente la 1.5.x ancora non la adopero per sviluppare per Arduino UNO ed altri micro. Mi tengo la 1.0.4 ( :P)

onestamente non sono convinto del bug, tu dici che e' bug ? sai cosa pensavo ? Che Orario e' gia' di per se una concatenazione perche' viene creato pezzo per pezzo per aggiungere gli zeri. Non e' che si crea qualche conflitto visto che non uso delay, e quindi con millis avevo pensato che In un determinato momento Orario non era disponibile a concatenazione da due lati ?
Separando su due righe le due concatenazioni mi assicuro che Orario viene concatenato e conluso, e solo dopo gli si aggiunge altro. Che ne pensi ?

No, non è possibile. Non può esserci un'istruzione "troppo veloce" da eseguire. Ogni istruzione viene eseguita solo dopo la precedente. :wink:

Puoi passarmi lo sketch che usavi?