как подружить RFID-RC522 и радиомудуль NRF24L01+ ???
- Войдите на сайт для отправки комментариев
Друзья уже опустились руки. Перечитал все, перепробовал все!
Описание проблемы:
Оба модуля весят на arduino mega. Ноги этих модулей(MISO, MOSI, SCK) запаралелены, т.е. соеденены. и подключены в меге в соответствующие порты. МОSI - 51, MISO - 50, SCK - 52.
Ноги SS обоих модулей в SETUP ставлю в HIGH - говоря тем самым меге что по SPI нинадо ни скем общатся.
В результате получаю полный висяк ардуины, т.е. все перестает работать.
В коде:
Перед тем как сделать отправку по радио ставлю ногу SS радиомодуля в LOW, а RFID в HIGH.
Но всеровно получаю висяк.
Пробовал наоборот тогда просто ничего не работает.
Отметил что если вынуть ногу MISO из Rfid то код работает и радио модуль отправляет. Но стоит их оба включить сразу висяк.
Пробовал милион комбинаций, перечитал информацию об SPI везде пишут о том что , если хочешь через SPI общатся с какимнибудь модулем поставь его ногу SS в LOW а остальные в HIGH и будет счастье. Но увы у меня не работает.
Помогите совестом пожалуйста, как их подружить?
Пробовал милион комбинаций
А показать хоть одну - не судьба?
Подключите ногу MISO модуля RC-522 через сопротивление 1K, и будет вам счастье. Перед отправкой по радио ноги дергать не нужно!
не поделитесь схемой включения к Mega 2560 ну или аналогию в uno? и если не сложно то было бы не плохо примерчик скетч глянуть... логика читать рфид встать на передачу и следом встать на прием чтоб получить подтверждение, или новую команду
DarkNight, если у Вас что-то не получается с программированием, то, вероятнее всего, это из-за Вашего пренебрежительного отношения к языку, на котором Вы пишете. Ни один компилятор не пропустит текст с таким количеством ошибок, как Вы сделали в своем сообщении.
DarkNight не знаю насколько вам это поможет, но я приведу фрагмент своего кода, делал автономный считыватель(передатчик) NTAG213 меток. На устройстве всего одна кнопка питания, которую я в последствии заменил на сенсорную. Использовал схему самоблокировки питания, через 10 секунд бездействия или по команде, питание выключается. Логика работы: Приемник условно постоянно находится в режиме прослушивания эфира, после получения пакета, с небольшой задержкой переключается на передачу для отправки команды и снова переходит в режим приема. Передатчик соответственно первым пакетом отправляет сигнал готовности (пакет с первым байтом 0xFF) и ждет команду, после выполнения отправляет результат...
#include <SPI.h> #include <MFRC522.h> #include "RF24.h" #include "nRF24L01.h" /* Схема подключения: MISO, MOSI, SCK паралельно, на соответствующие аппаратные пины. Ногу MISO модуля RC-522 через сопротивление 1K - обязательно! Оставшиеся две пары ног на произвольные пины: */ MFRC522 mfrc522(8, 7); RF24 radio(9, 10); uint8_t data[5] = {0xFF, 0x00, 0x00, 0x00, 0x00}; const uint64_t pipes[2] = {0xFFFFFFFF01LL, 0xFFFFFFFF02LL}; const uint8_t power_pin = 6; const uint32_t interval = 10000; void setup() { pinMode(power_pin, OUTPUT); // Самоблокировка питания Serial.begin(9600); Serial.print("Power on"); SPI.begin(); mfrc522.PCD_Init(); setup_radio(); } void loop() { spi_data_select(); power_off(); } /// Инициализация радиомодуля /// void setup_radio() { radio.begin(); radio.setChannel(100); radio.setPayloadSize(sizeof(data)); radio.setRetries(2, 10); radio.setPALevel(RF24_PA_LOW); radio.setDataRate(RF24_1MBPS); radio.openWritingPipe(pipes[0]); // На стороне приемника pipes[1] radio.openReadingPipe(1, pipes[1]); // На стороне приемника pipes[0] radio.startListening(); } /// Аппаратное отключение питания /// void power_off() { while (true) { Serial.print("Power off"); digitalWrite(power_pin, HIGH); } } /// Обмен данными с радио /// uint8_t spi_data() { uint32_t wait = millis(); radio.stopListening(); // Останавливаем прослушивание эфира radio.write(&data, sizeof(data)); // Отправляем данные radio.startListening(); // Возобновляем прослушивание эфира while (true) { if (millis() - wait > interval) power_off(); if (radio.available()) { radio.read(&data, sizeof(data)); return; } } } /// Селектор операций /// uint8_t spi_data_select() { spi_data(); data[2] = 0x01; // Выставляем флаг успешности операции switch (data[1]) { case 0x00: power_off(); break; case 0x01: spi_write_number(); break; case 0x02: spi_clear_number(); break; case 0x03: spi_read_number(); break; } } /// Пишем номер /// uint8_t spi_write_number() { uint32_t wait = millis(); while (true) { if (millis() - wait > interval) power_off(); if (mfrc522.PICC_IsNewCardPresent()) { // Ожидаем if (mfrc522.PICC_ReadCardSerial()) { // Выбираем // Здесь производим необходимые операции с RFID, NTAG... // Если операция завершилась неудачей - флаг data[2] = 0x00; spi_data(); // Отправляем данные return; } } } }