using System; using System.Collections; using System.IO.Ports; using UnityEngine; // УСТАРЕВШИЙ КОД , СЕЙЧАС РАБОТА ЧЕРЕЗ ComWrapper public class ArduinoController : MonoBehaviour { public static ArduinoController Instance; public string portName = "COM3"; public int baudRate = 115200; private SerialPort serial; void Awake() { if (Instance == null) { Instance = this; DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); } } void Start() { portName = SerialPort.GetPortNames()[^1]; serial = new SerialPort(portName, baudRate); serial.ReadTimeout = 50; // не блокирует поток try { serial.Open(); Debug.Log("Arduino подключена"); } catch (Exception e) { Debug.LogError("Ошибка подключения: " + e.Message); } } void Update() { // Приём данных от Arduino if (serial != null && serial.IsOpen && serial.BytesToRead > 0) { try { string line = serial.ReadLine(); Debug.Log("Получено: " + line); // можно парсить команду и запускать эффекты } catch (TimeoutException) { } } } public void SendCommand(int cmd) { if (serial != null && serial.IsOpen) { serial.WriteLine(cmd.ToString()); Debug.Log("Отправлено: " + cmd); } } public void Blink(float duration = 0.3f) { StartCoroutine(BlinkCoroutine(duration)); } private IEnumerator BlinkCoroutine(float duration) { if (serial == null) { yield break; } serial.WriteLine("80101"); // включить белым yield return new WaitForSeconds(duration); serial.WriteLine("80100"); // выключить } void OnApplicationQuit() { if (serial != null && serial.IsOpen) serial.Close(); } }