C# GPIO通道调试(DMCI驱动)

前言

实践中正好遇到了GPIO的调试问题,驱动为DMCI,调试目标是通道正常读写。其实不管什么驱动其读写方式都只是函数调用的问题,这里算是给个Demo。

配置与声明

需要引用一个DMCI.dll的动态链接库,如果你的驱动也是这个,下面开始复制粘贴大差不差了。

using DMCI;

然后声明一下线程

//创建IO线程
Thread WriteGPIO;           //写IO
Thread ReadGPIO;            //读IO

在Load中创建对象

//创建GPIO动态库对象
            string path = @"./DMCI.dll";
            IDIO = new DMCIDLLInvoke(path);
            if (!IDIO.InitDIO(GroupIndex))
            {
                MessageBox.Show("GPIO初始化失败!!");
            }

同时在Load中可以添加一个自启动接口,触发下面的Click

启动线程接口

 ReadGPIO = new Thread(ReadIO);            //读IO
            ReadGPIO.Start();

读写IO

//读取IO
private void ReadIO()
        {
            int sum=0; 
            byte GPIODATA = 0;
            while (true)
            {
                IDIO.GetDI(GroupIndex, ref GPIODATA);   //读取IO状态,Index为下标
                string StrDO = "";
                StrDO = ByteToString(GPIODATA);//这里用Convert.ToString()就行
                int x = Convert.ToInt32(StrDO, 2);//收取IO接口的二进制转十进制数据。
            }        
        }

如下代码可写入button触发

//点亮IO通道(输出)
HexDONum |= 0x01;
HexDONum &= ~(0x01);//自行根据通道号切换DONum
IDIO.SetDO(GroupIndex, Convert.ToByte(HexDONum));

附上GetDI的函数说明

// Get iDIO group input pins.
        //   Call EkDMCiGetDI1, EkDMCiGetDI2,... by setting GroupIndex 0, 1, ...
        //   Read Connect value for getting input status in iDIO setting.
        //   (API in DMCI.dll). (see DMCI_User_Manual_ENU.pdf)
        // 获取 iDIO 组输入引脚.
        //   通过 GroupIndex 设置 0, 1, .., 分别调用 EkDMCiGetDI1, EkDMCiGetDI2, ...
        //   读取 Connect 值 获取 iDIO 设置中的输入状态.
        //   (DMCI.dll 中的 API). (参见 DMCI_User_Manual_ENU.pdf (英文版))
        // 取得 iDIO 群組輸入腳位.
        //   透過 GroupIndex 設定為 0, 1, .., 分別呼叫 EkDMCiGetDI1, EkDMCiGetDI2, ...
        //   取得 Connect 值 得知 iDIO 設定中的輸入狀態.
        //   (DMCI.dll 中的 API). (參詳 DMCI_User_Manual_ENU.pdf (英文版))
        public bool GetDI(byte GroupIndex, ref byte Connect)
        {
            if (GroupIndex >= DMCiMax.DIOGroupCount) return false;
            if (pEkDMCiGetDI[GroupIndex] == IntPtr.Zero) return false;
            fixed (byte *pb = &Connect)
            {
                return EkDMCiGetDI[GroupIndex](pb) == 1;
            }
        }
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值