diff --git a/src/card_reader.rs b/src/card_reader.rs
index d371fbf..c4595c1 100644
--- a/src/card_reader.rs
+++ b/src/card_reader.rs
@@ -49,11 +49,16 @@ pub fn read(vid: u16, pid: u16, tx: &Sender<Arc<str>>) -> Result<(), Error> {
     handle.claim_interface(0)?;
 
     let mut buf = [0; 128];
+    let mut last_scan = std::time::Instant::now();
     loop {
         match handle.read_interrupt(0x81, &mut buf, Duration::from_secs(1)) {
             Ok(_) => {
                 if let Some(card_id) = extract_card_id(&buf) {
+                    if last_scan.elapsed() < Duration::from_secs(2) {
+                        continue;
+                    }
                     tx.send(Arc::from(card_id)).map_err(Error::Send)?;
+                    last_scan = std::time::Instant::now();
                 }
             }
             Err(rusb::Error::Timeout) => (),