Coordinate con magnetometro

Scusa, Guglielmo... Forse la spiegazione è solo "hanno fatto così...", ma perché non si attiva automaticamente quando viene trovato un float in sprintf, così come delle librerie vengono caricate solo le funzioni che vengono usate?

Uhmm...
https://cplusplus.com/reference/cstdio/vfprintf/

Anche se non è propriamente riferito ad Arduino ed io lavoravo in VB vari anni fa (ora uso C#), posta qui (o con messaggio personale se vuoi) la parte di codice che in VB gestisce i dati inviati da Arduino via seriale e provo a darti una mano.

No, la spiegazione è che, dato che si mangia comunque 1.5K di memoria, su una MCU che è già povera di memoria, hanno preferito risparmiare e rendere opzionale la cosa ... :roll_eyes:

Guglielmo

Vuoi dire che impediscono di usarla per spingere a risolvere il problema in maniera più efficiente?

Voglio dire che su MCU piccole come l'ATmega328P ... già i float sono una forzatura (tanto è vero che i double neanche sono implementati), mettici pure la sprintf() ... :roll_eyes:

Non vi volete mettere in testa che i vecchi AVR sono delle minuscole MCU che andrebbero usate per semplici controlli industriali ... non per chissà che cosa ...

Se vi serve velocità, precisione, e quant'altro, oggi ci sono schede Arduino ben più potenti e complesse della vecchia UNO R3 ... cominciate a studiare quelle ...

Guglielmo

1 Like

Mi pare corretto, ora sta alla parte VB interpretarlo correttamente...

Ok, a parte l orologio che impazzisce, non so perché i secondi aumentano di 10 in 10, anziché come un regolare orologio, che poi mi serve modificare data e ora utilizzo i button collegati ai pin 6 e 7.

Posta il tuo codice aggiornato che fa questa cosa, e vediamo.

Lo posterò stasera quando arrivo a casa, una piccola domanda, può essere per caso una questione di collegamenti? Perché io ho collegato sia l RTC che il magnetometro entrambi slc e sda su A5 E A4.

Sono tutti I2C (non solo RTC e magnetometro, ma hai anche l'LCD) e se hanno indirizzi diversi non dovrebbero dare problemi se non per cablaggio (i cavi sono buoni, non troppo lunghi, e ben collegati?) e/o di resistenze pullup mancanti (ma non ho mai avuto progetti con tutti questi device I2C quindi non so dirti).
Se ci sono problemi o sospetti per la parte "hardware", meglio sempre postare anche uno schema (se ti è possibile magari fatto con Wokwi o tinkercad) dei collegamenti.

Contrordine, ho trovato.
Tu hai definito la variabile buffer "str" così:

char str[3];

Questa stringa potrà contenere al massimo 2 caratteri (più il terminatore 0x0). Dato che la stiamo usando per comporre data ed ora:

    lcd.setCursor(4, 1);
    sprintf(str, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
    lcd.print(str);
    lcd.setCursor(3, 0);
    sprintf(str, "%02d/%02d/%02d", now.day(), now.month(), now.year());
    lcd.print(str);

questa stringa è lunga 8 caratteri, più terminatore 0x0 sono 9 in totale. Quindi devi dimensionarla diciamo almeno a 10 (o qualcosina in più se vorrai usarla anche per altro, in genere meglio abbondare):

char str[10];

grazie mille, stasera proverò il tutto, cmq sono tutti I2c e l RTC è collegato al display lcd in seguenza, ho fatto anche uno schema con fritzing, che posterò anch'esso questa sera. Piccola domanda visto che non so quanta portata hanno, è possibile mettere arduino nel bagagliaio insieme al pc e portare i rispettivi cavi al cruscotto, dove ci saranno il monitor, il potenziometro, il display lcd o rischio che i cavi sono troppo lunghi e mi conviene portare solo il cavo usb dietro per la connessione seriale?

I2C, IIC: Inter Integrated Circuit. E' un bus fatto per far comunicare circuiti integrati su una scheda, quindi entro 10...20cm!

Meglio collegare tutto ad Arduino, perché se hai un cavetto di 20 cm da Arduino all'RTC ed altri 20 al display, arrivi a 40 cm e non è consigliabile.

Bene! Ma se possibile ti consiglierei di fare lo schema con Wokwi perché così oltre a condividerlo qui puoi anche "provare" alcune cose (tranne il magnetometro perché non mi pare che ci sia) ed anche parte del codice.

per quanto riguarda l rtc non ci sono problemi, perchè cmq è saldato al display, mentre x arduino cercherò di metterlo il più vicino possibile.

questo è il link dei collegamneti

mancherebbe il magnetometro ma come ha detto DocDoc non c'è, ma semplicemente si collega con vcc al 3 volt, gnd al gnd, SDA al A4 e scl ad A5.
allego anche lo schema con fritzing x sicurezza

Come dialoga sto magnetrometro?
Quanti parametri cambiano?
Pensi sia fattibile con con le api chip custom di wokwi?

Ho cercato "wokwi HMC5883" e non ho trovato nulla di utile.

Ciao.

Beh se serve per lo schema (non per simulare anche tutto il codice quindi, purtroppo non l'ho ancora trovato un accelerometro da mettere su Wokwi) puoi metterci un altro I2C ad esempio un accelerometro. ma poi non hai anche un LED e due relè?...

E comunque parlando di Wokwi, che se ti serve solo per lo schema è per me più facile da usare rispetto a Fritzing (ma ti consente pure di provare il codice), quando fai uno schema cerca di non sovrapporre i fili (tantomeno farli passare "sopra" ad Arduino) tranne quelli "ottimizzabili" ad esempio 5V e GND, ma in questo caso anche SDA e SCL. Vedi questa versione quanto è più semplice e leggibile (e completa):

Se vuoi lo trovi qui:

Penso di si ma mi spiace, non ho idea come farlo, anche perché non l'ho mai usato...

perfetto

Qui c'è un abbozzo messo in fretta:

Dalla lib si vede che begin() restituisce incondizionatamente true.

Ciao.