"""-----------------------------------"""
"""|PYGAME AND PICAXE MICROCONTROLLER|"""
"""-----------------------------------"""

#this is the port number of your serial port
portNumber = 4

#use this line if you're running Linux:
#port = '/dev/ttyUSB' + str(portNumber - 1)

#otherwise, use this line if you're running Windows:
port = portNumber - 1

"""------IMPORTANT! YOU DO NOT NEED TO EDIT ANYTHING BELOW THIS LINE!-------"""
"""------------------------------------------------------------------------"""

#import modules
import pygame, sys, random, serial
from pygame.locals import *

pygame.init()
print("Initialized Pygame")

#create and name frame
width = 300
height = 300
canvas = pygame.display.set_mode((width, height))
pygame.display.set_caption("Pygame Robot Controller")

#create FPS clock
fpsClock = pygame.time.Clock()
FPS = 30

#variables
serDataL = "0"
serDataR = "0"
serDataOld = "00"
running = True

#connect to serial port
ser = serial.Serial()
if not("/dev/ttyUSB" in str(port)):
    print("Connecting to serial port COM" + str(port) + "...")
else:
    print("Connecting to serial port " + str(port) + "...")
ser.port = port
ser.baudrate = 4800
ser.open()


while running:
    for event in pygame.event.get():
        #'x' the window
        if event.type == pygame.QUIT:
            running = False

        #movement handlers
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RETURN or event.key == pygame.K_ESCAPE:
                running = False
            elif event.key == pygame.K_w:
                serDataL = "1"
            elif event.key == pygame.K_s:
                serDataL = "2"

            elif event.key == pygame.K_i:
                serDataR = "1"
            elif event.key == pygame.K_k:
                serDataR = "2"

            if event.key == pygame.K_SPACE:
                serDataL = "9"
                serDataR = "9"
                
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_w:
                serDataL = "0"
            elif event.key == pygame.K_s:
                serDataL = "0"

            elif event.key == pygame.K_i:
                serDataR = "0"
            elif event.key == pygame.K_k:
                serDataR = "0"

            if event.key == pygame.K_SPACE:
                serDataL = "0"
                serDataR = "0"

    #decipher positions, then write serial data to PICAXE
    serData = serDataL + serDataR
    if serData != serDataOld:
        if serData == "00":
            serDC = "0"
            
        elif serData == "10":
            serDC = "1"
            
        elif serData == "20":
            serDC = "2"
            
        elif serData == "01":
            serDC = "3"

        elif serData == "02":
            serDC = "4"
            
        elif serData == "11":
            serDC = "5"
            
        elif serData == "21":
            serDC = "6"
            
        elif serData == "12":
            serDC = "7"
            
        elif serData == "22":
            serDC = "8"

        elif serData == "99":
            serDC = "9"

        #print data and send to PICAXE    
        print serData + "   " + serDC
        ser.write(serDC)
        serDataOld = serData

    #tick clock, and update and clear display
    fpsClock.tick(FPS)
    pygame.display.update()
    canvas.fill((0,0,0))

#close serial port and pygame
print("00   0")
ser.write("0")
ser.close()

print(" ")
print("Done.")

pygame.quit()
sys.exit(0)
