| @@ -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 | |||
| @@ -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']: | |||
| @@ -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) | |||