Добрый день. Хочу при считывании rfid меток что бы UID метки писался на SD карту. Что mfrc522 что SD модуль оба подключаются по SPI на UNO. И вот вроде все по отдельности работает как надо но стоит подключить вместе и не работает ничего. Я понимаю что для работы SPI с несколькими устройствами необходимо что бы у каждого устройства был SS подключен к разному пину. И так код который хочу что бы заработал. Спойлер: CODE Код (C++): #include <SPI.h> #include <MFRC522.h> //RFID #include <SD.h> //Константы // Ридер SCK 13, MOSI 11, MISO 12 // SD SCK 13, MOSI 11, MISO 12 #define SS_PIN 9 //SDA #define RST_PIN 8 //RST MFRC522 mfrc522(SS_PIN, RST_PIN); unsigned long uidDec, uidDecTemp;// Значение UID File myFile; void setup() { Serial.begin(9600); SPI.begin(); // инициализация SPI / Init SPI bus. SD.begin(4); // инициализация SD SS mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card. } void loop() { // Поиск новой метки 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(uidDec); // Выводим UID метки в консоль. if (SD.exists("example.txt")) { Serial.println("example.txt exists."); } else { Serial.println("example.txt doesn't exist."); } } И так в моем понимании SS у mfrc522 (9) и SD (4) разные и после считывания метки и выдачи ее в Сериал должно написать есть ли example.txt на карте или нет. Но при считывании карты ничего не происходит. Да знаю что для того что бы SPI понимал с каким ему модулем работать в данный момент необходимо "дернуть" пин SS. По этому пробовал в Сетапе сначала отключить все SS пины Спойлер: CODE Код (C++): digitalWrite(9, HIGH); digitalWrite(4, HIGH); Потом в loop_e переводил в LOW каждый раз когда нужна работа определенного модуля Спойлер: CODE Код (C++): void loop() { digitalWrite(4, HIGH); //Держим SD отключенной digitalWrite(9, LOW); //Включаем RFID // Поиск новой метки 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(uidDec); // Выводим UID метки в консоль. digitalWrite(9, HIGH); //Выключаем RFID digitalWrite(4, LOW); //Включаем SD if (SD.exists("example.txt")) { Serial.println("example.txt exists."); } else { Serial.println("example.txt doesn't exist."); } digitalWrite(4, HIGH); //Выключаем SD // И далее все по кругу } Понимаю код авно еще то. Но гугление показало что у зеленых новичков вроде меня не всегда получается справится с работой SPI. Подскажите пожалуйста как работать с двумя модулями подключёнными по SPI. Тем более что в один момент времени должен работать только один модуль.
Вот ровно так как у меня в IDE так и скопировал сюда так и залил на UNO. Если вытащить MOSI и MISO от SD и ребутнуть UNO сразу в сериал начинает слать UID метки.
ридеры RFID с какой версией прошивки (firmware_check.ino из примеров)? Если 0x92,то все должно работать. Если 0x12, то увы, там китайцы сэкономили (какая-то линия постоянно тянет сигнал к нулю, блокируя остальные устройства на SPI).
И так Ответ. Для того что бы такая связка заработала необходимо между 12м пином ардуино и MISO пином SD модуля поставить резистор на 220 Ом. После этого вся связка заработала безо всяких танцев с бубном. Всем спасибо за участие!