使用检测 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
所以我正在尝试用我的树莓做一个程序来读取 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