Unity Arduino完美协作工具Uduino

Unity Arduino完美协作工具之Uduino

  • 前言
  • 环境搭建
    • Unity插件导入部分
    • Arduino代码上传部分
    • Unity场景搭建部分
    • 硬件场景部分
  • 控制代码
  • 使用效果
  • 注意事项

前言

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

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

环境搭建

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

Unity插件导入部分

将插件导入Unity
Unity Arduino完美协作工具Uduino_第1张图片

Arduino代码上传部分

将Uduino代码上传至Arduino
Unity Arduino完美协作工具Uduino_第2张图片

Unity场景搭建部分

一个Cube(添加刚体组件)与一个Plane
Unity Arduino完美协作工具Uduino_第3张图片

硬件场景部分

灯泡链接GND和11管脚
按键连接GND和2管脚
Unity Arduino完美协作工具Uduino_第4张图片

控制代码

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

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

    /// 
    /// Arduino设备
    /// 
    UduinoDevice arduinoDevice;

    public GameObject myCube;


    // Start is called before the first frame update
    void Start()
    {
    	//当连接板子时触发
        UduinoManager.Instance.OnBoardConnected += OnArduinoConnected;
    }
    
    /// 
    /// 当板子链接时
    /// 
    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();
	        }
		}
    }

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

    /// 
    /// 呼吸灯
    /// 
    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_第5张图片
这里可以看到灯泡忽明忽暗。

注意事项

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

你可能感兴趣的:(Unity,STM32,Unity,Arduino)