library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity ohjaus is
    Port ( anturit : in std_logic_vector(2 downto 0);
           vasen_moottori : out std_logic_vector(19 downto 0);
			  oikea_moottori : out std_logic_vector(19 downto 0);
			  vasen_suunta	: out std_logic;
			  oikea_suunta : out std_logic;
			  clock : in std_logic;
			  valmis : in std_logic);

end ohjaus;

architecture Behavioral of ohjaus is

type tila is (init, eteen1, eteen2, taakse, vasen, jyrkka_vasen, oikea, jyrkka_oikea);

signal State : tila;

begin

	process(clock)

	begin
		
		if(clock'event and clock = '1') then

			case State is
		
				when init =>
			 	
	 				State <=init;
 
					if valmis = '0' then

		 				if (anturit = "010") then 
		 					State <= eteen1;

		 				elsif (anturit = "111") then
		  					State <= eteen2;

		 				elsif (anturit = "100") then
		 					State <= jyrkka_vasen;
 
		 				elsif (anturit = "110") then
		  					State <= vasen;				
 
		  				elsif (anturit = "001") then
		   				State <= jyrkka_oikea;
  
		  				elsif (anturit = "011") then
		  					State <= oikea;

						elsif (anturit = "000") then
		 					State <= taakse;

						else
							state <= taakse;
						
						end if;
	
					else

						state <= taakse;

					end if;

				when eteen1 =>
					vasen_moottori <=	"11001111111111111111";
					oikea_moottori <= "11001111111111111111";
					vasen_suunta <= '1';
					oikea_suunta <= '1'; 
					State <= init;	

				when eteen2 =>
					vasen_moottori <=	"11111111111111111111";	  
					oikea_moottori <= "11110000000000000000";   
					vasen_suunta <= '1';
					oikea_suunta <= '1'; 
					State <= init;

				when vasen =>
					vasen_moottori <=	"01001111111111111111";
					oikea_moottori <= "11001111111111111111";
					vasen_suunta <= '1';
					oikea_suunta <= '1'; 
					State <= init;
	
				 when oikea =>
					vasen_moottori <=	"11001111111111111111";
					oikea_moottori <= "01001111111111111111";
					vasen_suunta <= '1';
					oikea_suunta <= '1'; 
					State <= init;

				when jyrkka_vasen =>
					vasen_moottori <=	"00000111111111111111";		
					oikea_moottori <= "11101111111111111111";
					vasen_suunta <= '1';
					oikea_suunta <= '1'; 
					State <= init;		

				when jyrkka_oikea =>
					vasen_moottori <=	"11101111111111111111";
					oikea_moottori <= "00000111111111111111";	  
					vasen_suunta <= '1';
					oikea_suunta <= '1'; 
					State <= init;	

				when taakse =>
					vasen_moottori <=	"11111111111111111111";	 
					oikea_moottori <= "11111111111111111111";	
					vasen_suunta <= '0';
					oikea_suunta <= '0'; 
					State <= init;		

		  	end case;
	
		end if;

	end process;
						
end Behavioral;