Example #1
0
 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()
Example #2
0
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
Example #3
0
 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()
Example #4
0
 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)
Example #5
0
 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')
Example #6
0
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:
Example #7
0
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
Example #8
0
 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
Example #9
0
 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', '')
Example #10
0
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:
Example #11
0
 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', '')
Example #12
0
	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()