SD и mfrc522 на UNO
Добрый день.
Хочу при считывании rfid меток что бы UID метки писался на SD карту. Что mfrc522 что SD модуль оба подключаются по SPI на UNO. И вот вроде все по отдельности работает как надо но стоит подключить вместе и не работает ничего.
Я понимаю что для работы SPI с несколькими устройствами необходимо что бы у каждого устройства был SS подключен к разному пину.
И так код который хочу что бы заработал.#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 пиныdigitalWrite(9, HIGH); digitalWrite(4, HIGH);Потом в loop_e
переводил в LOW каждый раз когда нужна работа определенного модуля
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. Тем более что в один момент времени должен работать только один модуль.
- Войдите на сайт для отправки комментариев
Отвечаю сам себе.
При связке UNO+RC522+SDcard необходимо MISO пин SD и 12й пин MISO ардуинки уно подключить через резистор 220 Ом. При таком подключении все работает и без всяких программных дерганей SS пинов