From 5d61a92fce1bdd1e9e1f60c4b025d0b9fcd1870f Mon Sep 17 00:00:00 2001 From: Langspielplatte Date: Fri, 11 Sep 2020 11:08:38 +0200 Subject: [PATCH] Wii Remote basis Steuerung --- Versuch 3/iot_car.py | 44 +++++++++++++++++++++++++++++++++++- Versuch 3/keyikt_main.py | 4 ++-- Versuch 3/wiikt_main.py | 48 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+), 3 deletions(-) diff --git a/Versuch 3/iot_car.py b/Versuch 3/iot_car.py index b15f903..8a41797 100644 --- a/Versuch 3/iot_car.py +++ b/Versuch 3/iot_car.py @@ -27,6 +27,7 @@ class Iot_car(): speed_cur = 0 speed_last = 0 angle_cur = 0 + speed_cruise_control = 0 # m/s but only positive motor = None streeting = None @@ -37,7 +38,8 @@ class Iot_car(): import servo_ctrl self.motor = Motor(1) self.streeting = Steering(2) - + + # for keyboard control def __testmode_accelerate(self): calc_acc = calculate_acceleration(self.speed_cur, self.acc) self.speed_last = self.speed_cur @@ -67,6 +69,45 @@ class Iot_car(): else: self.__accelerate(speed) + # for wii remote + def cruise_control_increase(self): + s = min(self.V_MAX, self.speed_cruise_control + 2.75) + if s < 0: + self.speed_cruise_control = 0 + else: + self.speed_cruise_control = s + + def cruise_control_decrease(self): + s = min(self.V_MAX, self.speed_cruise_control - 2.75) + if s < 0: + self.speed_cruise_control = 0 + else: + self.speed_cruise_control = s + + def def cruise_control_reset(self): + self.speed_cruise_control = 0 + + def activate_cruise_control_forward(self): + self.speed_last = self.speed_cur + self.speed_cur = self.speed_cruise_control + self.is_testmode_servo_active = True + if not is_testmode_activated: + self.__accelerate(self.speed_cruise_control) + + def activate_cruise_control_backward(self): + self.speed_last = self.speed_cur + self.speed_cur = -1 * self.speed_cruise_control + self.is_testmode_servo_active = True + if not is_testmode_activated: + self.__accelerate(-1 * self.speed_cruise_control) + + def deactivate_cruise_control(self): + self.speed_last = self.speed_cur + self.speed_cur = 0 + self.is_testmode_servo_active = False + if not is_testmode_activated: + self.__accelerate(0) + def reset_streeting(self): self.set_angle(0) @@ -90,6 +131,7 @@ class Iot_car(): self.streeting.set_angle(angle) def stop(self): + self.speed_last = self.speed_cur self.speed_cur = 0 self.angle_cur = 0 diff --git a/Versuch 3/keyikt_main.py b/Versuch 3/keyikt_main.py index 2a34094..7119379 100755 --- a/Versuch 3/keyikt_main.py +++ b/Versuch 3/keyikt_main.py @@ -183,10 +183,10 @@ if __name__ == "__main__": if keystates['accelerate']: # and v_step: # Beschleunigen v_step = False - car.accelerate(speed=1) + car.accelerate(speed=11) if keystates['decelerate']: # and v_step: # abbremsen - car.accelerate(speed=-1) + car.accelerate(speed=-11) if keystates['accelerate_angle_right']: car.streeting_right() if keystates['accelerate_angle_left']: diff --git a/Versuch 3/wiikt_main.py b/Versuch 3/wiikt_main.py index 4a7fa4f..cec81ac 100644 --- a/Versuch 3/wiikt_main.py +++ b/Versuch 3/wiikt_main.py @@ -5,6 +5,7 @@ ####################################################################### from linuxWiimoteLib import * +frim iot_car import Iot_car # initialize wiimote wiimote = Wiimote() @@ -16,6 +17,22 @@ device = ('', '') connected = False +car = Iot_car(testmode=True) + +# AUFGABE d +def set_led(remote): + global car + # percent + p = car.speed_cruise_control / car.V_MAX + if p > 0 and p <= 0.25: + remote.SetLEDs(True, False, False, False) + elif p > 0.25 and p <= 0.5: + remote.SetLEDs(True, True, False, False) + elif p > 0.5 and p <= 0.75: + remote.SetLEDs(True, True, True, False) + else: + remote.SetLEDs(True, True, True, True) + try: print "Press any key on wiimote to connect" while (not connected): @@ -33,6 +50,37 @@ try: wiimote.calibrateAccelerometer() sleep(0.1) + # Set acceleration and deceleration + if wiistate.ButtonState.One: + car.activate_cruise_control_forward() + else: + car.deactivate_cruise_control() + if wiistate.ButtonState.Two: + car.activate_cruise_control_backward() + else: + car.deactivate_cruise_control() + + # streeting + if wiistate.ButtonState.Up: + # streeting left + car.car.streeting_left() + if wiistate.ButtonState.Down: + # streeting right + car.streeting_right() + if not wiistate.ButtonState.Down and not wiistate.ButtonState.Up: + car.reset_streeting() + + # reset button + if wiistate.ButtonState.Minus: + car.reset() + car.cruise_control_reset() + + # set led states + set_led(wiimote) + + delta = 1.0 / 50 + print("({},{} --> {})".format(car.speed_cur, car.angle_cur, (car.speed_cur - car.speed_last) / delta)) + ", Servo_active: " + str(car.is_testmode_servo_active) + "CC Speed: " str(car.speed_cruise_control) + except KeyboardInterrupt: print "Exiting through keyboard event (CTRL + C)" exit(wiimote)