久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6499|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

本人做C#軟件開發(fā)的,怎么用C#控制單片機(jī)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:347929 發(fā)表于 2018-6-8 23:08 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
一直做ERP開發(fā),現(xiàn)在想做個(gè)程序讀取單片機(jī)的溫度、濕度等數(shù)據(jù)顯示到ERP程序中,請(qǐng)問怎么入手
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:348005 發(fā)表于 2018-6-9 09:02 | 只看該作者
http://www.zg4o1577.cn/bbs/dpj-82791-1.html不知道能不能幫助到你
回復(fù)

使用道具 舉報(bào)

板凳
ID:123289 發(fā)表于 2018-6-9 21:11 | 只看該作者
跟我配合就可以了,我這里的項(xiàng)目需要與ERP溝通。
回復(fù)

使用道具 舉報(bào)

地板
ID:349147 發(fā)表于 2018-6-11 07:52 | 只看該作者

通過串口通訊,從相應(yīng)的串口讀出和寫入數(shù)據(jù)啊。串口初始化時(shí)要定義好協(xié)議支持的波特率等,以下是我用C#讀出測距模塊距離數(shù)值的示例代碼:
using System.Collections;
using System.IO.Ports;
using System;
using System.Collections.Generic;
using System.Threading;
namespace Set3
{
    public class 縱深探測
    {
        static SerialPort sp = null;
     
        public enum 波特率
        {
            br9600,
            br115200
        };
        public string depthport = "COM6";
        public enum 深度模式
        {
            遠(yuǎn)距,
            快速,
            高精度,
            普通
        };
        public 波特率 碼率1 = 波特率.br9600;
        public 深度模式 模式 = 深度模式.高精度;

        Thread dataReceiveThread;
        int[] data = new int[6];        //用于存儲(chǔ)depth數(shù)據(jù)
        static Byte[] command = new Byte[3];     //控制指令代碼
        static int distance = 2500;
        static int detectmode = 2;
        static bool vbrflag = false;
        static int tms=1, itv=0;
        static Thread vbrThread;
        void Start()
        {
            StartCoroutine("InitSP");
        }
        void Update()
        {
            distance = (data[2] << 8) | data[3];
            detectmode = data[4];

        }
        void OnDestroy()
        {
            //dataReceiveThread.Abort();
            //vbrThread.Abort();
            ClosePort();
        }
        float na(float x)
        {
            if (x > 32767f) return x - 65536f;
            else return x;
        }
        void setDetectMode()
        {
            Byte cmdcode, checksum;
            switch (模式)
            {
                case 深度模式.遠(yuǎn)距:
                    cmdcode = 0x50;
                    checksum = 0xF5;
                    break;
                case 深度模式.快速:
                    cmdcode = 0x51;
                    checksum = 0xF6;
                    break;
                case 深度模式.高精度:
                    cmdcode = 0x52;
                    checksum = 0xF7;
                    break;
                case 深度模式.普通:
                    cmdcode = 0x53;
                    checksum = 0xF8;
                    break;
                default:
                    cmdcode = 0;
                    checksum = 0;
                    break;
            }
            command[0] = 0xA5;
            command[1] = cmdcode;
            command[2] = checksum;
            sp.Write(command, 0, 3);
        }
        void setBaudRate()
        {
            Byte cmdcode, checksum;
            switch (碼率1)
            {
                case 波特率.br9600:
                    cmdcode = 0xAE;
                    checksum = 0x53;
                    break;
                case 波特率.br115200:
                    cmdcode = 0xAF;
                    checksum = 0x54;
                    break;
                default:
                    cmdcode = 0;
                    checksum = 0;
                    break;
            }
            command[0] = 0xA5;
            command[1] = cmdcode;
            command[2] = checksum;
            sp.Write(command, 0, 3);
        }
        public static bool getportstat()
        {
            return sp.IsOpen;
        }
        public static int getdetectmode()
        {
            return detectmode;
        }
        public static int getdistance()
        {
            return distance;
        }
        IEnumerator InitSP()//加載配置
        {
            OpenPort();
            dataReceiveThread = new Thread(new ThreadStart(DataReceiveFunction));
            dataReceiveThread.Start();
            yield return sp;
            setBaudRate();
            setDetectMode();
        }
        public void OpenPort()
        {
            sp = new SerialPort(depthport, 9600, Parity.None, 8, StopBits.One);
            sp.ReadTimeout = 400;
            try
            {
                sp.Open();
            }
            catch (Exception ex)
            {
                Debug.Log(ex.Message);
            }
        }
        public void ClosePort()
        {
            try
            {
                sp.Close();
            }
            catch (Exception ex)
            {
                Debug.Log(ex.Message);
            }
        }
        void DataReceiveFunction()
        {
            if (!sp.IsOpen)Debug.Log(depthport+" cannot open");
            else Debug.Log(depthport + " successful inited");
            byte[] buffer = new byte[128];
            int bytes = 0;
            //定義協(xié)議
            int flag0 = 0x5A;
            int flag1 = 0x5A;
            int index = 0;          //用于記錄此時(shí)的數(shù)據(jù)次序
            while (true)
            {
                if (sp != null && sp.IsOpen)
                {
                    try
                    {
                        bytes = sp.Read(buffer, 0, buffer.Length);
                        for (int i = 0; i < bytes; i++)
                        {
                            if (buffer[i] == flag0 || buffer[i] == flag1)
                            {
                                index = 0;//次序歸0
                                continue;
                            }
                            else
                            {
                                if (index >= data.Length) index = data.Length - 1
                                data[index] = buffer[i];//將數(shù)據(jù)存入data中
                                index++;
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        if (ex.GetType() != typeof(ThreadAbortException))
                        {
                            Debug.Log(ex.Message);
                        }
                    }
                }
                Thread.Sleep(10);
            }
        }

        public static void startvbr(int times,int interval)
        {
            vbrflag = true;
            command[0] = 0xA5;
            command[1] = 0xAA;
            command[2] = 0x4F;
            tms = times;
            itv = interval;
            vbrThread = new Thread(new ThreadStart(vbrloop));
            vbrThread.Start();
        }
        static void vbrloop()
        {
            if (tms == 0)
            {
                while (vbrflag)
                {
                    sp.Write(command, 0, 3);
                    Thread.Sleep(100 + itv);
                }
            }                       //持續(xù)振動(dòng)
            else
            {
                for (int i = 0; i < tms; i++)
                {
                    if (vbrflag) sp.Write(command, 0, 3);
                    Thread.Sleep(100 + itv);
                }
            }                       //按設(shè)定次數(shù)和間隔振動(dòng)
            stopvbr();
        }
        public static void stopvbr()
        {
            vbrflag = false;
            vbrThread.Abort();
        }

    }
    //Byte0:0x5A  //幀頭
    //Byte1:0x5A  //幀頭
    //Byte2:0x15  //數(shù)據(jù)類型
    //Byte3:0x03  //數(shù)據(jù)量
    //Byte4:0x00~0xFF //數(shù)據(jù)高8位
    //Byte5:0x00~0xFF //數(shù)據(jù)低8位
    //Byte6:0x00~0xFF //測量模式
    //0x03 一般測量  0~1.2m 35ms ±2cm
    //0x02 高精度(默認(rèn)) 0~1.2m 200ms ±1cm
    //0x01 快速測量  0~1.2m 22ms ±3cm
    //0x00 長距離   0~2m 35ms ±4cm
    //Byte7:0x00~0xFF //校驗(yàn)和(僅保留低位)
    //指令設(shè)置:0xA5+command+sum
    //輸出模式設(shè)置
    //0xA5+0x45+0xEA 連續(xù)輸出
    //0xA5+0x15+0xBA 查詢輸出
    //保存配置
    //0xA5+0x25+0xCA 保存波特率、測量模式、輸出模式設(shè)置
    //測量模式設(shè)置
    //0xA5+0x50+0xF5 長距離
    //0xA5+0x51+0xF6 快速
    //0xA5+0x52+0xF7 高精度()
    //0xA5+0x53+0xF8 一般
    //波特率設(shè)置
    //0xA5+0xAE+0x53 9600()
    //0xA5+0xAF+0x54 115200

}
回復(fù)

使用道具 舉報(bào)

5#
ID:366559 發(fā)表于 2019-7-26 20:00 | 只看該作者
樓上厲害,mark一下,日后學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产一级淫片a直接免费看 免费a网站 | 久久中文视频 | 中文字幕精品一区二区三区在线 | 麻豆av片 | 亚洲人成一区二区三区性色 | 日本成人中文字幕 | 亚洲永久 | 天天干天天色 | 国产精品一区二 | 久草视频网站 | 成人午夜视频在线观看 | 欧美一区二区三区国产精品 | 国产精品久久久久久久久 | 午夜精品一区二区三区三上悠亚 | 一级特黄a大片 | 亚洲一区二区免费 | 国产精品永久免费 | 欧美日韩综合一区 | 国产视频久久 | 欧美午夜精品 | 国产在线一 | 免费毛片在线 | 欧美在线一区二区三区 | 亚洲网址| 91观看| 国产欧美一区二区三区日本久久久 | 国产网站在线免费观看 | 中文字幕一区二区三区乱码图片 | 国产一区二区三区四区五区3d | 久久久www成人免费精品 | 国产yw851.c免费观看网站 | 久久精品久久久久久 | 国产精品国产精品 | 人人爽人人草 | www97影院 | 日韩免费一区 | 高清av在线 | 欧美一级片黄色 | 久久精品亚洲精品国产欧美 | 一区二区在线观看av | 欧美视频在线一区 |