Con file2.print(stampaora()); stampi il risultato della funzione sul file. Visto che la funzione non ha un valore di ritorno Ti da il messaggio e non mette niente nel file.
Scriviti un altra funzione simile alla stampaora() che al posto del serial.print ha file2.print
Come detto da @Uwe la strada più semplice è fare 2 funzioni stampaora (con due nomi diversi), uno che stampa su Serial e uno su file2.
CI sono altri 2 modi per fare una “funzione unica” ma sono complessi.
Non ho visto una tua presentazione, quindi non sò se sei un programmatore esperto.
Io li indico, tanto per informazione, ma se non conosci bene la programmazione C/C++ probabilmente faticherai a capire.
In questo caso non tenerne conto. Non è importante conoscere queste parti.
invece di fare 2 funzioni fai una funzione a cui passi un puntatore generico. Quando stampi su Serial passi il puntatore a Serial altrimenti il puntatore a file2. Nella funzione sfrutto il fatto che le classi File (per file2) ed HardwareSerial (per Serial) derivano da Stream:
void stampa(void *px){
int hh=10,mm=23;
Stream * p=(Stream*)px;
p->print("L'orario UTC e' ");
p->print(hh); //stampa l'ora
p->print(':');
if (mm<10) p->print('0');
p->print(mm); // stampa minuti
}
void setup()
{ ...
stampa(&Serial); // stampa su Serial
stampa(&file2); // stampa nel file2
}
Non ho una SD in ufficio perciò ho solo compilato ma non testato la cosa su file (su Serial si provato e funziona). Usato IDE 1.0.5
si crea una piccola classe che conterrà hh,mm,ss ma questa classe deriva da Printable e dichiara la funzione printTo() e dentro a questa printTo() si fa la stampa.
Da codice potrai fare una cosa del genere:
void loop()
{ ...
myStampa x (hour(),minute(),second());
Serial.print(x);
file2.print(x);
...
}
class myStampa : public Printable
{ private:
int _hh,_mm,_ss;
public:
myStampa(int hh,int mm,int ss) {_hh=hh; _mm=mm; _ss=ss; };
virtual size_t printTo(Print& p) const;
};
size_t myStampa::printTo(Print& p) const
{ size_t n = 0;
n=n+ p.print("L'orario UTC e' ");
n=n+ p.print(_hh,DEC);
n=n+ p.print(':');
if (_mm<10) n=n+ p.print('0');
n=n+ p.print(_mm); // stampa minuti
return n;
}
Sia Serial che File sono classi che derivano da Stream e Print (a loro volta conoscono la classe Printable)
Non credo, l'oggetto Serial è di classe HardwareSerial, che deriva da Stream non da fstream.
fstream è tipicamente usata su PC, su Arduino non mi risulta usata tranne che da classe SdFat che non è quella ufficiale.