Всем доброго времени суток. Пытаюсь создать имитационную модель своего проекта. Немного разобрался с Arduino, однако не хватает времени для более детального разбора и чем дальше лезу, тем больше путаюсь. Помогите, пожалуйста, составить программу. Буду очень благодарен. Попытаюсь доступно и полно описать алгоритм и все используемые датчики и приборы. Имеются 3 RFIDRC522, к каждому RFID относится по 3 светодиода (красный, желтый и синий), т.е. вот так Т.е. каждый из них представляет свой отдельный производственный участок 1, 2, 3 соответственно. Их всех нужно подключить к одной Ардуино (с этим я примерно разобрался – посмотрел видео в Youtube) Все RFID-reader располагаются в порядке очереди по нумерации. В определенный момент у RFID-reader может гореть только один светодиод. Суть заключается в следующем: Вначале ни на одном RFID-reader не зафиксированы метки, следовательно синий светодиоды каждого из них горят, а желтый и красный нет. Фиксация RFID-меток будет осуществляться по очереди с 1 по 3 RFID-reader. I) Ожидание фиксации меток II) Фиксация меток (причем нужно настроить так, чтобы сперва зафиксировались все метки, а потом происходила проверка условий ниже, иначе для каждой фиксации будет проверятся условие) Т.е. нужно чтобы программа после первой фиксации 1 метки, выдержала еще 2-3 секунды для фиксации остальных меток и после шла проверять условия описанные ниже. III) Если: 1. Метки зафиксированы на RFID2: записать эти метки в его память, у него горит красный светодиод (остальные нет) Проверяются если ли на RFID1 такие же метки, которые зарегистрированы у RFID2, если да, то они удаляются, если нет, то остаются. Затем проверяются, остались ли у RFID1 еще метки, если да его светодиод горит красным, если нет, то желтым. Проверить есть ли у RFID3 метки, если да то у нее горит красный светодиод (остальные нет), если нет, то синий (остальные нет) Идем к пункту I 2. Метки зафиксированы на RFID1, то записать эти метки в его память и его красный светодиод горит (а остальные нет) Проверить если на RFID2 метки, если есть, то его красный светодиод горит, иначе Если RFID3 содержит метки, то у RFID3 горит красный светодиод и у RFID2 желтый, если нет то RFID3 горит синим, а RFID2 горит синим. Идем к пункту I 3. Если метка зарегистрирована на RFID3, то горит ее красный светодиод (а желтый и синий нет) Проверяются если ли на RFID2 такие же метки, которые зарегистрированы у RFID3, если да, то они удаляютя, если нет, то остаются. Затем проверяются, остались ли у RFID2 еще метки, если да его светодиод горит красным, если нет, то желтым. Если на RFID1 есть метки, то он горит красным, если нет и RFID2 не содержит меток, то синим, иначе желтым. Идем к пункту I
где вы нашли видео подключения нескольких RFID к одной Arduino? Тут народ уже два года пытается решить косяки, возникающие при таком подключении.
А можно реализовать это, если использовать 3 Arduiono и к каждому подключить отдельно свой RFID и светодиоды?
Это имитационная модель. Просто показать как это функционирует. Мне нужно в живую показать изменения светодиодов, от того есть ли в памяти RFID номера меток или нет. Помогите хотя бы написать функцию, которая сохраняет UID всех меток поднесенных к RFID-reader. Как я понял: // Данные о номере карты хранятся в 5 переменных, int serNum0; int serNum1; int serNum2; int serNum3; int serNum4; Как можно вытащить цельный номер без разбиения и сохранить его в отдельную переменную?
Это для примера, баловался RFID RC522 , но этот код надо допиливать он не полный, надеюсь для понимания процесса достаточно. Код (C++): #include <SPI.h> #include <RFID.h> #define SS_PIN 10 #define RST_PIN 9 // reset пин RFID rfid(SS_PIN, RST_PIN); /* Setup variables: создаем переменные размерностью byte, в эти переменный сохраним результат сканирования ID карты. Этот пример для простоты понимания, можно и по другому писать код.*/ // объявляем переменные byte serNum0; byte serNum1; byte serNum2; byte serNum3; // 4 байта карты // byte serNum4; // 5 байт карты unsigned long MSBLSB = 0; //в этой переменной сохраним результат void loop() { if (rfid.isCard()) { // ждем карту if (rfid.readCardSerial()) { //читаем карту, используем 4 первых байта карты serNum0 = rfid.serNum[0]; serNum1 = rfid.serNum[1]; serNum2 = rfid.serNum[2]; serNum3 = rfid.serNum[3]; // serNum4 = rfid.serNum[4]; // пятый байт карты MSBLSB = (((MSBLSB = serNum0 << 8 | serNum1)<<8 | serNum2)<< 8 | serNum3) ; //Склеиваем MSB & LSB, преобразуем в 4 байтное целое число //----------------------------------------------------------------------------------------------------------------------- }