Bienvenido a un nuevo conocimiento. Hoy vamos a estar mostrando, acorde al videotutorial de nuestro canal Escuela de Juegos, como conectar Arduino y Unity, en éste caso para enviar un dato.


Lo que haremos, es que al presionar un botón en nuestro circuito de Arduino, vamos a enviar una señal mediante comunicación serial, para que en nuestro videojuego reaccione de una determinada forma, pudiendo funcionar como Joystick por ejemplo.


const int buttonPin = 2;
const int buttonPin2 = 3;
int buttonState = 0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(buttonPinINPUT); //izq
  pinMode(buttonPin2INPUT); //der
}

void loop() {

  //Izq
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    Serial.println(«boton1_e»);
  } 

  //Der
  buttonState = digitalRead(buttonPin2);

  // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    Serial.println(«boton2_e»);
  } 
  //
  delay(2);
}


Como podemos ver en nuestro código de Arduino, lo que hacemos es establecer la comunicación serial, y luego declarar los botones o pulsadores que usaremos.


Finalmente, si alguno de los dos botones está presionado, enviamos un «string» o cadena de texto, con el dato deseado, para reinterpretarlo luego en Unity.


public SerialPort puerto = new SerialPort(«COM4», 9600);


Comenzamos efectuando la comunicación serial. Ahora vamos a proceder a configurarla en detalle.


    puerto.ReadTimeout = 30;

    puerto.Open();


Recordá que la ubicación de éstos datos, especialmente los que vienen a continuación, van a ir según como tengas configurado tu jugador o lo que vos quieras que sea el efecto resultante de la presión de los botones. En mi caso lo tengo en el Script Player, correspondiente al jugador. 

 

Ahora vamos a chequear si hay un dato nuevo, y procesarlo.


      if(puerto.IsOpen)

    {

        string dato_recibido = puerto.ReadLine();

    }


Ahora necesitamos regular ésto, para que no genere errores ni tampoco sobre sature. Para ello haremos un «try», lo cual ejecutará solo si es posible la lectura.


    try{

        if(puerto.IsOpen)

        {

            string dato_recibido = puerto.ReadLine();

        }

    }catch(System.Exception ex1)

    {

        ex1 = new System.Exception();

    }


Solo quedaría interpretar el dato enviado, y según eso hacer lo que nos plazca, en mi caso el movimiento.


 try{

        if(puerto.IsOpen)

        {

            string dato_recibido = puerto.ReadLine();

            if(dato_recibido.Equals(«boton1_e»))

            {

                //MOVER IZQ

            }

            else if(dato_recibido.Equals(«boton2_e»))

            {

                //MOVER DER

            }

        }

    }catch(System.Exception ex1)

    {

        ex1 = new System.Exception();

    }