RFID и SD вместе на Меге

Тема в разделе "Arduino & Shields", создана пользователем poteh, 21 июл 2015.

  1. poteh

    poteh Нуб

    Добрый день!

    Уже сломал голову и никак не пойму что я делают не так.
    К меге к 48, 49, 50 пинам подключены RFID модуль RC522 и microSD модуль.
    SS от SD подключен к 47 пину. SDA от RFID подключен к 48, RST к 49 пинам.
    Прописал pinMode(53, OUTPUT) как рекомендуется для SD модулей.
    Проблема в том, что RFID Не хочет работать вместе с SD модулем. Отключаю SD - рфид всё видит и всё читает. Включаю обратно SD - работает только SD.
    Пните меня что я пропустил и не доглядел.
    Приведу части кода, задействованные для RFID и для SD:
    Код (Text):
    #include <SdFat.h>
    #include <SPI.h>
    #include <MFRC522.h>
    #define RST_PIN        49          // Configurable, see typical pin layout above
    #define SS_PIN          48          // Configurable, see typical pin layout above
    MFRC522 mfrc522(SS_PIN, RST_PIN);  // Create MFRC522 instance.
    MFRC522::MIFARE_Key rfid_key;
    SdFat sd;
    const int chipSelect = 47;
    const int ledStart = 13;
    const int btnRfid = 26;

    void setup() { // THIS RUNS ONCE
      pinMode(53, OUTPUT);
      pinMode(ledStart, OUTPUT);
      pinMode(btnRfid, INPUT_PULLUP);
      if (sd.begin(chipSelect, SPI_FULL_SPEED)) { // initialise card on SPI to 8MHz SPI bus speed
        for (int dloop = 0; dloop < 4; dloop++) {
          digitalWrite(ledStart, !digitalRead(ledStart));
          delay(100);
        }
      } else { // if error, flash LED twice per second, until reset
        while (1) {
          digitalWrite(ledStart, !digitalRead(ledStart));
          delay(500);
        }
      }
      SPI.begin();        // Init SPI bus
      Serial.println("CheckPoint 2.2");
      mfrc522.PCD_Init(); // Init MFRC522 card

    void loop() {
      if (digitalRead(btnRfid) == LOW || boolRFID == true) {
        StartScanRfid(); // launch StopRec method
        Serial.println("Start RFID Btn");
      }
    }

    void StartScanRfid() {
      // Look for new cards
      if ( ! mfrc522.PICC_IsNewCardPresent())
        return;
      // Select one of the cards
      if ( ! mfrc522.PICC_ReadCardSerial())
        return;
      // Show some details of the PICC (that is: the tag/card)
      for (byte i = 0; i < mfrc522.uid.size; i++) {
        char buf[2];
        itoa (mfrc522.uid.uidByte[i], buf, 16);
        charFilename += buf;
      }
      if (charFilename == "")
        return;
      Serial.print(F("Card UID:"));
      Serial.println(charFilename);
      char buf[8];
      charFilename.toCharArray(buf, 8);
      boolRFID = false;
      // Halt PICC
      mfrc522.PICC_HaltA();
        for (int dloop = 0; dloop < 4; dloop++) {
          digitalWrite(ledStart, !digitalRead(ledStart));
          delay(100);
        }

    }
     
     
  2. I_v_a_n

    I_v_a_n Нуб