Второй RFID

Тема в разделе "Arduino & Shields", создана пользователем ilyxa06, 30 авг 2017.

Метки:
  1. ilyxa06

    ilyxa06 Нуб

    Всем привет
    Ребят подскажите куда копать.
    Использую код и схему с данного форума
    Ардуино UNO
    Код (C++):
    #include <SPI.h>
    #include <MFRC522.h>

    #define RST_PIN        9          // пин RST

    byte maxRF = 1;                // всего рфидов (включая нулевой)
    byte ssRFpin[2] = {2, 3};      // SS пины рфидов

    byte massRFuid[2][4];          // массив UID меток (первый - номер ридера, второй - 4 числа UID)

    MFRC522 *mfrc522[2];

    void setup() {
      for (byte i = 0; i <= maxRF; i++) { // выставляем пины
        mfrc522[i] = new MFRC522(ssRFpin[i], RST_PIN);
      }

      Serial.begin(9600);
      while (!Serial);
      SPI.begin();
      for (byte i = 0; i <= maxRF; i++) {
        mfrc522[i]->PCD_Init();
      }
      Serial.println("Card please:");
    }


    void loop() {
      for (int i = 0; i <= maxRF; i++) { // заполняем массив меток
        readRF(i);
        delay (100);                    // не знаю надо ли
      }
      SerialRFprint();                  // печатаем содержимое массива меток на экран
      delay(2000);
    }



    void readRF (byte RF) {
      if ( ! mfrc522[RF]->PICC_IsNewCardPresent()) { // если метки нет
        massRFuid[RF][0] = 0;        // метим отсуствие метки в первом числе UID
        return;
      }
      if ( ! mfrc522[RF]->PICC_ReadCardSerial()) {
        massRFuid[RF][0] = 0;
        return;
      }

      dump_byte_array(mfrc522[RF]->uid.uidByte, 4, RF);
      mfrc522[RF]->PICC_IsNewCardPresent();
      mfrc522[RF]->PICC_ReadCardSerial();
    }


    void dump_byte_array(byte * buffer, byte bufferSize, byte RF) { // считываем UID в массив
      for (byte i = 0; i < bufferSize; i++) {
        massRFuid[RF][i] = buffer[i];
      }
    }

    void SerialRFprint () {            // печать массива меток на экран
      for (int i = 0; i <= maxRF; i++) {
        Serial.print("Card ");
        Serial.print(i, DEC);
        Serial.print(": ");
        if (massRFuid[i][0] == 0) {
          Serial.println("NO card");
        } else {
          for (int j = 0; j < 4; j++) { // печатаем UID
            Serial.print(massRFuid[i][j], HEX);
            Serial.print(" ");
          }
          Serial.println("");
        }
      }
    }
    [​IMG]
    Если оба RFID подключены то не работает ни один.
    Если выдернуть MISO одного, то второй работает.
     
    Последнее редактирование: 30 авг 2017
  2. qwone

    qwone Гик

    http://arduino.ua/ru/prog/SPI . Ваши RFID заглушили выходы друг друга. надо или через резисторы их пустить или через диоды. Ну или через логику повесить.
     
    arkadyf нравится это.
  3. ostrov

    ostrov Гуру

    Обсуждалось уже. Возможно, рфиды без работающих SS ножек.
     
    arkadyf нравится это.
  4. ilyxa06

    ilyxa06 Нуб

    а как проверить?
     
  5. ilyxa06

    ilyxa06 Нуб

    А как через логику повесить?
     
  6. ostrov

    ostrov Гуру

    Проверить так. Взять один РФИД, воткнуть SS в GND, убедиться что работает. Потом воткнуть SS в +5В и снова проверить. Если все равно работает, значит нога дохлая и эти модули могут использоваться только по одному. Ну или дорабатывать напильником.
     
  7. ilyxa06

    ilyxa06 Нуб

    Не работает в GND и +5В
     
  8. ilyxa06

    ilyxa06 Нуб

    Работает только в 10 порту
     
  9. ostrov

    ostrov Гуру

    Какой еще 10 порт? У вас SS подключены к 2 и 3 пину соответственно. Об этом говорит хотя бы эта строка:
    Код (C++):
    byte ssRFpin[2] = {2, 3};      // SS пины рфидов
    уж несмотря на схему. Что вы там на GND и + цепляли?

    Вот вам схемка, смотреть колонку SPI.
    [​IMG]

    Кстати, программка слегка устарела, да и байт у UID метки не 4, а 5. Но вполне еще рабочая.
     
    Последнее редактирование: 31 авг 2017
    arkadyf нравится это.
  10. ilyxa06

    ilyxa06 Нуб

    Подключал к 10 пину , и в коде менял тоже.
     
  11. b707

    b707 Гуру

    вы оба что ли к 10 пину подключили?
    И если пины меняли - какого же (даже не так - КАКОГО ФИГА!) вы публикуете скетч с неверными установками?
    Простите за резкость - но новички задолбали тем, что задют вопросы, выкладывая при этом схемы и скетчи, не соответсвующие своему реальном подключению.

    Короче - дальнейшие вопросы не имеют смысла, пока не выложите ВАШУ схему и ВАШ скетч, а не "скетч из форума", в котором вы налепили кучу поправок
     
  12. ilyxa06

    ilyxa06 Нуб

    На момент выкладывания поста, подключал к 2 и 3 пину.
    Когда тестировал, отключил один RFID полностью, а второй подключал SS ногу к GND - не работало, к +5В - не работало. К любому пину - 2,3,10 работает( с поправкой в коде строки (byte ssRFpin[2] = {2, 3};) на byte ssRFpin[2] = {10};.