Pages: 1 ... 65 66 [67] 68 69 ... 72   Go Down
Author Topic: swRTC  (Read 70205 times)
0 Members and 1 Guest are viewing this topic.
Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley
smiley-wink
Logged


Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley http://arduino.cc/en/Tutorial/BlinkWithoutDelay

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

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...
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Genova
Offline Offline
Faraday Member
**
Karma: 37
Posts: 3233
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
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-twist
l'argomento era se fare + o -.
Date a lui il premio nobel per la pignoleria  smiley-grin smiley-grin smiley-grin

ciao


Logged

no comment

Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Mah...

Il problema è legato al rollover di millis().

Qui http://www.utopiamechanicus.com/article/handling-arduino-microsecond-overflow/ il primo link che ho trovato. Non è uno dei migliori, ma sono di fretta...
Logged

Genova
Offline Offline
Faraday Member
**
Karma: 37
Posts: 3233
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

ahahaha .... massiii dai smiley

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

ciao
Logged

no comment

0
Offline Offline
Faraday Member
**
Karma: 45
Posts: 5783
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
Code:
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
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Fa uso dell'hardware?  smiley-sweat
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ì:
Code:
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
Logged


0
Offline Offline
Faraday Member
**
Karma: 45
Posts: 5783
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

0
Offline Offline
Faraday Member
**
Karma: 45
Posts: 5783
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Code:
Stampa = Orario + "    " + rtc.getDay() + '/' + ....ecc.ecc.ecc

Questo va bene
Code:
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
« Last Edit: January 06, 2013, 06:49:02 am by Testato » Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ( smiley-razz)
Logged


0
Offline Offline
Faraday Member
**
Karma: 45
Posts: 5783
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Puoi passarmi lo sketch che usavi?
Logged


Genova
Offline Offline
Faraday Member
**
Karma: 37
Posts: 3233
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

C'è qualcosa che non quadra nella swRTC,  oggi mi dice che è lunedì 14

Prendiamo un epoch di oggi 13/01/2013: 1358093934    

il convertitore online mi restituisce
1358093934    [batch convert timestamps to human dates]
GMT: Sun, 13 Jan 2013 16:18:54 GMT
Your time zone: domenica 13 gennaio 2013 17:18:54 GMT+1

la libreria mi restituisce
passando il valore di epoch 1358093934  
gg della settimana = 1    14/1/2013 16:19   <<<<<< errato

---------------------------------------------------------------------

Prendiamo un epoch del 25/12/2012: 1356453600

il convertitore online mi restituisce
1356453600 [batch convert timestamps to human dates]
GMT: Tue, 25 Dec 2012 16:40:00 GMT
Your time zone: martedì 25 dicembre 2012 17:40:00 GMT+1

la libreria mi restituisce
passando il valore di epoch 1356453600
gg della settimana = 2  25/12/2012 16:40   <<<<<< esatto

nel 2014 è ancora errato
nel 2015 è ancora errato
nel 2016 la librirea tornerà ad essere corretta smiley smiley

ciao
« Last Edit: January 13, 2013, 12:09:31 pm by pablos » Logged

no comment

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma che servizio di conversione online hai usato? Alcuni sono sballati e danno risultati errati.
Questo qui:
http://www.onlineconversion.com/unix_time.htm
avevo visto che era corretto nei risultati.
Mettendo 1358093934 come timestamp ottengo:
Sun, 13 Jan 2013 16:18:54 GMT
Logged


Pages: 1 ... 65 66 [67] 68 69 ... 72   Go Up
Jump to: