harian untung99play.xyz

untung99play.xyz: How to integrate Arduino with Unity


Untung99 menawarkan beragam permainan yang menarik, termasuk slot online, poker, roulette, blackjack, dan taruhan olahraga langsung. Dengan koleksi permainan yang lengkap dan terus diperbarui, pemain memiliki banyak pilihan untuk menjaga kegembiraan mereka. Selain itu, Untung99 juga menyediakan bonus dan promosi menarik yang meningkatkan peluang kemenangan dan memberikan nilai tambah kepada pemain.

Berikut adalah artikel atau berita tentang Harian untung99play.xyz dengan judul untung99play.xyz: How to integrate Arduino with Unity yang telah tayang di untung99play.xyz terimakasih telah menyimak. Bila ada masukan atau komplain mengenai artikel berikut silahkan hubungi email kami di koresponden@untung99play.xyz, Terimakasih.

In this tutorial you will learn how Unity and Arduino can communicate using the serial port. This tutorial requires both C# and Arduino scripts; the labels  Unity  and  Arduino  will be used to avoid confusion.

The topic of connecting Arduino to Unity is further expanded in Asynchronous Serial Communication, where you can also download the entire Unity package.

Step 0: Configuring…

The communication between Arduino and the PC is mediated using the serial port. This method is the default one to upload sketches, so we’ll be using it also to exchange messages with Unity. If this is the first time you are doing it, you’ll need to follow these extra steps.

 Unity  The class SerialPort is the one that mediates such communication in C#. However, Unity doesn’t usually include the necessary libraries to use it. To compensate for this, we need to force Unity to include the full .NET 2.0 library in its executables:

  1. Go on Edit | Player Settings to open the PlayerSettings in the inspector;
  2. From Optimization, look for Api Compatibility Level and select .NET 2.0.

 Arduino  Arduino doesn’t come with a sophisticated library for the serial port. While C# has all the expected functions to send strings, Arduino simply doesn’t. This is very frustrating and is often a strong limitation for beginners. To compensate this, I’ll be using Steven Cogswell‘s ArduinoSerialCommand library. Follow these steps to install it:

  1. Download the entire repository by clicking “Download ZIP” from its GIT page;
  2. Extract the ZIP file and place its content in C:\Users\\Documents\Arduino\SerialCommand\ (make sure that folder contains the SerialCommand.cpp file);
  3. Restart the Arduino IDE.

Step 1: Opening…

 Unity  To initialise the serial port in C#, we need its address (or port) and speed (also called baud rate).

using System.IO.Ports;

stream = new SerialPort("COM4", 9600);
stream.ReadTimeout = 50;
stream.Open();

While the baud rate is determined by the Arduino code, we cannot chose the name for the serial port. It is automatically assigned by the OS depending on which device and port you are using.

 Arduino  Now that SerialCommand has been installed, we can use it in our sketch. The library allows to specify commands that can be received on the serial port. For this toy example, we want to define a command called “PING”. When we receive such string from Unity, we’ll send a “PONG” back. Let’s start by defining the command; its code will be stored in the pingHandler function.

#include 
#include 
SerialCommand sCmd;

void setup() {
	Serial.begin(9600);
	while (!Serial);

	sCmd.addCommand("PING", pingHandler);
}

The 9600 used to initialise the serial port represents its baud rate. This value must match the one used in the C# script.

Step 2: Writing…

 Unity  Writing a string to the serial port in C# is relatively easy.

public void WriteToArduino(string message) {
	stream.WriteLine(message);
        stream.BaseStream.Flush();
}

If there is a problem, WriteLine will throw a IOException (read more here). We flush the stream to make sure the data it sent to the Arduino, without any buffering. Following our toy protocol, we should send a “PING” to Arduino.

WriteToArduino("PING");

 Arduino  As discussed before, the SerialCommand library takes care of reading strings from the serial port for us. To do this, we need to update the loop function.

void loop () {
	if (Serial.available() > 0)
		sCmd.readSerial();
}

The function readSerial is the one where the magic happens; it reads strings from the serial port and invokes the right handler. If it receives a “PING”, it will execute pingHandler:

void pingHandler (const char *command) {
	Serial.println("PONG");
}

This will write “PONG” on the serial port. You can also use Serial.println to send data from Arduino to Unity at any time.

Step 3: Reading…

 Unity  Reading from the serial port is theoretically as easy as writing, since C# offers a very intuitive stream.ReadLine() function.

public string ReadFromArduino (int timeout = 0) {
	stream.ReadTimeout = timeout;        
	try {
		return stream.ReadLine();
	}
	catch (TimeoutException e) {
		return null;
	}
}

However, there’s a catch. How long do you want to wait for before considering the read failed? If you are waiting indefinitely for Arduino to send data, this might block the execution of your program. Reading from the serial port is, essentially, a system call and can introduce lag. A lot of lag. To avoid this, we should do very quick reads alternated by quick waits. In order to implement an asynchronous waiting mechanism, we have to use coroutines.

public IEnumerator AsynchronousReadFromArduino(Action callback, Action fail = null, float timeout = float.PositiveInfinity) {
    DateTime initialTime = DateTime.Now;
    DateTime nowTime;
    TimeSpan diff = default(TimeSpan);

    string dataString = null;

    do {
        try {
            dataString = stream.ReadLine();
        }
        catch (TimeoutException) {
            dataString = null;
        }

        if (dataString != null)
        {
            callback(dataString);
            yield break; // Terminates the Coroutine
        } else
            yield return null; // Wait for next frame

        nowTime = DateTime.Now;
        diff = nowTime - initialTime;

    } while (diff.Milliseconds 

Which can be invoked like this:

StartCoroutine
(
    AsynchronousReadFromArduino
    (   (string s) => Debug.Log(s),     // Callback
        () => Debug.LogError("Error!"), // Error callback
        10000f                          // Timeout (milliseconds)
    )
);

The code below starts the AsynchronousReadFromArduino coroutine, passing three arguments. The first one is a function (created on the spot) which get the string read from Arduino and logs it. The second one is a callback if the reading fails, and the third one is the timeout (10 seconds).

 Arduino  There are cases in which you might want to send parameters from Unity to Arduino. Let’s do this with an echo function.

void echoHandler () {
  char *arg;
  arg = sCmd.next();
  if (arg != NULL)
    Serial.println(arg);
  else
    Serial.println("nothing to echo");
}

We can use the function next to get the next argument provided on the serial command. For instance, if we send from Unity “ECHO message”, “message” will be the first parameter. If next returns NULL, it means there are no more parameters.

Step 4: Communicating…

Now that all the pieces are here, you just have to implement your own communication protocol. Arduinos are usually used as sensors, constantly sending updates to Unity. If this is your case, you should not make the mistake of doing something like this:

void loop () {
    // Get data
    // ...

    Serial.println(data);
}

Is very likely that this will overflow the serial port buffer, causing either a crash or a severe lag. What you should do instead is creating a protocol in which Arduino is sending data only when is queried by a “PING” from Unity. This ensures data is always fresh and minimises lags.

Downloads

Become a Patron!

This article presented a simple, yet effective way to connect Arduino with Unity. The necessary files are available for download on Patreon, in two versions:

Conclusion

Last year at GDC a guy approached me and asked my opinion about UNIDUINO, an extension to connect Arduino with Unity. It was only after I said something on the line of “I would never pay so much to use it” that he introduced himself as the creator. Despite this not-so-great start, our conversation highlighted an important issue when it comes to development: how much time are you willing to invest into something? Many software developers have little to no experience with hardware, and they rather spend €32 than a week of headaches to connect Unity to Arduino. To misquote Mike Bithell during his talk at Develop Brighton a couple of years ago, some developers have “more money than time“, If you are going to use an Arduino for your project, you definitely need to invest some money in it. But if you think paying for an extension is out of your budget, this tutorial is definitely here to help. Despite not providing the full range of functions of UNIDUINO, it is surely a good starting point which will suit the majority of applications.

How to start with Arduino

The most annoying part of working with hardware is that you’ll constantly need new components to build things. If you are new to Arduino, my advice is to start with the Arduino Starter Kit. It has a lot (I mean… a lot!) of components and it comes with some great instructions.  If you have a little bit more experience, you might want to buy the components you need separately. In this case, the Arduino Uno is the “default” option you should go for.

If you have already experience with hardware, I advise you to start using Teensy 3.1 instead. It’s a micro-controller fully compatible with the Arduino IDE. It’s compact and more powerful, although it usually doesn’t come with pins. There’s also a Teensy 3.1 Starter Kit which comes with a very bright Color LCD screen. I also suggest a book I particularly liked: 30 Arduino Projects for the Evil Genius. I got it few years ago and it helped me to understand how to use all the most common components.

💖 Support this blog

This website exists thanks to the contribution of patrons on Patreon. If you think these posts have either helped or inspired you, please consider supporting this blog.

📧 Stay updated

You will be notified when a new tutorial is released!

📝 Licensing

You are free to use, adapt and build upon this tutorial for your own projects (even commercially) as long as you credit me.

You are not allowed to redistribute the content of this tutorial on other platforms, especially the parts that are only available on Patreon.

If the knowledge you have gained had a significant impact on your project, a mention in the credit would be very appreciated. ❤️🧔🏻

}