Cześć!
Dziś zajmiemy się komunikacją między Unity a Arduino przy użyciu Monitora szeregowego.
No to zaczynajmy !
Do komunikacji Unity z Portem szeregowym użyjemy klasy SerialPort. Jednak Unity domyślnie nie ma zaimplementowanych wszystkich bibliotek C# więc musimy je zmusić do używania pełnej biblioteki .NET 2.0
- Klikamy Edit -> Project Settings -> Player
2. W inspektorze po prawej klikamy Other Settings oraz szukamy zakładki Optimization. W Api Compatibility Level zaznaczamy .NET 2.0
Gdy mamy już skonfigurowany silnik, możemy przejść do inicjalizacji komunikacji Unity z portem szeregowym.
Aby komunikować się z portem szeregowym musimy stworzyć nowy obiekt SerialPort nazwiemy go tutaj „arduino” oraz podać port wraz z szybkością.
1 2 3 4 |
using System.IO.Ports; SerialPort arduino = new SerialPort("COM6", 9600); arduino.Open(); |
Port oraz szybkość podane są tutaj jako przykład wszystko zależy od tego do, którego portu podpięliśmy Arduino oraz jaką ustawiliśmy szybkość w kodzie Arduino, ale o tym później.
Teraz przejdźmy do praktycznego przykładu. A dokładniej do „wysłania” oraz odebrania zmiennej a.
Zacznijmy od Arduino. Kod tutaj jest bardzo prosty, ponieważ jego jedyne zadanie to „wypisanie” zmiennej a na monitor szeregowy (więcej o monitorze szeregowym dowiesz się TUTAJ)
1 2 3 4 5 6 7 8 9 |
void setup() { int a=11; Serial.begin(9600); } void loop() { Serial.println(a); delay(1000); } |
Gdy mamy już działający skrypt wysyłający możemy przejść do przechwycenia danych w Unity.
Tworzymy nowy Game Object (np. Cube) oraz skrypt (np. Test)
Skrypt test wygląda mniej więcej tak:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO.Ports; public class Test : MonoBehaviour { SerialPort arduino = new SerialPort("COM6", 9600); void Start () { arduino.Open(); } void Update () { try{ Debug.Log(arduino.ReadLine()); } catch(System.Exception){ } } } |
Tutaj też kod nie jest skomplikowany. Tworzymy nowy obiekt „arduino”, definiujemy szybkość oraz port, otwieramy port szeregowy oraz w metodzie Update tworzymy wyjątek, który odczytuje dane z portu szeregowego.
Do wcześniej utworzonego obiektu dodajemy nasz skrypt oraz uruchamiamy projekt.
Po uruchomieniu na dole w konsoli powinna co sekundę powinna pojawiać się wartość naszej zmiennej a.
JUŻ! To wszystko na dziś. Teraz jedynie od Ciebie zależy co dalej zrobisz z danymi pobranymi z Arduino 😀 A można zrobić naprawdę wiele.
Jeżeli macie jakieś pytania lub propozycje piszcie w komentarzach.