使用检测 rfid 的外围设备在 Ruby 中创建一个循环

Make a loop in Ruby with peripherical that detects rfid

所以我正在尝试用我的树莓做一个程序来读取 Ruby 中的 rfid 卡。

#!/usr/bin/env ruby

require 'mfrc522'




class Rfid
    def read_uid
        r = MFRC522.new
        r.picc_request(MFRC522::PICC_REQA)
        begin
            uid, sak = r.picc_select
            puts "El seu identificador es: "
            puts "%02x%02x%02x%02x" % uid
        rescue
            retry
        end
        return uid
    end
end


if __FILE__ == [=11=]


rf = Rfid.new
uid=rf.read_uid


end

问题是,如果我的卡在我执行程序时没有通过 rfid,它就会出现 CommunicationError。我正在尝试做一个循环,这样如果它没有检测到卡,它会继续尝试,但它不起作用。有什么想法吗??

您遇到的基本问题是 begin .. end 不是循环。您可以阅读更多关于 ruby 循环 here 例如

我认为它应该是这样的:

class Rfid
  def read_uid
    r = MFRC522.new
    loop do
      r.picc_request(MFRC522::PICC_REQA)
      uid, sak = r.picc_select
      
      puts "El seu identificador es: "
      puts "%02x%02x%02x%02x" % uid

      break uid if uid
    rescue
      redo
    end
  end
end

rescue - 出现任何错误时重试

break - 退出循环

我还应该注意,使用 rescue 没有特定错误 class - 这是一种不好的做法,因为它可能会挽救任何错误,即使它只是代码中的拼写错误。

在你的情况下可能是这样的:

class Rfid
  def read_uid
    r = MFRC522.new
    loop do
      .... 
      break uid if uid
    rescue CommunicationError
      redo
    end
  end
end