Pages: 1 ... 10 11 [12] 13 14   Go Down
Author Topic: Arduo Memory Reminder Medicine  (Read 12723 times)
0 Members and 1 Guest are viewing this topic.
Torino (Italy)
Offline Offline
Sr. Member
****
Karma: 0
Posts: 264
Fare insegna a fare. To make teaches at to make.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley Ciao tuxduino,

sicuramente sarà parte integrante, ma mi piacerebbe pensare anche che il device possa funzionare senza l'RTC, in maniera da poter provare il progetto anche senza, e non essere vincolati per forza di cose ad un qualcosa di esterno, riprendendo l'idea di poter utilizzare meno materiale possibile per la realizzazione del progetto stesso.

Questa versione sarà la versione base definitiva, per chi volesse cimentarsi nella realizzazione senza dover acquistare materiale aggiuntivo.

Da qui in poi, ci si dovrà sbizzarrire per le varie implementazioni di qualsisasi tipo, sia SW che HD.

Se ti torna in mente quale è la variabile di stato della funzione setSyncProvider() fammi un fischio, anche perchè in tal caso, si dovrebbe eliminare la funzione della correzione automatica del tempo giornaliera, nel caso sia presente l'RTC.

Penso comunque che per questo fine settimana si possa rincominciare a definire i nuovi upgrade da portare al progetto.

La versione funzionante (R1.0c) che posterò a momenti nel sito del FABLAB e qui sotto, avrà come base la R05i modificata da te, con la sistemazione di tutti i pin, HD e SW, l'integrazione della eprom esterna, con le funzioni di test R/W e l'inserimento dei tasti PGM ed ESC.

Se riesci provala con l'RTC, visto che ho aggiunto la eprom esterna che usa lo stesso bus I2C, anche perchè finalmente mi arriva questa settimana la shield RTC completa. (i tasti di test utilizzati per il test di R/W della eprom esterna sono UP e DW, dove UP scriverà sul monitor seriale il valore letto dal registro 0 della eprom, mentre DW lo incrementerà di un carattere e lo scriverò sempre sul registro 0).

Ho notato che l'ora viene verificata dell'RTC ogni 5 minuti. Questo valore si può cambiare?

PS.: Per i valori di set della tastiera analogica, trovi al fondo del listato una void chiamata "void inputbuttons()" dove basta inserire i valori della tua tastiera per poterla far funzionare. I tasti attivi saranno UP,DW,ENT,ESC,PGM.

 smiley-wink Ciao.

* A_M_R_1_0_0c.zip (9 KB - downloaded 7 times.)
« Last Edit: December 19, 2012, 10:41:42 am by Giuseppe G. » Logged

Un saluto a tutta la comunità.
Giuseppe G.

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

L'ho trovata nel codice di esempio allegato alla libreria Time.

copio-incollo un frammento di setup():

Code:
  setSyncProvider(RTC.get);   // the function to get the time from the RTC
  if(timeStatus()!= timeSet)
     Serial.println("Unable to sync with the RTC");
  else
     Serial.println("RTC has set the system time");     
Logged

Torino (Italy)
Offline Offline
Sr. Member
****
Karma: 0
Posts: 264
Fare insegna a fare. To make teaches at to make.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley Bene!
Questa serve per vedere se l'RTC funziona o è presente. Per disattivare l'aggiornamento automatico che ho verificato avviene ogni 5 minuti?

Forse, sarebbe bene non attivarlo proprio, semplicemente escludendo i comandi relativi all'RTC, nel caso non sia presente fisicamente, nel momento della compilazione del codice, qualora si voglia testare il progetto senza l'RTC.

OK.  smiley-roll

In ogni caso, questa istruzione, si può utilizzare per fare visualizzare il messaggio di "guasto RTC time" e per disattivare l'ADJ orario giornaliero se presente l'hardware RTC.

Provvedo a generare la funzione di messaggistica, che potrebbe tornare utile per visualizzare eventuali segnalazioni e report delle assunzioni dei medicinali, nel caso si utilizzi una eprom esterna, dove andare a scaricare le operazioni.

Grazie.
Ciao.
 smiley-grin
Logged

Un saluto a tutta la comunità.
Giuseppe G.

Torino (Italy)
Offline Offline
Sr. Member
****
Karma: 0
Posts: 264
Fare insegna a fare. To make teaches at to make.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-cry
Credo che
Quote

 setSyncProvider(RTC.get);
  if(timeStatus()!= timeSet) {
  Serial.println("Unable to sync with the RTC");
    } else {
  Serial.println("RTC has set the system time");
  }

usata subito dopo l'upgrade della data ed ora, non sia corretto.

Probabilmente questa istruzione serve a verificare solo se i tempi sono allineati, per eseguire poi un allinenamento.
Usata così che ci sia o meno l'RTC, il risultato è sempre ("RTC has set the system time"), proprio perchè il tempo RTC = 00.00 e quello impostato in arduiono è stato appena aggiornato a 00.00

Mi sa che non è questa la soluzione per verificare la presenza dell' RTC.  smiley-kiss
Logged

Un saluto a tutta la comunità.
Giuseppe G.

Tuscany
Offline Offline
Edison Member
*
Karma: 37
Posts: 1478
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Code:
  Wire.beginTransmission(0x68);   // Open I2C line in write mode (0x68 DS1307 )
  Wire.write((byte)0x00);       // Set the register pointer to (0x00)
  Wire.endTransmission();       // End Write Transmission
  Wire.requestFrom(0x68, 1);      // Open the I2C line in send mode
  if (  Wire.read() & 0x80 ) {
    Serial.println ("RTC malfunzionante ");
  }
  Serial.println("RTC presente");
Logged

Torino (Italy)
Offline Offline
Sr. Member
****
Karma: 0
Posts: 264
Fare insegna a fare. To make teaches at to make.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-roll-sweat
Ciao brunello,

ma dove vado ad inserire la parte di skethc?

Inserendola prima del setup mi dà errore in compilazione ("expected constructor, destructor, or type conversion before '.' token")

Inserendola nel setup mi dà errore in compilazione ('class TwoWire' has no member named 'write') e ('class TwoWire' has no member named 'read').

?????

Hai qualche dritta in più, perfavore?  smiley-cry

Grazie.
Logged

Un saluto a tutta la comunità.
Giuseppe G.

Tuscany
Offline Offline
Edison Member
*
Karma: 37
Posts: 1478
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nel setup()

Uhmmm.. usi un ide anzianotto

c'e' da rinominare wire.write in wire.send
e wire.read in wire.receive

Logged

Torino (Italy)
Offline Offline
Sr. Member
****
Karma: 0
Posts: 264
Fare insegna a fare. To make teaches at to make.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-sweat

ok! errori risolti .

Ma dà comunque sempre RTC presente !!!!!

WHI ? smiley-eek
Logged

Un saluto a tutta la comunità.
Giuseppe G.

Tuscany
Offline Offline
Edison Member
*
Karma: 37
Posts: 1478
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ti da' tutti e due i messaggi ?
Logged

Torino (Italy)
Offline Offline
Sr. Member
****
Karma: 0
Posts: 264
Fare insegna a fare. To make teaches at to make.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-sweat

ok. "RTC presente" lo darebbe comunque sempre, ma comunque non mi visualizza "RTC malfunzionante" pur non essendo presente?  smiley-fat
Logged

Un saluto a tutta la comunità.
Giuseppe G.

Tuscany
Offline Offline
Edison Member
*
Karma: 37
Posts: 1478
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Strano.
si controlla se il bit 7 del registro RTC e' a Zero  ( 0=running 1=stop ).. in pratica si guarda se l'RTC e' attivo.
Leggendo su un registro che non esiste dovrebbe darti 255.... quindi come se fosse fermo ( o non presente )
Logged

Tuscany
Offline Offline
Edison Member
*
Karma: 37
Posts: 1478
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

un metodo sicuro e' quello di usare la ram interna all'RTC
Ci scrivi un valore e poi leggi se e' presente.

Logged

Torino (Italy)
Offline Offline
Sr. Member
****
Karma: 0
Posts: 264
Fare insegna a fare. To make teaches at to make.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-roll
oppure usare questo
Quote
Wire.beginTransmission(0x68);   // Open I2C line in write mode (0x68 DS1307 )
  Wire.send((byte)0x00);       // Set the register pointer to (0x00)
  Wire.endTransmission();       // End Write Transmission
  Wire.requestFrom(0x68, 1);      // Open the I2C line in send mode
 
  if (Wire.available()) {
    Serial.println("RTC presente");
  }

ma non posso provarlo, perchè non ho ancora l'RTC, e neppure la soluzione di scrivere e poi leggere una memoria interna dell'RTC.
Logged

Un saluto a tutta la comunità.
Giuseppe G.

Torino (Italy)
Offline Offline
Sr. Member
****
Karma: 0
Posts: 264
Fare insegna a fare. To make teaches at to make.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-razz
al momento uso questo codice, anche se è un modo per raggirare il problema
Quote
 
setSyncProvider(RTC.get);

  if (hour() == 00 && minute() == 00 && second() == 00){
  Serial.println("RTC non presente");
  } else {
  Serial.println("RTC presente");
  }

smiley-draw

Se vengono fuori altre soluzioni, ben accette.
Logged

Un saluto a tutta la comunità.
Giuseppe G.

Tuscany
Offline Offline
Edison Member
*
Karma: 37
Posts: 1478
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

cosi' scrivi sulla ram interna e verifichi la presenza del dato

Code:
Wire.beginTransmission(0x68);   // Open I2C line in write mode (0x68 DS1307 )
  Wire.write((byte)0x08);       // Set the register pointer to (0x08) internal RAM
  Wire.write((byte)0x09);       // valore da scrivere
  Wire.endTransmission();       // End Write Transmission
 
  Wire.beginTransmission(0x68);
  Wire.write((byte)0x08);
  Wire.endTransmission();
  Wire.requestFrom(0x68, 1);      // Open the I2C line in send mode
  if  ( Wire.read() != 9 ) {
    Serial.println ("RTC mancante");
 }
Logged

Pages: 1 ... 10 11 [12] 13 14   Go Up
Jump to: