diff --git a/Code/Control/Laptop_Code/joystick/controller_test.py b/Code/Control/Laptop_Code/joystick/controller_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..7d6eba48abb51ec334610d42607bf9174b5b9557
--- /dev/null
+++ b/Code/Control/Laptop_Code/joystick/controller_test.py
@@ -0,0 +1,147 @@
+import pygame
+
+# Define some colors
+BLACK = (0, 0, 0)
+WHITE = (255, 255, 255)
+
+
+class TextPrint(object):
+    """
+    This is a simple class that will help us print to the screen
+    It has nothing to do with the joysticks, just outputting the
+    information.
+    """
+
+    def __init__(self):
+        """ Constructor """
+        self.reset()
+        self.x_pos = 10
+        self.y_pos = 10
+        self.font = pygame.font.Font(None, 20)
+
+    def print(self, my_screen, text_string):
+        """ Draw text onto the screen. """
+        text_bitmap = self.font.render(text_string, True, BLACK)
+        my_screen.blit(text_bitmap, [self.x_pos, self.y_pos])
+        self.y_pos += self.line_height
+
+    def reset(self):
+        """ Reset text to the top of the screen. """
+        self.x_pos = 10
+        self.y_pos = 10
+        self.line_height = 15
+
+    def indent(self):
+        """ Indent the next line of text """
+        self.x_pos += 10
+
+    def unindent(self):
+        """ Unindent the next line of text """
+        self.x_pos -= 10
+
+if __name__ == '__main__':
+
+    pygame.init()
+
+    # Set the width and height of the screen [width,height]
+    size = [500, 700]
+    screen = pygame.display.set_mode(size)
+
+    pygame.display.set_caption("My Game")
+
+    # Loop until the user clicks the close button.
+    done = False
+
+    # Used to manage how fast the screen updates
+    clock = pygame.time.Clock()
+
+    # Initialize the joysticks
+    pygame.joystick.init()
+
+    # Get ready to print
+    textPrint = TextPrint()
+
+    # -------- Main Program Loop -----------
+    while not done:
+        # EVENT PROCESSING STEP
+        for event in pygame.event.get():
+            if event.type == pygame.QUIT:
+                done = True
+
+            # Possible joystick actions: JOYAXISMOTION JOYBALLMOTION JOYBUTTONDOWN
+            # JOYBUTTONUP JOYHATMOTION
+            if event.type == pygame.JOYBUTTONDOWN:
+                print("Joystick button pressed.")
+            if event.type == pygame.JOYBUTTONUP:
+                print("Joystick button released.")
+
+        # DRAWING STEP
+        # First, clear the screen to white. Don't put other drawing commands
+        # above this, or they will be erased with this command.
+        screen.fill(WHITE)
+        textPrint.reset()
+
+        # Get count of joysticks
+        joystick_count = pygame.joystick.get_count()
+
+        textPrint.print(screen, "Number of joysticks: {}".format(joystick_count))
+        textPrint.indent()
+
+        # For each joystick:
+        for i in range(joystick_count):
+            joystick = pygame.joystick.Joystick(i)
+            joystick.init()
+
+            textPrint.print(screen, "Joystick {}".format(i))
+            textPrint.indent()
+
+            # Get the name from the OS for the controller/joystick
+            name = joystick.get_name()
+            textPrint.print(screen, "Joystick name: {}".format(name))
+
+            # Usually axis run in pairs, up/down for one, and left/right for
+            # the other.
+            axes = joystick.get_numaxes()
+            textPrint.print(screen, "Number of axes: {}".format(axes))
+            textPrint.indent()
+
+            for i in range(axes):
+                axis = joystick.get_axis(i)
+                print("{:>1.0f}".format(axis))
+                textPrint.print(screen, "Axis {} value: {:>6.3f}".format(i, axis))
+            textPrint.unindent()
+
+            buttons = joystick.get_numbuttons()
+            textPrint.print(screen, "Number of buttons: {}".format(buttons))
+            textPrint.indent()
+
+            for i in range(buttons):
+                button = joystick.get_button(i)
+                textPrint.print(screen, "Button {:>2} value: {}".format(i, button))
+            textPrint.unindent()
+
+            # Hat switch. All or nothing for direction, not like joysticks.
+            # Value comes back in an array.
+            hats = joystick.get_numhats()
+            textPrint.print(screen, "Number of hats: {}".format(hats))
+            textPrint.indent()
+
+            for i in range(hats):
+                hat = joystick.get_hat(i)
+                textPrint.print(screen, "Hat {} value: {}".format(i, str(hat)))
+            textPrint.unindent()
+
+            textPrint.unindent()
+
+        # ALL CODE TO DRAW SHOULD GO ABOVE THIS COMMENT
+
+        # Go ahead and update the screen with what we've drawn.
+        pygame.display.flip()
+
+        # Limit to 60 frames per second
+        clock.tick(60)
+
+    # Close the window and quit.
+    # If you forget this line, the program will 'hang'
+    # on exit if running from IDLE.
+    pygame.quit()
\ No newline at end of file