0

I am working on a NFC reader project based on Windows 10 IoT running on a Rasperry PI 3.

I use the library Mfrc522lib.cs found here: RFID RC522 Raspberry PI 2 Windows IOT. I use an async task to wait for the card. It scans perfect the first time, but when I start the task again (for test puprose with button). I get this:

Pin ' is currently opened in an incompatible sharing mode. Make sure this pin is not already in use by this application or another Application

Any idea?

public MainPage()
{
    this.InitializeComponent();
    startNFC();
}

public void startNFC()
{
    var read = ReadNFCAsync();

    Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
        () =>
        {
            // Your UI update code goes here!
            this.serial.Text = "Klar for å lese kortet ditt";
            this.statusline.Fill = new SolidColorBrush(Colors.Green);
        });
    read.ContinueWith(prev => {
        Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
            () =>
            {
                // Your UI update code goes here!
                this.serial.Text = prev.Result.ToString();
                this.statusline.Fill = new SolidColorBrush(Colors.Orange);
            });
    });
}

public static async Task<String> ReadNFCAsync()
{
    await Task.Delay(1000); 
    var mfrc  = new Mfrc522();

    await mfrc.InitIO();

    while (true)
    {
        if (mfrc.IsTagPresent())
        {

            var uid = mfrc.ReadUid();
            var serial= uid.ToString();

            mfrc.HaltTag();
            return serial;

        }
    }
}

private async void Button_Click(object sender, RoutedEventArgs e)
{
    startNFC();
}
ilja
  • 351
  • 2
  • 14
KjoniX
  • 3
  • 3

1 Answers1

0

This issue due to initializing GPIO pin is in use. Because every time you click the button the following line will be executed:

await mfrc.InitIO();

To solve this problem you can edit your code like this:

    private Mfrc522 mfrc = new Mfrc522();

    public static bool IsGpioInitialized = false;

    public async Task ReadNFCAsync()
    {
        if (!IsGpioInitialized)
        {
            await mfrc.InitIO();
            IsGpioInitialized = true;
        }
    }
Rita Han
  • 9,574
  • 1
  • 11
  • 24