diff --git a/main.py b/main.py index e3ed536..471f13b 100644 --- a/main.py +++ b/main.py @@ -79,7 +79,7 @@ class FlockompassApp(App): self.fbearing = atan2(sin(lon2 - lon1) * cos(lat2), cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(lon2-lon1)) - self.fbearing = self.needle_angle + degrees(self.fbearing) + self.fbearing = self.needle_angle - degrees(self.fbearing) self.fbearing = (self.fbearing + 360) % 360 def center_map_on_gps(self): @@ -94,11 +94,14 @@ class FlockompassApp(App): needle_angle = 0 if self.cs.facade.field != (None, None, None): - self.x_calib, self.y_calib, self.z_calib = self.cs.facade.field x, y, z = self.cs.facade.field + + smoothingFactor = 0.9 + angle = atan2(y, x) + self.last_angle = smoothingFactor * self.last_angle + (1 - smoothingFactor) * angle - needle_angle = Vector(x, y).angle((0, 1)) + 90. - + needle_angle = degrees(self.last_angle) + # fix animation transition around the unit circle if (self.needle_angle % 360) - needle_angle > 180: needle_angle += 360 @@ -112,7 +115,7 @@ class FlockompassApp(App): self.cs._anim.stop(self) self.cs._anim = Animation(needle_angle=needle_angle, d=0.1, - t='out_elastic') + t='out_quad') self.cs._anim.start(self) def compass_enable(self): @@ -160,7 +163,10 @@ class FlockompassApp(App): self.cs.p = None screen_manager.add_widget(self.cs) - Clock.schedule_interval(self.dump, 2.0) + # smoothing vars for compass + self.last_angle = 0 + + #Clock.schedule_interval(self.dump, 2.0) return screen_manager