串口通信

Unity串口通信、接受和发送数据、C# 1、串口简介串行接口(串口)通常指COM接口,是采用串行通信方式的扩展接口。串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。特别适用于远距离通信。查看串口:右键 我的电脑-管理-设备管理器-端口选择一个端口,双击查看属性。这里通过串口属性,可以知道以下数据:波特率:这是一个衡量符号传输速率的参数。数据位:这是衡量通信中实际数据位的参数。停止位:用于表示单个包的最后一位。 阅读详情

首先最近制作串口通信的项目比较多所以稍微研究了下稍作整理以防忘记,希望也有大佬指正。做串口通信的首先要在菜单–edit–project setting–player 然后看inspector面板,最下面的other setting 把Api Compatibility Level 设置成。Net2..0否则无法使用using System.IO.Ports;如下图设置
这里写图片描述
之后就是上代码了

using RenderHeads.Media.AVProVideo;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.IO.Ports;
using UnityEngine;
using UnityEngine.UI;
using System.Threading;
using System.Xml;
using System.Text;
using System;
using System.Runtime.InteropServices;
public class GameControl : MonoBehaviour {
    /// <summary>
    /// Com端口变量
    /// </summary>
    private string[] allPorts;//所有端口的名字数组
    public string Com = "COM3";
    private byte[] writeData = { 01 };//发送16进制数据
    private bool isAlive = true;//是否可以读取数据
    SerialPort sp;//端口
    bool byte1 = false;
    bool byte2 = false;



    void Start()
    {

        //端口初始化
        allPorts = SerialPort.GetPortNames();//这一步是动态获取目前计算机检测到的所有串口
        sp = new SerialPort(Com, 19200, Parity.None, 8, StopBits.One);//串口名,波特率,奇偶校验位,数据位,停止位。 
        OpenPort();//打开端口
        //Write();
    }

    // Update is called once per frame
    void Update () {

        if (Input.GetKeyDown(KeyCode.A)||byte1==true)
        {
            byte1 = false;                  
        }

        if (Input.GetKeyDown(KeyCode.D) || byte2 == true)
        {
            byte2 = false;
        }

        }

        ///数据处理
        //bytesIndex = sp.Read(dataBytes, 0, dataBytes.Length);//读取数据
        //if (bytesIndex == 0)
        //{
        //    //当没有数据的时后返回
        //    return;
        //}
        //if(bytesIndex !=0)
        //{
        //    DataReceiveFunction(dataBytes);
        //}
    }
    /// <summary>
    /// 打开端口
    /// </summary>
    public void OpenPort()
    {
        sp.ReadTimeout = 100;//端口读取速度

        try
        {
            sp.Open();
            StartCoroutine(DataReceiveFunction());
        }
        catch (Exception ex)
        {
            Debug.Log(ex.Message);
        }
        //Debug.Log(allPorts[1]);
        //Debug.Log(writeData.Length);

    }
    /// <summary>
    /// 发送数据
    /// </summary>
    public void Write()
    {
        if (sp != null)
        {
            sp.Write(writeData, 0, writeData.Length);//写入数据
        }
    }
    /// <summary>
    /// 接受处理数据
    /// </summary>
    public IEnumerator DataReceiveFunction()
    {
        byte[] dataBytes = /*{ 02 };*/new byte[1];//存储数据
        //int bytesIndex = 0;//记录获取的数据长度
        //Debug.Log(dataBytes.Length);
        List<int> byteInt = new List<int>();//接收数据
       // string sbReadline2str = string.Empty;
        while (isAlive)
        {
            if (sp != null && sp.IsOpen)
            {
                try
                {

                    sp.Read(dataBytes, 0, dataBytes.Length);//读取数据
                    if(dataBytes.Length!=0)
                    {
                        byteInt.Add(Convert.ToInt16(dataBytes[0]));
                    }
                    if (byteInt.Count==1)
                    {
                        if (byteInt[0] == 02)
                        {
                            Debug.Log("从头开始并且发送01信号");
                            //Write();
                            StartCoroutine(GeneralMethod.instance.Wait(() => { Write();}, 1f));
                            byte1 = true;//发完信号之后播影片
                            byteInt.Clear();
                            //yield break;
                        }
                        if (byteInt[0] == 03)
                        {
                            //如果接受到信号03
                            _setVideoSeekSliderValue = 0;
                            byte2 = true;                          
                            byteInt.Clear();
                            Debug.Log("结束屏幕变黑");
                            //yield break;
                        }
                    }                  
                }
                catch(Exception ex)
                {
                    Debug.Log(ex.Message);
                }                           
            }
            yield return new WaitForSeconds(Time.deltaTime);
        }

    }
    /// <summary>
    /// 关闭端口
    /// </summary>
    public void ClosePort()
    {
        try
        {
            sp.Close();
        }
        catch (Exception ex)
        {
            Debug.Log(ex.Message);
        }
    }

    private void GarbageCollection()
    {
        if (Time.frameCount % 120 == 0) System.GC.Collect();
    }
    /// <summary>  
    /// 开始事件触发  
    /// </summary>  
    /// <param name="mp"></param>  
    void OnMediaPlayerStarted(MediaPlayer mp)
    {
        print("开始事件触发的后续");

    }
    /// <summary>  
    /// 结束事件触发  
    /// </summary>  
    /// <param name="mp"></param>  
    void OnMediaPlayerFinished(MediaPlayer mp)
    {
        print("结束事件触发的后续");
         byte[] writeData2= { 04 };//发送16进制数据
        sp.Write(writeData2, 0, writeData2.Length);//写入数据
    }
}
python中串口通信的步骤及实现 python内置的库函数确实很强大,serial库中包含了串口通信所用到的一些函数。本文用python实现了串口的一种简单通信。 代码实现: import serial#导入串口通信库 from time import sleep ser = serial.Serial() def port_open_recv():#对串口的参数进行配置 ser.port='com3' ser.baudrate=9600 ser.bytesize=8 ser.stopbits=1 阅读详情

相关推荐

【串口通信】K210与STM32串口通信、K210与OpenMV串口通信

近年来,电赛的题目越来复杂,仅单靠STM32或其他主控已经很难解决问题。比如2021年无人机题,小车题,以及今年的无人机题,必须要结合摄像头模块,才能准确完成任务。但加入了摄像头模块,首先要解决的问题就是如何让摄像头模块和主控之间进行通信,如果无法通信,就算在摄像头模块上识别做的再好也没有用。介绍一下我是怎么让K210和STM32通信、K210和OpenMV通信。

adas323的博客 2万+

Unity3D安卓端串口通信

U3D串口通讯安卓端

gaoyu123456789的博客 3248

Arduino串口通信

文章目录通信类型Arduino串口通信硬串口软串口 通信类型 通信是用来在不同电子设备之间交换数据用的技术,其实就是要实现不同电子设备之间的“通讯对话”。 Arduino串口通信 Arduino采用USART通信模式,可以有硬串口,软串口两种实现方式。 通常将Arduino UNO上自带的串口0(RX)、1(TX)称为硬件串口,可与外围串口设备通信。而使用SoftwareSerial类库模拟成的串口,称为软件模拟串口(简称软串口)。如果要连接更多的串口设备,可以使用软串口。 硬串口 硬串口的操作类为Har

xiaoshihd的博客 5万+

unity完整读取串口数据方法

使用过一些网上一些大神的代码后,或多或少都有点小缺陷,关于数据读取缺失或者一些不太满意的问题,于是整合了一下。 一次性读取完整串口数据。 using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO.Ports; using System.Threading; us...

u012636225的博客 4281

QT串口通信

如果用qt写程序作为上位机,然后通过和usb和下位机通信的时候,就需要用到qt中的串口通信了。

QtCompany的博客 6987

STM32——串口通信原理

STM32——串口通信一、硬件部分1、RS232标准2、USB转串口(TTL)3、原生的串口到串口(TTL->TTL)二、串口通信协议三、STM32串口通信功能框图 一、硬件部分 RS232通信和TTL的区别只有一点,那就是在于硬件机制(电平),如果需要做RS232和TTL的转换,那就需要借助转换芯片来完成。 TTL RS232 0-5V -15 - 15V 高电平置1,低电平置0 高电平置0,低电平置1 1、RS232标准 2、USB转串口(TTL) 3、原生的串口到串

qq_36535414的博客 8564

Qt实现串口通信(C++实现串口通信小助手)---串口收发及串口数据解码、串口通信模拟器。

Qt实现串口通信示例 前言:以下串口通信示例并不完全属于原创,参考了现有网上前辈们的资源,最后结合部分个人的思想,所以下述博客会将实现的原理及代码的案例进行公开。 这里我们先上效果图: 一、串口通信简介 串口通信是上下位机进行通信的一种常用的通信协议...

zijinmu69的博客 4万+

【STM32串口通信】

STM32串口通信,阻塞式、中断式、DMA

m0_64750258的博客 2943

【Iot】什么是串口?什么是串口通信?串口通信(串口通讯)原理,常见的串口通信方式有哪些?

串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。 串口可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。串口通信(Serial Communications)是串口按位(bit)发送和接收字节的通信方式,它是嵌入式物联网领域中常用的通讯方式。 典型的串口通信使用3根线完成,分别是发送、接收、地线。 由于串口通信是异步的,所以端口能够在

余浩的博客 2万+

【Unity实战100例】Unity串口通讯的消息接收解析和

本博客demo可以直接拿来商用,串口通信(Serial Communication), 是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。

纯技术流日常开发商业开发记录总结等 5220

LabVIEW实现串口通信

在LabVIEW中串口通信使用范围非常广泛,例如,通过串口使用ModBus协议驱动仪器、串口驱动PLC设备等。在LabVIEW中有专业的VI(VISA)可以驱动串口进行数据读、写操作,在函数面板 → 仪器I/O → 串口子面板中。

不脱发的程序猿 3万+

树莓派串口通信

树莓派串口通信 (一) 简介 串口通信工作方式为:全双工 通过串口通信可以实现多机通信 树莓派与电脑实现串口通信: 使用USB-TTL转换模块(USB转串口模块)或USB转串口线将树莓派与电脑连接, TXD连接RXD,交叉连!!!且USB-TTL转换模块必须接地,否则因为电压原因数据交互失败 初次使用树莓派的串口进行通信需要进行修改配置: 修改后树莓派不能用串口,要用需要加回标记部分 删除cmdline.txt文件标记部分 cd /boot/ sudo vi cmdline.txt dwc_otg.l

one goto one 的博客 7400

Unity使用安卓串口附教程

unity 安卓串口接发代码:unity环境在android手机调用手机串口,该解压包内附详细图文教程,按教程来操作即可。

Linux下的串口通信

串口通信

zxz_Fine的博客 2544

Unity串口消息发送与接收

Unity串口消息发送与接收

基于拟蒙特卡洛模拟法的随机潮流计算matlab程序

由式(4-11)可知,蒙特卡洛模拟法的计算量不受电力系统规模大小影响,因此该方法在一些复杂的电力系统中可以得到应用,包括处理电力系统中有多个间歇性新能源接入的问题,解决系统中多个节点之间相关性问题等等。本章在此基础上提出了基于拟蒙特卡洛模拟的随机潮流计算方法,并且对拟蒙特卡洛法中的拟随机数序列进行了改进,大大提高了随机潮流的计算效率。模拟法的具体思路如下:基于实际工程问题的求解需要,建立与之相对应的随机模拟过程和随机概率模型,使得它们的参数,包括概率分布或者数学期望,能够等于问题的实际解;

weixin_47365903的博客 1797

STM32F407——串口通信

STM32F407——串口通信 文章目录STM32F407——串口通信前言一、串口通信的概念及分类1、串口及串口通信概念2、串口分类二、串口配置与调试1、配置步骤2、串口收发功能测试结语 前言 本文将对串口通信的分类和基于 stm32 的串口配置进行介绍,以及如何使用串口调试助手进行串口收发功能的调试,旨在帮助还不会使用 stm32 单片机串口资源进行通信的家人们快速学会如何使用串口来进行通信。 (纯干货、快速上手、零基础也能会!!!) 一、串口通信的概念及分类 1、串口及串口通信概念 (1)串口,即串行接

Cyy0807的博客 3万+

数据分析—用户行为数据分析

一般价值用户(R高F高M低):用户处于购买活跃期,感兴趣的商品多,购买次数少 → 针对该部分客户,目的就是要让他们购买,所以可以和运营部门沟通,降低利润,给出有力折扣促进购买,进而转为重要价值用户。重要价值用户(R高F高M高)维护:用户处于购买活跃期,感兴趣的商品多,购买次数也多 → 针对兴趣产品,保持一定频率的触达,持续维护。

m0_74091312的博客 1420

串口通信简介

串口通信,UART、RS232、RS485

FCF_GOODIX的博客 1万+

14 Prompt 的边界:什么时候必须用 RAG 或微调

Prompt 不是万能解法。本文用“改输入、补知识、改模型”这条主线,讲清什么时候继续优化 Prompt,什么时候必须引入 RAG、工具调用或微调,帮助你避免用重技术掩盖轻问题。

老于的笔记的专栏 209

智能车图像处理1-基础图像规格

从厂家摄像头的库函数中,我们可以直接得到完整图像的灰度数组,经过二值化之后(算力允许,可以考虑大津法),就是我们要处理的0-1二值图像了。本系列所有的文章中,我们的图像规格如下。

taiyuezyh的博客 4345

Java实现串口通信

Java实现串口通信串口通信MODBUSJava实现串口通信RXTX串口通信开源框架(JAVA)获取设备可以串口打开指定串口设置监听往串口中发送数据从串口中读取数据关闭串口调试工具(自行百度)注意 串口通信 所谓串口,指的是串行通信接口(com),区别于并行通信,一次性可传输8位数据,不会发生数据位序混乱,但是比并行通信传输时间长得多,可以双向通信,主要用于设备与设备之间的通信,常用的主要有两类 1.RS232(一对一数据传输,适合本地设备之间的通信) 2.RS485(一对多数据传输,适合远程设备之间的通信

m0_38110240的博客 8470

【ESP 保姆级教程】玩转emqx数据集成篇④ ——数据桥接之HTTP服务

主要是学习数据桥接功能以及构建自己的http服务器,这是一个非常有用的功能。包括各种传感器上报基本上都需要数据桥接功能支持,所以还是希望认真学习这一块开发,然后结合数据库存储等等知识点进行进一步学习。

单片机菜鸟哥的博客 1307
上一篇: OpenCv3入门1,图像处理
下一篇: unity打包全屏显示以及Unity的一些打包设置
lexjay
博客等级 码龄10年 13粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值