def __init__(self): super().__init__(_SDA, _SCL) #init pca9865 self._joystick = joystick.joystick(_JX, _JY, _JB) #Values +/-90 deg. -100 = off. self._servoA = [0.0, -bot._TORSO_TILT_RANGE, 0.0, 0.0, 0.0, 0.0] self._time = time.ticks_ms() self.updateservos()
def mosquito_load_view(view): """ Load a pythonista ui view and its specific components from a ui filename """ ui_view = ui.load_view(view) if view == 'fly_mosquito.pyui': stick_throttle_yaw = js.joystick(65, 230,'left_stick', is_throttle_stick=True) stick_roll_pitch = js.joystick(65, 230, 'right_stick') stick_throttle_yaw.x, stick_throttle_yaw.y = 15, 35 stick_roll_pitch.x, stick_roll_pitch.y = 320, 35 stick_throttle_yaw.touch_ended(None) # center the stick stick_roll_pitch.touch_ended(None) ui_view.add_subview(stick_throttle_yaw) ui_view.add_subview(stick_roll_pitch) return ui_view
def __init__( self ) : super().__init__(_pcaloc) #init PCA 9865 self._joystick = joystick.joystick(pyb.Pin.board.Y11, pyb.Pin.board.Y12, pyb.Pin.board.X8) #Values +/-90 deg. -100 = off. self._servoA = [0.0, -bot._TORSO_TILT_RANGE, 0.0, 0.0, 0.0, 0.0] self._time = pyb.millis() self.updateservos()
def __init__(self): pygame.init() self.driveTrain = drivetrain() self.interval = .1 # run main loop every .1 seconds self.joystick = joystick() # set the joystick callbacks joystick.addButtonEventHandler(self.joystick, self.buttonCallback) joystick.addJoystickEventHandler(self.joystick, self.joystickMoveCallback)
def __init__(self,logDir = '',SIL=True,port='COM4',Kp=0.0,Kd=0.0,Ki=0.0,dw_interface=False,dw_radius=0.0,dw_angle=0.0,turnThrottle=0.3,cruiseThrottle=0.6): # make log folder based on date/time foldername=logDir ## state object from xbee_bridge_state self.state = xbee_bridge_state(logDir=foldername) ## start time - used to reduce all times to something more convenient for floats self.tStart = time.time() ## time at which to trigger 1Hz loop self.time_1Hz = 0.0 ## time at which to trigger 10 Hz loop self.time_10Hz = 0.0 ## time at which to trigger 50 Hz loop self.time_50Hz = 0.0 ## dw_interface: boolean, set to True to enable the debugging interface self.dw_interface = dw_interface ## dw_radius: range at which to create synthetic waypoints as float in meters self.dw_radius = dw_radius ## dw_angle: relative angle to synthetic waypoints as a float in radians, positive is to the right self.dw_angle = dw_angle ## synthetic waypoint object used in debugging self.syntheticWaypoint = synthetic_waypoint(logDir=foldername) ## joystick interface class self.joy = joystick.joystick(dw_interface) ## hardware_interface class object with default SIL arguments self.xbee = hardware_interface.hardware_interface(port=port,SIL=SIL,groundstation=True) self.xbee.start() ## (boolean) set to True when we get a new GPS message self.new_data = False ## buffer of bytes to write to XBee; clear whenever written self.txBuffer = bytes() ## Object for interprocess communications self.ipc = ipcPacker.nanomsgTalker() ## control object for computing control self.control = control.control(logDir=foldername,Kp=Kp,Kd=Kd,Ki=Ki,turnThrottle=turnThrottle,cruiseThrottle=cruiseThrottle) ## parser object for the serial protocol. Pass the log folder to create message logs self.espParser = esp.espParser(logdir=foldername) ## GPS log file self.gpsLog = open(foldername+'gpslog.csv','w') self.gpsLog.write('systime,t,lon,lat,v,hdg,status\n') ## Control (received) log file self.controlLog = open(foldername+'controlLog.csv','w') self.controlLog.write('systime,rudd,thro\n') ## Control (transmitted) log file self.controlOutLog = open(foldername+'controlOutLog.csv','w') self.controlOutLog.write('systime,rudd,thro\n')
from joystick import joystick BUTTON_DICT = { 0: 'A', 1: 'B', 2: 'X', 3: 'Y', 4: 'L', 5: 'R', 6: 'C', 7: 'S', 8: 'U', 9: 'D', } DIRECTION_LIST = [ (0, 'left', 'right'), (1, 'up', 'down'), (2, 'E', 'F'), (3, 'G', 'H'), (4, 'I', 'J') ] HAT_LIST = [(0, 'M', 'N'), (1, 'O', 'P')] js = joystick() def key_down(key): print('%s is pressed' % key) def key_up(key): print('%s is released' % key) def registe_button(k, v): @js.button_register(k) def button_fn(motion): if motion == 'down': key_down(v) elif motion == 'up': key_up(v) def registe_axis_or_hat(register, i, neg, pos): @register(i) def axis_fn(status): if status == 0: key_up(neg); key_up(pos) elif status == 1: key_down(pos) elif status == -1:
class MainWindow(QMainWindow): """MainWindow inherits QMainWindow""" _sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) _packet = [4, 4, 4] _speed = 50 _state = 0 _timer = QtCore.QTimer _configuration_window = None _joystick = joystick.joystick() _writer = None def __init__(self, parent=None): QMainWindow.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.Record_Button.clicked.connect(self.Record_Button_Clicked) self.ui.Config_Button.clicked.connect(self.Config_Button_Clicked) self.SpeedLCD_Display(self._speed) self.load_Configs() Actions.Set_Address() self.Cam_Loop() def Cam_Loop(self): try: #self.Cam_Video() try: self._packet = self.joystic_interpreter( self._joystick.reading()) except: self._packet = [4, 4, 4] data = simplejson.dumps(self._packet) self._sock.sendto(data, ("172.18.131.50", 5506)) finally: self._timer.singleShot(50, self.Cam_Loop) def joystic_interpreter(self, key): data = [4, 4, self._speed] if (key[1] < 0): data[0] = 0 elif (key[1] > 0): data[0] = 1 elif (key[0] > 0): data[0] = 2 elif (key[0] < 0): data[0] = 3 if (key[3] < 0): data[1] = 0 elif (key[3] > 0): data[1] = 1 elif (key[2] > 0): data[1] = 2 elif (key[2] < 0): data[1] = 3 if (key[5] == 1): if (self._speed <= 99): self._speed += 1 self.SpeedLCD_Display(self._speed) data[2] = self._speed elif (key[4] == 1): if (self._speed >= 2): self._speed -= 1 self.SpeedLCD_Display(self._speed) data[2] = self._speed elif (key[6] == 1 and key[6] != self._state): self._state = 1 self.Record_Button_Clicked() elif (key[6] == 0): self._state = 0 return data def Config_Button_Clicked(self): if (self._configuration_window is None): #self.ui.Config_Button.setEnabled(False) self._configuration_window = Config_window.Config_window(self) self._configuration_window.show() self._configuration_window.setWindowTitle('Configurations') self._configuration_window.exec_() self._configuration_window = None def Close_Button_Clicked(self): Actions._porta_serial.close() self.ui.Close_Button.setEnabled(False) self.ui.OK_Button.setEnabled(True) def OK_Button_Clicked(self): Actions.Serial_Open(str(self.ui.comboBox_Port.currentText()), int(self.ui.comboBox_Baud.currentText())) self.ui.Close_Button.setEnabled(True) self.ui.OK_Button.setEnabled(False) self.Serial_Loop() def Refresh_Button_Clicked(self): for i in range(0, len(self._ports)): self.ui.comboBox_Port.removeItem(i) self._ports = Actions.serial_ports() self.ui.comboBox_Port.addItems(self._ports) def Record_Button_Clicked(self): if (not self.ui.Record_Button.isFlat()): self.ui.Record_Button.setText("Parar") self.ui.Record_Button.setFlat(True) self._writer = cv.CreateVideoWriter( filename=("img/" + time.strftime("%H%M%S") + ".avi"), fourcc=cv.CV_FOURCC('X', 'V', 'I', 'D'), fps=2, frame_size=(640, 480), is_color=1) else: self.ui.Record_Button.setText("Gravar") self.ui.Record_Button.setFlat(False) cv.ReleaseVideoWriter(self._writer) def SpeedLCD_Display(self, value): self.ui.SpeedLCD.display(value) def Image_Show(self, filename): # Carrega uma imagen na tela pixmap = GUI.QPixmap(filename) self.ui.Label_Image.setPixmap(pixmap) self.ui.Label_Image.show() def Cam_Video(self): # Recebe uma imagem e manda mostrar na tela Actions.Receive_File() if (self.ui.Record_Button.isFlat()): frame = cv.LoadImage("img/img.jpg") cv.WriteFrame(self._writer, frame) self.Image_Show("img/img.jpg") def keyPressEvent(self, event): text = "" key = event.key() # Verifica se o botão pressionado é uma das teclas especias abaixo e # grava na variavel texto uma string descrevendo a tecla, caso contrio # grava o character que representa a tecla if (key == QtCore.Qt.Key_Left): text = "Left Arrow" elif key == QtCore.Qt.Key_Right: text = "Right Arrow" elif key == QtCore.Qt.Key_Down: text = "Down Arrow" elif key == QtCore.Qt.Key_Up: text = "Up Arrow" elif key == QtCore.Qt.Key_Space: text = "Space" elif key == QtCore.Qt.Key_Control: text = "Ctrl" elif key == QtCore.Qt.Key_Alt: text = "Alt" elif key == QtCore.Qt.Key_Return: text = "Return" elif key == QtCore.Qt.Key_Enter: text = "Enter" elif key == QtCore.Qt.Key_Shift: text = "Shift" elif key == QtCore.Qt.Key_AltGr: text = "AltGr" else: text = event.text() self.comand(text, 0) def comand(self, key, option): if (option == 0): comands = self._typesetter_config_options else: comands = self._control_config_options self._packet = [4, 4, self._speed] for i in range(0, 3): possibilits = comands[i] for a in range(0, len(possibilits)): if (key == possibilits[str(a)]): if (i == 2 and a == 0): if (self._speed <= 99): self._speed = self._speed + 1 self.SpeedLCD_Display(self._speed) self._packet[i] = self._speed elif (i == 2 and a == 1): if (self._speed >= 2): self._speed = self._speed - 1 self.SpeedLCD_Display(self._speed) self._packet[i] = self._speed elif (i == 2 and a == 2): self.Record_Button_Clicked() break else: self._packet[i] = a i = 3 break print((self._packet[0], self._packet[1], self._packet[2])) data = simplejson.dumps(self._packet) self._sock.sendto(data, ("172.18.131.23", 5506)) def load_Configs(self): # Lê as configurações dos arquivos e grava em duas listas self._control_config_options = [] self._typesetter_config_options = [] config_file = open('configurations/control_config.txt', 'r') text_lines = [line.rstrip('\n') for line in config_file] for i in range(0, len(text_lines)): self._control_config_options.append(simplejson.loads( text_lines[i])) config_file.close() config_file = open('configurations/typesetter_config.txt', 'r') text_lines = [line.rstrip('\n') for line in config_file] for i in range(0, len(text_lines)): self._typesetter_config_options.append( simplejson.loads(text_lines[i])) config_file.close() def __del__(self): self.ui = None
def __init__(self, punchMotorPins, moveMotorPins, lifePins, hitPin, joystickPins, punchPin): self.robot = robot(punchMotorPins, moveMotorPins, lifePins, hitPin) self.joystick = joystick(joystickPins) self.punchButton = button(punchPin) self.victory = False
def __init__(self, glade_filename, window_name, config_opts, config_args): """build the window""" WahCade.__init__(self) GladeSupport.__init__(self, glade_filename, window_name, APP_NAME) #command-line options self.config_opts = config_opts #set default config location (create / update as necessary) self.config_dir = CONFIG_DIR if not os.path.exists(self.config_dir): self.copy_user_config('all') else: #update current config self.copy_user_config() #keys list self.tvwKeys, self.lsKeys, self.tvwsKeys = self.setup_treeview( columns = ['Function', 'Key'], column_types = [gobject.TYPE_STRING, gobject.TYPE_STRING], container = self.scwKeys, resizeable_cols = False) self.lsKeys.set_sort_column_id(0, gtk.SORT_ASCENDING) self.tvwKeys.connect('row-activated', self.on_tvwKeys_row_activated) self.tvwKeys.set_tooltip_text(_('Double-Click a row to change a Key...')) #set max width for keys column (stops window getting too wide) col = self.tvwKeys.get_column(1) col.set_max_width(200) #get ini files self.wahcade_ini = MameWahIni(os.path.join(self.config_dir, 'wahcade.ini')) self.histview_ini = MameWahIni(os.path.join(self.config_dir, 'histview.ini')) self.cpviewer_ini = MameWahIni(os.path.join(self.config_dir, 'cpviewer.ini')) self.ctrlr_ini = MameWahIni(os.path.join(self.config_dir, 'ctrlr', 'default.ini'), 'ctrlr') #emu stuff self.emu_list_gen_types = [ [['rom_folder'], 'Rom Directory'], [['rom_folder_vs_listxml', 'list_xml'], 'XML File'], [['rom_folder_vs_dat_file', 'dat_file'], 'DAT File']] self.emu_scrsave_types = [ ['blank_screen', 'Blank Screen'], ['slideshow', 'Slide Show'], ['movie', 'Movies'], ['launch_scr', 'Launch External Screen Saver']] self.emu_list_types = [ ['normal', 'Normal'], ['most_played', 'Most Played'], ['longest_played', 'Longest Played']] self.music_movie_mix = [ ['mute_movies', 'Mute Movies'], ['merge', 'Mix with Music']] self.emu_artwork_txe = [ self.txeEmuArt1, self.txeEmuArt2, self.txeEmuArt3, self.txeEmuArt4, self.txeEmuArt5, self.txeEmuArt6, self.txeEmuArt7, self.txeEmuArt8, self.txeEmuArt9, self.txeEmuArt10] self.emu_artwork_btn = [ self.btnEmuArt1, self.btnEmuArt2, self.btnEmuArt3, self.btnEmuArt4, self.btnEmuArt5, self.btnEmuArt6, self.btnEmuArt7, self.btnEmuArt8, self.btnEmuArt9, self.btnEmuArt10] #setup combo boxes self.setup_combo_box(self.cboEmuScrSaver, [r[1] for r in self.emu_scrsave_types]) self.setup_combo_box(self.cboEmuListGen, [r[1] for r in self.emu_list_gen_types]) self.setup_combo_box(self.cboEmuListType, [r[1] for r in self.emu_list_types]) self.setup_combo_box(self.cboWCMovieMix, [r[1] for r in self.music_movie_mix]) #global joy self.joystick = joystick.joystick() self.joystick.use_all_controls() #get default window size & pos self.do_events() w, h = self.wahcade_ini.get('setup_window_size', 'default', '400x400').split('x') self.winSetup.resize(width=int(w), height=int(h)) #load settings self.load_settings() self.setup_altered = False #set icon sizes settings = gtk.settings_get_default() settings.set_string_property('gtk-icon-sizes', 'gtk-button=16,16', '')
def __init__(self, glade_filename, window_name, config_opts, config_args): """build the window""" WahCade.__init__(self) GladeSupport.__init__(self, glade_filename, window_name, APP_NAME) #command-line options self.config_opts = config_opts #set default config location (create / update as necessary) self.config_dir = CONFIG_DIR if not os.path.exists(self.config_dir): self.copy_user_config('all') else: #update current config self.copy_user_config() #keys list self.tvwKeys, self.lsKeys, self.tvwsKeys = self.setup_treeview( columns = ['Function', 'Key'], column_types = [gobject.TYPE_STRING, gobject.TYPE_STRING], container = self.scwKeys, resizeable_cols = False) self.lsKeys.set_sort_column_id(0, gtk.SORT_ASCENDING) self.tvwKeys.connect('row-activated', self.on_tvwKeys_row_activated) self.tvwKeys.set_tooltip_text(_('Double-Click a row to change a Key...')) #set max width for keys column (stops window getting too wide) col = self.tvwKeys.get_column(1) col.set_max_width(200) #get ini files self.wahcade_ini = MameWahIni(os.path.join(self.config_dir, 'wahcade.ini')) self.histview_ini = MameWahIni(os.path.join(self.config_dir, 'histview.ini')) self.cpviewer_ini = MameWahIni(os.path.join(self.config_dir, 'cpviewer.ini')) self.ctrlr_ini = MameWahIni(os.path.join(self.config_dir, 'ctrlr', 'default.ini'), 'ctrlr') #emu stuff self.emu_list_gen_types = [ [['rom_folder'], 'Rom Directory'], [['rom_folder_vs_listxml', 'list_xml'], 'XML File'], [['rom_folder_vs_dat_file', 'dat_file'], 'DAT File']] self.emu_scrsave_types = [ ['blank_screen', 'Blank Screen'], ['slideshow', 'Slide Show'], ['movie', 'Movies'], ['launch_scr', 'Launch External Screen Saver']] self.emu_list_types = [ ['normal', 'Normal'], ['most_played', 'Most Played'], ['longest_played', 'Longest Played'], ['hi2text_supported', 'High Score Supported'], ['xml_remote', 'XML Remote']] self.music_movie_mix = [ ['mute_movies', 'Mute Movies'], ['merge', 'Mix with Music']] self.emu_artwork_txe = [ self.txeEmuArt1, self.txeEmuArt2, self.txeEmuArt3, self.txeEmuArt4, self.txeEmuArt5, self.txeEmuArt6, self.txeEmuArt7, self.txeEmuArt8, self.txeEmuArt9, self.txeEmuArt10] self.emu_artwork_btn = [ self.btnEmuArt1, self.btnEmuArt2, self.btnEmuArt3, self.btnEmuArt4, self.btnEmuArt5, self.btnEmuArt6, self.btnEmuArt7, self.btnEmuArt8, self.btnEmuArt9, self.btnEmuArt10] #setup combo boxes self.setup_combo_box(self.cboEmuScrSaver, [r[1] for r in self.emu_scrsave_types]) self.setup_combo_box(self.cboEmuListGen, [r[1] for r in self.emu_list_gen_types]) self.setup_combo_box(self.cboEmuListType, [r[1] for r in self.emu_list_types]) self.setup_combo_box(self.cboWCMovieMix, [r[1] for r in self.music_movie_mix]) #global joy self.joystick = joystick.joystick() self.joystick.use_all_controls() #get default window size & pos self.do_events() w, h = self.wahcade_ini.get('setup_window_size', 'default', '400x400').split('x') self.winSetup.resize(width=int(w), height=int(h)) #load settings self.load_settings() self.setup_altered = False #set icon sizes settings = gtk.settings_get_default() settings.set_string_property('gtk-icon-sizes', 'gtk-button=16,16', '')
def run_game(self): # Game parameters self.SCREEN_WIDTH = conf.SCREEN_WIDTH self.SCREEN_HEIGHT = conf.SCREEN_HEIGHT BG_COLOR = conf.BG_COLOR self.BLOCKSIZE = conf.BLOCKSIZE self.SNACKS = conf.SNACKS self.gameSpeed = 250 self.gameSpeedFactors = range(0, 400, 25) self.gameSpeedFactor = 0 pygame.init() self.REST_WITH = self.SCREEN_WIDTH % self.BLOCKSIZE self.REST_HEIGHT = self.SCREEN_HEIGHT % self.BLOCKSIZE self.DRAW_RECT = pygame.Rect(0, 0, self.SCREEN_WIDTH - self.REST_WITH, self.SCREEN_HEIGHT - self.REST_HEIGHT) # do fancy window stuff pygame.display.set_caption("pySnake") #pygame.display.set_icon(pygame.image.load('imgs/bandit.jpg')) pygame.mouse.set_visible(False) if not conf.FULLSCREEN: os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (conf.WINDOW_POSITION_X, conf.WINDOW_POSITION_Y) if not conf.WINDOW_BORDER: self.screen = pygame.display.set_mode((self.SCREEN_WIDTH, self.SCREEN_HEIGHT), pygame.NOFRAME, 32) if self.screen is None: self.screen = pygame.display.set_mode((self.SCREEN_WIDTH, self.SCREEN_HEIGHT), 0, 32) if conf.FULLSCREEN: pygame.display.toggle_fullscreen() clock = pygame.time.Clock() redrawCount = 0 # init the menu, add stuff later self.iUi = ui(self.screen) self.popUp = popUp(self.screen) self.popUp.color = conf.FONT_COLOR self.touchScreen = touchScreen(self.SCREEN_WIDTH, self.SCREEN_HEIGHT) pygame.joystick.init() self.joystickInteract = joystick() keymap = {pygame.K_UP: 1, pygame.K_RIGHT: 2, pygame.K_DOWN: 3, pygame.K_LEFT: 4} self.playerBox = None self.elements = [] self.haveToAdd = [] # The main game loop # gameOver = False doMove = -1 while True: if self.playerBox is None: self.resetGame() # Limit frame speed to 50 FPS # time_passed = clock.tick(50) redrawCount += time_passed if self.joystickInteract.joystickAvailable(): joyAction = self.joystickInteract.getAction() if joyAction == "move": doMove = self.joystickInteract.getMoveAction() elif joyAction == "speedUp": self.gameSpeedUp() elif joyAction == "speedDown": self.gameSpeedDown() elif joyAction == "restart": self.resetGame() gameOver = False elif joyAction == 'quit': self.exit_game() for event in pygame.event.get(): if event.type == pygame.QUIT: self.exit_game() elif event.type == pygame.KEYDOWN: if event.key in keymap: doMove = keymap[event.key] elif event.key == pygame.K_2: # speed up game self.gameSpeedUp() elif event.key == pygame.K_1: # slow down up game self.gameSpeedDown() elif event.key == pygame.K_r: # restart game self.resetGame() gameOver = False elif event.key == pygame.K_q: self.exit_game() else: print "event.key:", event.key #if event.key == pygame.K_UP: # self.move(1) else: pass #print event if conf.TOUCH_SCREEN: mouseAction = self.touchScreen.getEventBoxes() if mouseAction > 0: if gameOver: self.resetGame() gameOver = False else: doMove = mouseAction if gameOver is False and redrawCount >= (self.gameSpeed - self.gameSpeedFactors[self.gameSpeedFactor]): # ONLY move, when the timer elapses! # otherwise you could change the direction multiple times before the scenery changes and upates # strange shit goes on! if doMove != -1: self.move(doMove) doMove = -1 redrawCount = 0 self.screen.fill(BG_COLOR, self.DRAW_RECT) # move the elements for elem in reversed(self.elements): elem.update() # add elements BEFORE blit is called and they change direction! # WEIRD stuff would happen otherwise!!!1!!!!!!!! if len(self.haveToAdd) > 0: for i in range(len(self.haveToAdd)): coords = self.haveToAdd[i] if self.fieldContainsBox(self.elements, coords[0], coords[1]) is False: lastElem = self.getLastElement() lastElem.back = box(self.screen, self.BLOCKSIZE, coords[0], coords[1]) lastElem.back.setDirection(lastElem.getDirection()) self.elements.append(self.getLastElement()) self.haveToAdd.pop(i) break else: # if there is NOTHING to add to the Snake, add a new snak, if needed # preventing from spawning a snack inside the "new" tail of the snake and shit self.addSnack(self.elements) # update elements for elem in reversed(self.elements): elem.blit() # draw touchscreen # TODO: draw touch areas # draw pop ups self.popUp.drawPopUps() # if a snack has been eaten, add it to the to add list snackEaten = self.eatSnack(self.elements) if snackEaten is not None: self.haveToAdd.append(snackEaten) self.popUp.singlePopUp(str(self.getBodyLen())) # collision! if self.headDied(self.elements): gameOver = True pygame.display.flip()