#ECE5990 - Professor Joseph Skovira
#Python code to read fifo file and to interact with the raspberry pi
#Ashkan Ravani, ar856@cornell.edu
#Xiaoyu Guo, xg229@cornell.edu
#Vishnu Govindaraj, vg249@cornell.edu

import os
import sys
import time
import math
import subprocess
import RPi.GPIO as GPIO

ri = 6
le = 26
pwmFor = 19
pwmBa = 13

GPIO.setmode(GPIO.BCM)

GPIO.setup(ri,GPIO.OUT)
GPIO.setup(le,GPIO.OUT)
GPIO.setup(pwmFor,GPIO.OUT)
GPIO.setup(pwmBa,GPIO.OUT)

dcForward = 25
dcBackward = 22

pwmForward = GPIO.PWM(pwmFor, 50)
pwmForward.start(0)

pwmBackward = GPIO.PWM(pwmBa, 50)
pwmBackward.start(0)

r    = '"' + "right" + '"'
ride = '"' + "ride" + '"'
drive= '"' + "Drive" + '"'
life = '"' + "life" + '"'
live = '"' + "live" + '"'
rides= '"' + "rides" + '"'

l    = '"' + "left" + '"'
love = '"' + "love" + '"'
lift = '"' + "lift" + '"'
lost = '"' + "lost" + '"'
lock = '"' + "lock" + '"'
loft = '"' + "loft" + '"'
Loft = '"' + "Loft" + '"'

ff   = '"' + "forward" + '"'
f    = '"' + "forward" + '"'
Blv  = '"' + "Bulevard" + '"'
Boul = '"' + "Boulevard" + '"'
forW = '"' + "for what" + '"'
ford = '"' + "Ford" + '"'
Wlmrt= '"' + "Walmart" + '"'
fourv= '"' + "4 volt" + '"'
fball= '"' + "football" + '"'

spup = '"' + "speed up" + '"'

spdn = '"' + "speed down" + '"'
down = '"' + "down" + '"'
btdn = '"' + "beat down" + '"'
Googl= '"' + "Google" + '"'
stevy= '"' + "Steve Young" + '"'
stevd= '"' + "Steve down" + '"'
deepd= '"' +  "deep down" + '"'


b    = '"' + "back" + '"'
bw   = '"' + "backward" + '"'
blb  = '"' + "blackboard" + '"'
Blb  = '"' + "Blackboard" + '"'
buck = '"' + "buck" + '"'
balk = '"' + "balk" + '"'
backb= '"' + "backboard" + '"'
bckwa= '"' + "backwater" + '"'
bach = '"' + "bach" + '"'
bob  = '"' + "bob" + '"'
Bob  = '"' + "Bob" + '"'
Bach = '"' + "Bach" + '"'

stop = '"' + "stop" + '"'
stck = '"' + "stock" + '"'
stuff= '"' + "stuff" + '"' 

while True:
	
	file= "/home/pi/ar856/PiAUISuite/VoiceCommand/speech-recog_fifo"
	f=open(file,"r")

	i = f.read().rstrip()
	print(i)

	if (i == r or i == ri or i == ride or i == rides or i == life or i == live or i == drive):
		print("confirmed right")
		GPIO.output(le, False)
		GPIO.output(ri,True)
		dcForward = 30
	
	elif (i == l or i == love or i == lift or i == lost or i == lock):
		print("confirmed left")
		GPIO.output(ri,False)
		GPIO.output(le,True)
		dcForward = 30
	
	elif (i == f or i ==ff  or i == Blv or i == Boul or i == forW or i == Wlmrt or i == ford or i == fourv or i == fball):
		GPIO.output(ri,False)
		GPIO.output(le, False)
		GPIO.output(pwmBa, False)
		pwmBackward.stop()
		GPIO.output(pwmFor, False)
			
		dcForward = 25
		pwmForward.start(dcForward)
		print("before try except block, dcForward is ", dcForward)

		try :

			if ((dcForward > 50) or (dcForward < 0)):
				dcForward = 25
				
		except KeyboardInterrupt:
        		pwmForward.stop()
        		GPIO.cleanup()

	elif (i == spup):

		dcForward = dcForward + 5
		pwmForward.ChangeDutyCycle(dcForward)
		print("spup: ",dcForward)
	
	elif (i == spdn or i == down or i == btdn or i == Googl or i == stevy or i == stevd or i == deepd):

		dcForward = dcForward - 5
		pwmForward.ChangeDutyCycle(dcForward)
		print("spdn: ",dcForward)

	elif (i == b or i == bw or i == blb or i == Blb or i == buck or i == balk or i == backb or i == bckwa or i == bach or i == bob or i == Bach or i == Bob):
		print("confirmed backward")
		GPIO.output(ri,False)
		GPIO.output(le,False)
		pwmForward.stop()
		
		pwmBackward.start(dcBackward)

		try :
			
			if (dcBackward > 52):
				dcBackward = 22
			pwmBackward.ChangeDutyCycle(dcBackward)
			pwmBackward.ChangeFrequency(50)

		except KeyboardInterrupt:
			pwmBackward.stop()
			GPIO.cleanup()
		
	elif (i == stop):
		GPIO.output(ri, False)
		GPIO.output(le, False)
		pwmForward.stop()
		pwmBackward.stop()
		
	else:
		print("Didn't recognize, please try again!!")
		time.sleep(2)

