import processing.serial.*; // imports library for serial communication
import java.awt.Robot; // imports library for key press or release simulation
import java.awt.event.KeyEvent; // imports library for reading the data from the serial port
import java.io.IOException;

Serial port; // defines Object Serial
Robot robot; // defines Object Robot

String data;
int iv=0;

void setup()
  {

    try 
       {
          robot = new Robot();
       }
    catch (Exception e)
       {
          e.printStackTrace();
          exit();
       }

    delay(2000);
    size (800, 800);
    port = new Serial(this,"COM4", 9600); // starts the serial communication
    port.bufferUntil('.'); // reads the data from the serial port up to the character '.'. So actually it reads this: 215,214/141;315:314<316!314?315.
    background(0,0,0);
 }

void draw()
  {
    print("data:");
    print(data);

    print(" v= ");
    println(iv);

    if(iv == 1)
       {
          robot.keyPress(KeyEvent.VK_UP);
          robot.keyRelease(KeyEvent.VK_LEFT);
          robot.keyRelease(KeyEvent.VK_RIGHT);
          print(" UP "); 
       }

    else if(iv ==2)
      {   
         robot.keyPress(KeyEvent.VK_DOWN);
         robot.keyRelease(KeyEvent.VK_LEFT);
         robot.keyRelease(KeyEvent.VK_RIGHT);
         print(" DOWN ");
      }
   else if(iv == 3)
     {
       robot.keyPress(KeyEvent.VK_LEFT);
       print(" LEFT ");
     }
   else if(iv == 4)
     {
        robot.keyPress(KeyEvent.VK_RIGHT);
        print(" RIGHT ");  
     }

   else if(iv==6)
     {
        robot.keyPress(KeyEvent.VK_SHIFT);
        print("SHIFT");
     }
   else if(iv==5)
      {
        robot.keyPress(KeyEvent.VK_SPACE);
        print(" SPACE ");
      }

   else if(iv==0)
     {
       robot.keyRelease(KeyEvent.VK_UP);
       robot.keyRelease(KeyEvent.VK_DOWN);
       robot.keyRelease(KeyEvent.VK_LEFT);
       robot.keyRelease(KeyEvent.VK_RIGHT);
       robot.keyRelease(KeyEvent.VK_A);
       robot.keyRelease(KeyEvent.VK_S);
       robot.keyRelease(KeyEvent.VK_W);
       robot.keyRelease(KeyEvent.VK_D);
       robot.keyRelease(KeyEvent.VK_SPACE);
       robot.keyRelease(KeyEvent.VK_ENTER);
       robot.keyRelease(KeyEvent.VK_SHIFT);  
     } 
 
 }

void serialEvent (Serial port) // starts reading data from the Serial Port
   {

      data = port.readStringUntil('.'); // reads the data from the serial port up to the character '.' and it sets that into the String variable "data". So actually it reads this: 215,214/141;315:314<316!314?315.
      data = data.substring(0,data.length()-1); // it removes the '.' from the previous read. So this will be the String "data" variable: 215,214/141;315:314<316!314?315

      // Finding the indexes in the data and setting the variables from the sensors by taking from the String "data" the appropriate values that are between the characters in the "data" String

     iv= int(data);
   }
