欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unity Arduino完美协作工具Uduino

程序员文章站 2022-03-05 10:37:17
...

前言

盆友搞了个Uduino插件,正好手边有Unity和Arduino,用按钮和灯泡实现Unity控制Arduino与Arduino控制Unity。

感谢Arduino跟Unity通讯,我的按钮的标准写法

环境搭建

对如何导入插件有疑问的话,建议查看官方****
****: Connect Arduino to Unity in less than 1 minute - Uduino

Unity插件导入部分

将插件导入Unity
Unity Arduino完美协作工具Uduino

Arduino代码上传部分

将Uduino代码上传至Arduino
Unity Arduino完美协作工具Uduino

Unity场景搭建部分

一个Cube(添加刚体组件)与一个Plane
Unity Arduino完美协作工具Uduino

硬件场景部分

灯泡链接GND和11管脚
按键连接GND和2管脚
Unity Arduino完美协作工具Uduino

控制代码

using System;
using System.Collections;
using System.Collections.Generic;
using Uduino;
using UnityEngine;

public class UduinoTest : MonoBehaviour
{
    /// <summary>
    /// 小灯管脚
    /// </summary>
    int pin11;
    /// <summary>
    /// 按钮管脚
    /// </summary>
    int pin2;

    /// <summary>
    /// Arduino设备
    /// </summary>
    UduinoDevice arduinoDevice;

    public GameObject myCube;


    // Start is called before the first frame update
    void Start()
    {
    	//当连接板子时触发
        UduinoManager.Instance.OnBoardConnected += OnArduinoConnected;
    }
    
    /// <summary>
    /// 当板子链接时
    /// </summary>
    private void OnArduinoConnected(UduinoDevice device)
    {
    	//拿到pin口
        pin11 = UduinoManager.Instance.GetPinFromBoard("11");
        pin2 = UduinoManager.Instance.GetPinFromBoard("2");
        //设置pin口控制方式
        UduinoManager.Instance.pinMode(pin11, PinMode.PWM);
        UduinoManager.Instance.pinMode(pin2, PinMode.Input_pullup);
    }
    
    float timeCount=0;
    int count;
    bool isUp = true;

    // Update is called once per frame
    void Update()
    {
        Huxideng();
        
		if (UduinoManager.Instance.hasBoardConnected())
		{
			//读取pin口数字量
	        int a = UduinoManager.Instance.digitalRead(pin2);
	        if (a == 0)
	        {
	            AddForcesToCube();
	        }
		}
    }

    /// <summary>
    /// 给Cube加力
    /// </summary>
    public void AddForcesToCube()
    {
        myCube.GetComponent<Rigidbody>().AddForce(Vector3.up * 2f);
    }

    /// <summary>
    /// 呼吸灯
    /// </summary>
    private void Huxideng()
    {
        if (UduinoManager.Instance.hasBoardConnected())
        {
            timeCount += Time.deltaTime;
            if (timeCount >= 0.01f)
            {
                if (isUp)
                {
                    count++;
                }
                else
                {
                    count--;
                }
                if (count >= 255)
                {
                    count = 255;
                    isUp = false;
                }
                if (count <= 0)
                {
                    count = 0;
                    isUp = true;
                }
                //写入pin口模拟量
                UduinoManager.Instance.analogWrite(pin11, count);
                timeCount = 0;
            }
        }
    }
}

使用效果

小灯为呼吸灯效果,按下按键Unity中的Cube会向上升起,编辑器右下角可以看到管脚传来的值。
Unity Arduino完美协作工具Uduino
这里可以看到灯泡忽明忽暗。
Unity Arduino完美协作工具Uduino

注意事项

当编辑器运行时,注意这两个地方不要有冲突的管脚,会造成0和1交替出现的情况。
Unity Arduino完美协作工具Uduino

相关标签: Arduino Unity