【问题标题】:Win10 IOT Raspberry pi c# RFID rc522Win10 IOT 树莓派 c# RFID rc522
【发布时间】:2017-11-27 19:25:11
【问题描述】:

我在这里使用提供的代码 -> RFID RC522 Raspberry PI 2 Windows IOT

我在文本框中打印 uid,但程序在这一步停止:

await mfrc.InitIO();

我的代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using System.Text;
using System.Net.Http;
using Windows.ApplicationModel.Background;
using Windows.System.Threading;
using Windows.Devices.Gpio;
using Mfrc522Lib;
using Windows.Devices.Enumeration;
using Windows.Devices.Spi;



namespace rfid
{ 
   public sealed partial class MainPage : Page
{

public MainPage()
{
    this.InitializeComponent();

}





public async void InitRC522Async()
{

    var mfrc = new Mfrc522();
    await mfrc.InitIO();

    while (true)
    {
        if (mfrc.IsTagPresent())
        {
            var uid = mfrc.ReadUid();
                textbox_1.Text = uid.ToString();

            mfrc.HaltTag();
        }
    }
}

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        InitRC522Async();
    }
}
}

【问题讨论】:

    标签: c# windows-iot-core-10


    【解决方案1】:

    您可以使用Device Portal 将默认控制器驱动程序更改为Inbox Driver。直接内存映射驱动程序适用于lightning providers。顺便说一句,您需要在更改默认控制器驱动程序设置后重新启动设备。

    【讨论】:

    • 选择“Inbox Driver”选项后,请点击Update Drvier按钮,然后重启您的设备。如果还是不行,请告诉我抛出了什么异常。
    • Windows 正在更新,同时我有一个类,其中包含所有“Library Mfrc522Lib.cs (all in one)”(链接中的内容)和主页上的代码。没事吧?
    • 嗨迈克尔,我没有抛出异常,程序只是停止工作,按钮文本框没有响应,但应用程序关闭
    • 嗨Joao Pereira,我在运行代码的时候没有遇到这个问题。其实在InitIO之后,还有一个while循环操作,这将导致按钮和文本框不响应。请调试您的应用程序并检查要点。
    【解决方案2】:

    我一直在为我的 RFID 考勤系统实现相同的参考,RFID RC522 Raspberry PI 2 Windows IOT,我发现将检测到的 UID 打印到 xaml 文本框中会冻结程序。

    要解决此问题,您可以使用任务延迟。这允许文本框在标签检测时更新..

            var mfrc = new Mfrc522();
            await mfrc.InitIO();
            while(true)
            {
                if (mfrc.IsTagPresent())
                {
                    var uid = mfrc.ReadUid().ToString();
                    string uidString = uid;
                    textbox1.Text = uidString;
                    mfrc.HaltTag();
    
                    await Task.Delay(TimeSpan.FromSeconds(1));
                }
            }
    

    【讨论】:

      【解决方案3】:

      我在 GUI 冻结方面遇到了类似的问题,只需将其放在它自己的线程中,它就会正常工作。

      public MainPage()
          {
              this.InitializeComponent();
      
              Thread T = new Thread(testfunc);
              T.IsBackground = true;
              T.SetApartmentState(ApartmentState.STA);
              T.Start();
      
      
          }
          
          public async void testfunc()
          {
              await Task.Run(async () =>
              {
                  await RFIDTask();
                  
              });
          }
          
          public async Task RFIDTask()
          {
              var mfrc = new Mfrc522();
              await mfrc.InitIO();
      
              while (true)
              {
      
                  while (true)
                  {
                      if (mfrc.IsTagPresent())
                      {
                          string txt_Result = "";
                          var uid = mfrc.ReadUid();
      
                          foreach (byte byt in uid.FullUid)
                          {
                              txt_Result = txt_Result + byt.ToString("x2");
      
                          }
                          await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
                          {
                              tbTagId.Text = txt_Result;
                              
                          }); 
                          
                          await Task.Run(() => mfrc.HaltTag());
                          break;
                      }
      
                  }
                  await Task.Delay(2000);
      
                  mfrc.Reset();
                  mfrc.HaltTag();
      

      【讨论】:

        猜你喜欢
        • 2016-03-20
        • 2016-10-25
        • 1970-01-01
        • 1970-01-01
        • 2016-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多