diff --git a/Code/Control/Laptop_Code/main_keyboard.py b/Code/Control/Laptop_Code/main_keyboard.py
index d2efd7764c9904535574bf9c3b511226fd612d5d..a7fc2b9cfc4a8602e06d875df5254fc610c8abec 100644
--- a/Code/Control/Laptop_Code/main_keyboard.py
+++ b/Code/Control/Laptop_Code/main_keyboard.py
@@ -1,16 +1,13 @@
 import time
 import serial
-import pygame
+import ball_detection.ball_detection as ball_detection
 import simple_pid.PID as PID
-import cv2
-
+import timeit
+import pygame
 from constants import *
 
 global ml
-ml = 0
-if ml == 1:
-    import ball_detection.ball_detection as ball_detection
-
+ml = 1
 # ========= Serial Port I/O ===========
 
 def serial_port_in(serial_port):
@@ -107,7 +104,7 @@ def goal_detect(tx,ty):
     '''
     return True if April Tag is detected
     '''
-    if tx == 100000 and ty == 100000:
+    if tx == 0 and ty == 0:
         return False
     else:
         return True
@@ -288,7 +285,10 @@ def main_control(gbx, gby, gb_dist, tx, ty, tz, rx, ry, rz, LIDAR_dist, debugM):
     ballDetect  = ball_detect(gbx, gby)
     ballCapture = ball_capture(LIDAR_dist)
     goalDetect  = goal_detect(tx, ty)
-    ballCapture = 1
+
+    # debug
+    # ballCapture = 1
+    # goalDetect = 0
     if ballCapture: # Ball captured
         if goalDetect:  # Goal detected
             # stop_all()  # Debug
@@ -305,33 +305,9 @@ def main_control(gbx, gby, gb_dist, tx, ty, tz, rx, ry, rz, LIDAR_dist, debugM):
 
     return pwm1, pwm2, pwm3, pwm4, dir1, dir2, dir3, dir4
 
-# ============= keyboard interruption ===================
-
-def init():
-    pygame.init()
-    win= pygame.display.set_mode((200,200))
-
-def keyboard_stop(flag_s,print_count_s):
-
-    if get_key('q'):
-        flag_s = 0
-        print_count_s = 1
-    return flag_s,print_count_s
-
-def get_key(keyname):
-    ans = False
-    for eve in pygame.event.get(): pass
-    keyInput = pygame.key.get_pressed()
-    myKey = getattr(pygame,'K_{}'.format(keyname))
-
-    if keyInput[myKey]:
-        ans = True
-    pygame.display.update()
-    return ans
-
 def auto_control(serial_port,gbx, gby, gb_dist, tx, ty, tz, rx, ry, rz, LIDAR_dist, debugM):
     # ===== STEP 1: TAKE ALL INPUT =====
-    # gbx, gby, gb_dist = ball_detection.detectLive(model, minDetectionScore, showSight = True)
+    gbx, gby, gb_dist = ball_detection.detectLive(model, minDetectionScore, showSight = True)
     line = serial_port.readline()
 
     if line == b'SERIAL_IN_START\r\n':
@@ -348,62 +324,40 @@ def auto_control(serial_port,gbx, gby, gb_dist, tx, ty, tz, rx, ry, rz, LIDAR_di
 
     time.sleep(waitTime)
 
-def decode_ctl(Ctl_com):
-    pwm1 = Ctl_com[0]
-    pwm2 = Ctl_com[1]
-    pwm3 = Ctl_com[2]
-    pwm4 = Ctl_com[3]
-    dir1 = Ctl_com[4]
-    dir2 = Ctl_com[5]
-    dir3 = Ctl_com[6]
-    dir4 = Ctl_com[7]
-    return pwm1, pwm2, pwm3, pwm4, dir1, dir2, dir3, dir4
-
-def manual_command(val1,val2,val3,val4,sign1,sign2,sign3,sign4):
-    pwm1 = val1
-    pwm2 = val2
-    pwm3 = val3
-    pwm4 = val4
-    dir1 = sign1
-    dir2 = sign2
-    dir3 = sign3
-    dir4 = sign4
-    return pwm1,pwm2,pwm3,pwm4,dir1,dir2,dir3,dir4
-
-def manual_control(Ctl_com,serial_port):
-
-    if get_key("w"):
-        val = start_speed
-        Ctl_com = manual_command(val, val, 0, 0, "+", "+", "+", "+")
-
-    elif get_key("s"):
-        val = start_speed
-        Ctl_com = manual_command(val, val, 0, 0, "-", "-", "+", "+")
-
-    if get_key("UP"):
-        val = start_speed
+def auto_init(init_count,gbx, gby, gb_dist, tx, ty, tz, rx, ry, rz, LIDAR_dist, debugM):
 
-        Ctl_com = manual_command(0, 0, val, val, "+", "+", "+", "+")
-    elif get_key("DOWN"):
-        val = start_speed
-        Ctl_com = manual_command(0, 0, val, val, "+", "+", "-", "-")
-
-    elif get_key("LEFT"):
-        val = start_speed
-        Ctl_com = manual_command(0, 0, val, val, "+", "+", "-", "+")
+    gbx, gby, gb_dist = ball_detection.detectLive(model, minDetectionScore, showSight = True)
+    pwm1, pwm2, pwm3, pwm4, dir1, dir2, dir3, dir4 = main_control(gbx, gby, gb_dist, tx, ty, tz, rx, ry, rz, LIDAR_dist, debugM)
+    serial_port_out(serial_port, pwm1, pwm2, pwm3, pwm4, dir1, dir2, dir3, dir4)
+    init_count += 1
+    return init_count
 
-    elif get_key("RIGHT"):
-        val = start_speed
-        Ctl_com = manual_command(0, 0, val, val, "+", "+", "+", "-")
+def init():
+    pygame.init()
+    win= pygame.display.set_mode((200,200))
 
-    pwm1, pwm2, pwm3, pwm4, dir1, dir2, dir3, dir4 = decode_ctl(Ctl_com)
+def keyboard_stop(flag_s,print_count_s):
 
-    waitTime = 0.05
+    if get_key('q'):
+        flag_s = 0
+        print_count_s = 1
+    return flag_s,print_count_s
 
-    serial_port_out(serial_port, pwm1, pwm2, pwm3, pwm4, dir1, dir2, dir3, dir4)
+def get_key(keyname):
+    ans = False
+    for eve in pygame.event.get(): pass
+    keyInput = pygame.key.get_pressed()
+    myKey = getattr(pygame,'K_{}'.format(keyname))
 
-    time.sleep(waitTime)
+    if keyInput[myKey]:
+        ans = True
+    pygame.display.update()
+    return ans
 
+def stop_all():
+    pwm1, pwm2, pwm3, pwm4 = 0 , 0 , 0 , 0
+    dir1, dir2, dir3, dir4 = '+', '-', '+', '-'
+    return pwm1, pwm2, pwm3, pwm4, dir1, dir2, dir3, dir4
 
 def dynamic_variable(str_name_v):
 
@@ -458,11 +412,68 @@ def variables_change_once():
     str_name = input("Enter your variable: ")
     dynamic_variable(str_name)
 
+def manual_control(Ctl_com,serial_port):
+
+    if get_key("w"):
+        val = start_speed
+        Ctl_com = manual_command(val, val, 0, 0, "+", "+", "+", "+")
+
+    elif get_key("s"):
+        val = start_speed
+        Ctl_com = manual_command(val, val, 0, 0, "-", "-", "+", "+")
+
+    if get_key("UP"):
+        val = start_speed
+
+        Ctl_com = manual_command(0, 0, val, val, "+", "+", "+", "+")
+    elif get_key("DOWN"):
+        val = start_speed
+        Ctl_com = manual_command(0, 0, val, val, "+", "+", "-", "-")
+
+    elif get_key("LEFT"):
+        val = start_speed
+        Ctl_com = manual_command(0, 0, val, val, "+", "+", "-", "+")
+
+    elif get_key("RIGHT"):
+        val = start_speed
+        Ctl_com = manual_command(0, 0, val, val, "+", "+", "+", "-")
+
+    pwm1, pwm2, pwm3, pwm4, dir1, dir2, dir3, dir4 = decode_ctl(Ctl_com)
+
+    waitTime = 0.05
+    # changed
+    gbx, gby, gb_dist = ball_detection.detectLive(model, minDetectionScore, showSight = True)
+
+    serial_port_out(serial_port, pwm1, pwm2, pwm3, pwm4, dir1, dir2, dir3, dir4)
+
+    time.sleep(waitTime)
+
+def manual_command(val1,val2,val3,val4,sign1,sign2,sign3,sign4):
+    pwm1 = val1
+    pwm2 = val2
+    pwm3 = val3
+    pwm4 = val4
+    dir1 = sign1
+    dir2 = sign2
+    dir3 = sign3
+    dir4 = sign4
+    return pwm1,pwm2,pwm3,pwm4,dir1,dir2,dir3,dir4
+
+def decode_ctl(Ctl_com):
+    pwm1 = Ctl_com[0]
+    pwm2 = Ctl_com[1]
+    pwm3 = Ctl_com[2]
+    pwm4 = Ctl_com[3]
+    dir1 = Ctl_com[4]
+    dir2 = Ctl_com[5]
+    dir3 = Ctl_com[6]
+    dir4 = Ctl_com[7]
+    return pwm1, pwm2, pwm3, pwm4, dir1, dir2, dir3, dir4
 # ===== Main Function =====
 if __name__ == '__main__':
     # =========== SET UP ============
     # Defining Variables for ESP 32 Serial I/O
-    PORT = "COM3" # Based on your own serial port number
+    PORT = "COM6" # for Alienware
     serial_port = serial.Serial(PORT, 115200)
     serial_port.close()
     serial_port.open()
@@ -471,12 +482,10 @@ if __name__ == '__main__':
     waitTime = 0.05
 
     # Loading the PyTorch ML model for ball detection
-    if ml == 1:
-        model = ball_detection.returnModel(device, labelSet, modelLoc, modelFile)
+    model = ball_detection.returnModel(device, labelSet, modelLoc, modelFile)
 
     # =========== DECLARE VARIABLES ===========
     # ESP CAM In
-    global gbx,gby,gb_dist
     gbx, gby  = -1, -1   # by default (-1 means no found green ball)
     gb_dist = -1         # by default (-1 means no found green ball)
 
@@ -489,29 +498,29 @@ if __name__ == '__main__':
     # Serial Port Out
     pwm1, pwm2, pwm3, pwm4 = 0 , 0 , 0 , 0   # Not moving
     dir1, dir2, dir3, dir4 = '+', '+', '+', '+'
-
+    Ctl_com = [0, 0, 0, 0, "+", "+", "+", "+"]
     # Trigger the ESP32_SLAVE to talk first
-    if ml == 1:
-        gbx, gby, gb_dist = ball_detection.detectLive(model, minDetectionScore, showSight = True)
+    """
+    gbx, gby, gb_dist = ball_detection.detectLive(model, minDetectionScore, showSight = True)
     pwm1, pwm2, pwm3, pwm4, dir1, dir2, dir3, dir4 = main_control(gbx, gby, gb_dist, tx, ty, tz, rx, ry, rz, LIDAR_dist, debugM)
     serial_port_out(serial_port, pwm1, pwm2, pwm3, pwm4, dir1, dir2, dir3, dir4)
-
-    Ctl_com = [0, 0, 0, 0, "+", "+", "+", "+"]
+    """
     flag = 0
-    print_count = 1
+    init_count = 0
+    print_count = 0
     global start_speed
     start_speed = 70
 
     init()
     # =========== LOOP FOREVER===========
     while True:
-
         if get_key('a'):
             flag = 1
             while (flag == 1):
+                if init_count == 0:
+                     init_count = auto_init(init_count,gbx, gby, gb_dist, tx, ty, tz, rx, ry, rz, LIDAR_dist, debugM)
                 auto_control(serial_port,gbx, gby, gb_dist, tx, ty, tz, rx, ry, rz, LIDAR_dist, debugM)
                 flag, print_count = keyboard_stop(flag,print_count)
-
         elif get_key('s'):
             pwm1, pwm2, pwm3, pwm4, dir1, dir2, dir3, dir4 = stop_all()
             serial_port_out(serial_port, pwm1, pwm2, pwm3, pwm4, dir1, dir2, dir3, dir4)
@@ -533,6 +542,6 @@ if __name__ == '__main__':
         elif get_key('k'):
             break
 
-        if print_count is not 0:
+        if print_count != 0:
             print("No subsystem is running")
             print_count = 0