Hallo Thomas,
Das liegt am verwendeten Variablen Typ in der I2C_GPS_NAV.ino:
uint16_t distance_to_home; // distance to home in cm
Da ich mal davon ausgehe, das du im Programmieren wenig Erfahrung hast, hole ich wein wenig weiter aus.
Die Variable hat den Namem distance_to_home bekommen.
Es handelt ist hier um eine ganzahlige Integer Variable INT, das heist keine Kommastellen, z.b. -801, 0, 1, 66, 4000
Das U steht für unsigned, also kein Vorzeichen. Die kleinste Zahl ist damit 0.
Die 16 sagt, das es die Variable 16bit groß ist. Damit lassen sich 2^16=65536 Zahlen darstellen.
Es können also alle Zahlen von 0 bis 65535 in dieser Variable gespeichert werden. Achtung, die Null ist auch eine der 65536 Möglichkeiten, daher ist die größte Zahl 65536-1=65535. (Ohne das U wäre es −32.768 bis 32.767)
Die maximale Entfernung wäre damit 65535cm=655,35m
Jetzt zum Overflow:
Stell dir vor dein Copter ist genau 655,35m entfernt.
Die Variable distance_to_home ist also 65535. So was passiert wenn du 1cm weiter fliegst?
Dann ist distance_to_home wieder null. Um das besser zu verstehen zeige ich dir das mal Binär (also nur 0 und 1 sind möglich). Es sind 16 Bits (=2 Byte) in der Tabelle abgebildet. Die ersten 5 Zeilen (0 bis 4) zeigen dir wie das mit dem Heraufzählen geht, damit du verstehst was bei 65535+1 passiert. Da für die rote EINS kein Speicherplatz da ist, kennt die Variable sie nicht, es ist also alles wieder auf Null (sie ist hier nur zum Verständniss angegeben).
[TABLE="width: 250, align: left"]
[TR]
[TD]Dezimal[/TD]
[TD]Binär[/TD]
[/TR]
[TR]
[TD]0[/TD]
[TD]0000.0000 0000.0000[/TD]
[/TR]
[TR]
[TD]1[/TD]
[TD]0000.0000 0000.0001[/TD]
[/TR]
[TR]
[TD]2[/TD]
[TD]0000.0000 0000.0010[/TD]
[/TR]
[TR]
[TD]3[/TD]
[TD]0000.0000 0000.0011[/TD]
[/TR]
[TR]
[TD]4[/TD]
[TD]0000.0000 0000.0100[/TD]
[/TR]
[TR]
[TD]65534[/TD]
[TD]1111.1111 1111.1110[/TD]
[/TR]
[TR]
[TD]65535[/TD]
[TD]1111.1111 1111.1111[/TD]
[/TR]
[TR]
[TD]65536[/TD]
[TD]1 0000.0000 0000.0000[/TD]
[/TR]
[TR]
[TD]65537[/TD]
[TD]1 0000.0000 0000.0001[/TD]
[/TR]
[/TABLE]
Man hat diese Entfernung angenommen, da man sich dachte, das du dein Modell nie soweit fliegen lassen wirst, da du es nicht mehr sehen kannst... Das war wohl "zu Kurz" gedacht.
So, ich hoffe das ich niemanden mit dem Ausflug in die Basics gelangweilt habe.