RFID-RC522 и millis()

ayzak
Offline
Зарегистрирован: 04.06.2020

Доброго времени суток!

Появилась проблема что при работе функций считывателя 

 if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }
  // Выбор метки
  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return;
  }

millis() сходит с ума

if(millis()-timing>10000){
Serial.println(millis());
  timing=millis();
}

значения непонятно откуда и интервал явно не 10сек.

Как можно исправить?

Зарание спасибо)

b707
Offline
Зарегистрирован: 26.05.2017

ayzak пишет:

Как можно исправить?

Зарание спасибо)

оно и не должно быть меньше 10 сек, 10 сек - это РАЗНИЦА между двумя засечками времени, а не само время

ayzak
Offline
Зарегистрирован: 04.06.2020

если я правильно понимаю то засечки времени должны выводиться с интервалом в 10сек, а интервал вывода меньше 1сек, и значения в разнобой

b707
Offline
Зарегистрирован: 26.05.2017

код и схему подключения приведите полностью

работал с этим считывателем - он никак на миллис не влияет.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Как объявлена переменная timing?

ayzak
Offline
Зарегистрирован: 04.06.2020

unsigned long timing;

ayzak
Offline
Зарегистрирован: 04.06.2020

b707 пишет:

код и схему подключения приведите полностью

работал с этим считывателем - он никак на миллис не влияет.

 

 


#include <SPI.h>
#include <MFRC522.h> // библиотека "RFID".
#define SS_PIN 10
#define RST_PIN 9
unsigned long timing;
MFRC522 mfrc522(SS_PIN, RST_PIN);
unsigned long uidDec, uidDecTemp;  // для храниения номера метки в десятичном формате


void setup() {
  Serial.begin(9600);
  Serial.println("Waiting for card...");
  SPI.begin();  //  инициализация SPI / Init SPI bus.
  mfrc522.PCD_Init();     // инициализация MFRC522 / Init MFRC522 card.
}
void loop() {
    q1(); 

if(millis()-timing>10000){
Serial.println(millis());
  timing=millis();
}
  
}
void q1(void){
   if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }
  // Выбор метки
  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return;
  }
  uidDec = 0;
  // Выдача серийного номера метки.
 for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    uidDecTemp = mfrc522.uid.uidByte[i];
    uidDec = uidDec * 256 + uidDecTemp;
  }
  Serial.println("Card UID: ");
  Serial.println(uidDec); // Выводим UID метки в консоль.
    mfrc522.PICC_HaltA(); // Stop reading
   
}


 
  • Контакт SDA на RFID-ридере – к цифровому контакту 10 на Arduino
  • Контакт SCK – к цифровому контакту 13
  • Контакт MOSI – к цифровому контакту 11
  • Контакт MISO – к цифровому контакту 12
  • Контакт IRQ – оставьте неподключенным
  • Контакт GND – к контакту GND
  • Контакт RST – к цифровому контакту 9
  • Контакт 3.3V – к контакту 3.3V

 

b707
Offline
Зарегистрирован: 26.05.2017

да, кстати, а плата ардуино какая? на ней случайно "Wavgat" нигде не написано?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Если 17 строку отключить  ?

ayzak
Offline
Зарегистрирован: 04.06.2020

UNO (Китай) , "Wavgat" нигде не написано.

ayzak
Offline
Зарегистрирован: 04.06.2020

Если 17 строчку отключить то millis() работает правильно

b707
Offline
Зарегистрирован: 26.05.2017

а если на строке 18 поставить delay(100); ?

q1() при этом в строке 17 не отключать

ayzak
Offline
Зарегистрирован: 04.06.2020

b707 пишет:

а если на строке 18 поставить delay(100); ?

q1() при этом в строке 17 не отключать

Не помогло.

b707
Offline
Зарегистрирован: 26.05.2017

ну даж не знаю что сказать.

а на чипе на плате Уно что написано - можете прочитать?

ayzak
Offline
Зарегистрирован: 04.06.2020

b707 пишет:

а на чипе на плате Уно что написано - можете прочитать?

ATMEL

MEGA328P

U-TH

354730

1831KR1

b707
Offline
Зарегистрирован: 26.05.2017

ayzak пишет:

b707 пишет:

а на чипе на плате Уно что написано - можете прочитать?

ATMEL MEGA328P

все ОК.

мысли кончились...

Повторюсь - работал с этим РФИД - никаких проблем с миллис у меня не было

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Надо вставлять печать индекса строки и миллис после каждой строки в q1 что бы увидеть где что ломается...

ayzak
Offline
Зарегистрирован: 04.06.2020

Если отключить GND начинает нормально работать.