#! /usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import serial
import time
import pygame
import pygame.camera
from pygame.locals import *
from time import sleep
from subprocess import check_output
from re import findall


DEVICE = '/dev/video0'
SIZE = (640, 480)
FILENAME = 'capture.png'


pygame.init()
pygame.camera.init()
display = pygame.display.set_mode(SIZE, 0)
camera = pygame.camera.Camera(pygame.camera.list_cameras()[0], SIZE)
camera.start()

ser = serial.Serial('/dev/ttyUSB0', 115200)

def get_temp():
    """ Returns core temperature in float - deg C """
    temp = check_output(['vcgencmd', 'measure_temp']).decode('UTF-8')
    temp = float(findall('\d+\.\d+', temp)[0])
    return temp
    print( temp)

# Temperature settings
MINTEMP = 55
MAXTEMP = 60

# Delay time in seconds
DELAY = 5

def ready():
    message = "clink"
    ser.write(message.encode())
def stop():
    message = "cstop"
    ser.write(message.encode())
    print("stop")
def reverse():
     message = "crvrs"
     ser.write(message.encode())
     print("RECULE")
def forward():
    message = "cfrwd"
    ser.write(message.encode())
    print("AVANCE")
def right():
    message = "crght"
    ser.write(message.encode())
def left():
    message = "cleft"
    ser.write(message.encode())
def backleft():
     message = "cblft"
     ser.write(message.encode())
def frontleft():
    message = "cflft"
    ser.write(message.encode())
def backright():
    message = "cbrgt"
    ser.write(message.encode())
def frontright():
    message = "cfrgt"
    ser.write(message.encode())

def centcam():
    message = "ccent"
    ser.write(message.encode())
def modretro():
    message = "crmod"
    ser.write(message.encode())
def camup():
     message = "ccamu"
     ser.write(message.encode())
def camdown():
    message = "ccamd"
    ser.write(message.encode())    
def camleft():
    message = "ccaml"
    ser.write(message.encode())
def camright():
    message = "ccamr"
    ser.write(message.encode())

def modauto():
    message = "cauto"
    ser.write(message.encode())

def accelere():
    message = "cspdu"
    ser.write(message.encode())
def ralenti():
    message = "cspdd"
    ser.write(message.encode())

continuer = 1

#Boucle infinie

while continuer:
   
    for event in pygame.event.get():   #On parcours la liste de tous les événements reçus

        if event.type==QUIT:     #Si un de ces événements est de type QUIT

            continuer = 0      #On arrête la boucle
        
        if event.type == KEYDOWN and event.key == K_DOWN:
                    reverse()
        if event.type == KEYUP and event.key == K_DOWN:
                    stop()
        if event.type == KEYDOWN and event.key == K_UP:
                    forward()
        if event.type == KEYUP and event.key == K_UP:
                    stop()
        if event.type == KEYDOWN and event.key == K_RIGHT:
                    right()
        if event.type == KEYUP and event.key == K_RIGHT:
                    stop()
        if event.type == KEYDOWN and event.key == K_LEFT:
                    left()
        if event.type == KEYUP and event.key == K_LEFT:
                    stop()
        
        if event.type == KEYDOWN and event.key == K_q:
                    camleft()
        if event.type == KEYUP and event.key == K_q:
                   stop()
        if event.type == KEYDOWN and event.key == K_d:
                    camright()
        if event.type == KEYUP and event.key == K_d:
                    stop()
        if event.type == KEYDOWN and event.key == K_x:
                    camdown()
        if event.type == KEYUP and event.key == K_x:
                    stop()
        if event.type == KEYDOWN and event.key == K_z:
                    Camup()
        if event.type == KEYUP and event.key == K_z:
                    stop()
        if event.type == KEYDOWN and event.key == K_m:
                    Modretro()
        if event.type == KEYDOWN and event.key == K_s:
                    centcam()
        
                    
        if event.type == KEYDOWN and event.key == K_a:
                    modeAuto()
        if event.type == KEYDOWN and event.key == K_C:
                     camright()
        if event.type == KEYUP and event.key == K_C:
                     stop()                     
        if event.type == KEYDOWN and event.key == K_b:
                    accelere()
        if event.type == KEYDOWN and event.key == K_n:
                    ralenti()
        if event.type == KEYDOWN and event.key == K_ESCAPE:
                    sys.exit()
                    print("exit")
    
    screen = pygame.surface.Surface(SIZE, 0, display)
    screen = camera.get_image(screen)
    display.blit(screen, (0,0))
    pygame.display.flip()
    


