Official topic: multicotteri con arduino!

lesto:
scusami ma quà non sono d'accordo. Il vantaggio delle classi, è che oltre a contenere funzioni possono contenere anche valori

Voglio sperare che non stai cercando di spiegare a me cosa sono e a cosa servono le classi ? :slight_smile:

Così eviti tutta la storia della compilazione condizionale, anzi, se vuoi modificare un sensore, sai subito dove mettere le mani, anzichè impazzire in un pde chilometrico.

Ecco qui ti sfugge completamente il senso della compilazione condizionale, che tra parentesi si usa anche in C++.

ma io sono un fan della programmazione ad oggetti (anche se un poco rallentano il codice)

Un poco ?
Il peso, in termini di memoria usata, sia flash che ram, e di rallentamento velocità d'esecuzione è molto alto, sopratutto su una piccola MCU a 8 bit, e questo è uno dei motivi della lentezza di Wiring.
Per lavorare in modo efficiente, parliamo di software di sistema e controllo di processo, su una piccola MCU, ma anche su un super micro, il solo ed unico linguaggio, a parte l'assembly, è, e almeno per il momento rimane, il C ANSI, tutto il resto è fuffa :slight_smile:

già, l'ho notato, ma è quello che ho in casa. E fare un ordine apposta spendo più dispedizione che di sensore. Certo ci fosse qualcosa che trovi al supermarket...

Ovvio che non ha senso spendere 10 Euro di corriere per 15-20 Euro di merce, però alla prima occasione metti in conto la sostituzione del Nunchuk con un normale accelerometro.

una cosa che non ho ancora capito è perchè hanno riscritto il protocollo i2c usando direttamente i registri...che gli costava usare la wire.h?

Non ho ancora approfondito il discorso I2C del MultiWii, ma credo abbia riscritto le routine per renderle più efficienti ed evitare alcune condizioni di blocco che ci sono nelle wire.h

pensavo ad un atmega solo per il GPS... però devo ammettere che ancora non ho iniziato nemmeno a spulciare il protocollo e la sua "traduzione".

Il problema non è interpretare le sentenze NMEA, sono solo delle stringhe ASCII con un certo formato e i dati sono scritti in chiaro, ecco un esempio:

$GPRMC,151036.999,A,4536.81050,N,00857.63140,E,0.09,27.90,260308,,,A*5F

$GPRMC è l'identificatore della sentenza, ne esistono molti tipi diversi perché si usano anche per altra tipologia di strumenti.
151036.999 ora UTC (hhmmss.sss)
A stato: A = Active, valido; V = Void, nullo
4536.81050 latitudine (ddmm.mmmmm)
N N = nord; S = sud
00857.63140 Longitudine (dddmm.mmmmm)
E E = est; W = ovest
0.09 Velocità in nodi
27.90 Direzione di movimento in gradi reali
260308 Data (ddmmyy)
Variazione / Declinazione Magnetica in gradi ()
Versi della variazione / declinazione (
)
A Tipo di rilevazione: A = Autonomous
*5F Checksum

Alcuni campi possono non essere presenti, sono quelli vuoti tra le virgole, dipendono dalle caratteristiche tecniche del GPS, in pratica basta un parser per estrapolare in un vettore i dati reali che ci interessano.
Il vero problema è tutta la parte matematica necessaria per calcolare la distanza tra due coordinate GPS e che, per via della risoluzione richiesta, è obbligatorio l'uso della matematica a 64 bit.