Помогите новичку ... Как сделать что-бы приложил к сканеру карту реле включилось ещё раз приложил выключалось !
Код (C++): /* #1 светодиод -> 13 (led_pin) 1 горит / 0 нет #2 RFID_RC522 RST -> 9 (RST_pin) SDA(SS)-> 10 (SDA_pin) MOSI -> 11 (MOSI_pin) MISO -> 12 (MISO_pin) SCK -> 13 (SCK_pin) 3,3В -> 3,3В GND -> GND Card UID: E6 38 FE 13 брелок */ //#1 const int led_pin = 13; //нога светодиода uint8_t Led;// значение на нем //#2 byte uidCard[4] = {0xE6, 0x38, 0xFE, 0x13}; #include <SPI.h> #include <MFRC522.h> const int SDA_pin = 10; const int RST_pin = 9; MFRC522 rfid(SDA_pin, RST_pin); // Instance of the class uint8_t RFID_btn = 0; // 1 есть правильная карточка / 0 нет или карточки или неправильная void setup() { //#1 pinMode(led_pin, OUTPUT); // инициализировать светодиод digitalWrite(led_pin, Led = 1); // и погасить светодиод //#2 SPI.begin(); // Init SPI bus rfid.PCD_Init(); // Init MFRC522 } void loop() { //#1 //#2 static uint32_t past_1 = 0 ; if (millis() - past_1 >= 200) { // опрос карточки идет каждые 200 миллисек past_1 = millis() ; RFID_btn = RFID_btn << 1; if ( rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial() && rfid.uid.uidByte[0] == uidCard[0] && rfid.uid.uidByte[1] == uidCard[1] && rfid.uid.uidByte[2] == uidCard[2] && rfid.uid.uidByte[3] == uidCard[3] ) RFID_btn = RFID_btn | 1; if ((RFID_btn & 3) == 1)digitalWrite(led_pin, Led = ! Led); } }
У Вас будет реагировать на конкретную Вашу карту с UID 0xE6, 0x38, 0xFE, 0x13 если не нужно читать UID карты а просто само её наличие то всё гораздо проще. Код (C++): /* * MOSI: Pin 11 * MISO: Pin 12 * SCK: Pin 13 * SS: Pin 10 * RST: Pin 8 */ #include <SPI.h> #include "RFID.h" int led = 12; //пин 12 как выход #define SS_PIN 10 //SS пин 10 #define RST_PIN 8 //RST пин 8 RFID rfid(SS_PIN, RST_PIN); // Setup variables: void setup() { SPI.begin(); rfid.init(); pinMode(led, OUTPUT); //Пин 12 на выход } void loop() { if (rfid.isCard()) //если есть ответ от карты { digitalWrite(led, HIGH); //включаем } else { digitalWrite(led, LOW); //если нет выключаем } }
что в этом коде . выполняется ?! я не понял . мне надо просто с помощью кода карты включить реле которая на 4 пине .
Дэн Пискунов . И что вы не можете поменять в const int led_pin =13;//нога светодиода цифру 13 на 4. Реле надеюсь включается при 1? byte uidCard[4]={0xE6, 0x38, 0xFE, 0x13}; А здесь поставить номер своей карты. Или собираетесь включать выключать любой картой?
Ну можно и так. Код (C++): /* #1 светодиод -> 13 (led_pin) 1 горит / 0 нет #2 RFID_RC522 RST -> 9 (RST_pin) SDA(SS)-> 10 (SDA_pin) MOSI -> 11 (MOSI_pin) MISO -> 12 (MISO_pin) SCK -> 13 (SCK_pin) 3,3В -> 3,3В GND -> GND */ //#1 const int led_pin = 13; //нога светодиода uint8_t Led;// значение на нем //#2 #include <SPI.h> #include <MFRC522.h> const int SDA_pin = 10; const int RST_pin = 9; MFRC522 rfid(SDA_pin, RST_pin); // Instance of the class uint8_t RFID_btn = 0; // 1 есть карточка / 0 нет карточки void setup() { //#1 pinMode(led_pin, OUTPUT); // инициализировать светодиод digitalWrite(led_pin, Led = 1); // и погасить светодиод //#2 SPI.begin(); // Init SPI bus rfid.PCD_Init(); // Init MFRC522 } void loop() { //#1 //#2 static uint32_t past_1 = 0 ; if (millis() - past_1 >= 200) { // опрос карточки идет каждые 200 миллисек past_1 = millis() ; RFID_btn = (RFID_btn << 1) | rfid.PICC_IsNewCardPresent(); if ((RFID_btn & 3) == 1)digitalWrite(led_pin, Led = ! Led); } }
Можно и без неё если у Вас MFRC522.h будет работать.Тогда в Скетче от qwone ничего менять не надо. RFID.h и MFRC522.h одно и то же но MFRC522.h у меня отказывается работать напрочь.
Код на 4 карточки Код (C++): /* #1 светодиод -> 13 (led_pin) 1 горит / 0 нет #2 RFID_RC522 RST -> 9 (RST_pin) SDA(SS)-> 10 (SDA_pin) MOSI -> 11 (MOSI_pin) MISO -> 12 (MISO_pin) SCK -> 13 (SCK_pin) 3,3В -> 3,3В GND -> GND Card UID: E6 38 FE 13 брелок 1 Card UID: E6 38 FE 10 брелок 2 Card UID: E6 38 FE 11 брелок 3 Card UID: E6 38 FE 12 брелок 4 */ //#1 const int led_pin = 13; //нога светодиода uint8_t Led;// значение на нем //#2 byte uidCard1[4] = {0xE6, 0x38, 0xFE, 0x13}; byte uidCard2[4] = {0xE6, 0x38, 0xFE, 0x10}; byte uidCard3[4] = {0xE6, 0x38, 0xFE, 0x11}; byte uidCard4[4] = {0xE6, 0x38, 0xFE, 0x12}; #include <SPI.h> #include <MFRC522.h> const int SDA_pin = 10; const int RST_pin = 9; MFRC522 rfid(SDA_pin, RST_pin); // Instance of the class uint8_t RFID_btn = 0; // 1 есть правильная карточка / 0 нет или карточки или неправильная void setup() { //#1 pinMode(led_pin, OUTPUT); // инициализировать светодиод digitalWrite(led_pin, Led = 1); // и погасить светодиод //#2 SPI.begin(); // Init SPI bus rfid.PCD_Init(); // Init MFRC522 } void loop() { //#1 //#2 static uint32_t past_1 = 0 ; if ( millis() - past_1 >= 200) { // опрос карточки идет каждые 200 миллисек past_1 = millis() ; RFID_btn = RFID_btn << 1; if ( rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial() && ( rfid.uid.uidByte[0] == uidCard1[0] && // проверка 1 карточки rfid.uid.uidByte[1] == uidCard1[1] && rfid.uid.uidByte[2] == uidCard1[2] && rfid.uid.uidByte[3] == uidCard1[3] || rfid.uid.uidByte[0] == uidCard2[0] && // проверка 2 карточки rfid.uid.uidByte[1] == uidCard2[1] && rfid.uid.uidByte[2] == uidCard2[2] && rfid.uid.uidByte[3] == uidCard2[3] || rfid.uid.uidByte[0] == uidCard3[0] && // проверка 3 карточки rfid.uid.uidByte[1] == uidCard3[1] && rfid.uid.uidByte[2] == uidCard3[2] && rfid.uid.uidByte[3] == uidCard3[3] || // проверка 4 карточки rfid.uid.uidByte[0] == uidCard4[0] && rfid.uid.uidByte[1] == uidCard4[1] && rfid.uid.uidByte[2] == uidCard4[2] && rfid.uid.uidByte[3] == uidCard4[3] ) ) RFID_btn = RFID_btn | 1; if ((RFID_btn & 3) == 1) digitalWrite(led_pin, Led = ! Led); } }
Код (C++): /* #1 светодиод -> 13 (led_pin) 1 горит / 0 нет #2 RFID_RC522 RST -> 9 (RST_pin) SDA(SS)-> 10 (SDA_pin) MOSI -> 11 (MOSI_pin) MISO -> 12 (MISO_pin) SCK -> 13 (SCK_pin) 3,3В -> 3,3В GND -> GND Card UID: E6 38 FE 13 брелок 1 Card UID: E6 38 FE 10 брелок 2 Card UID: E6 38 FE 11 брелок 3 Card UID: E6 38 FE 12 брелок 4 */ //#1 const int led_pin = 13; //нога светодиода uint8_t Led;// значение на нем //#2 byte uidCard1[4] = {0xE6, 0x38, 0xFE, 0x13}; byte uidCard2[4] = {0xE6, 0x38, 0xFE, 0x10}; byte uidCard3[4] = {0xE6, 0x38, 0xFE, 0x11}; byte uidCard4[4] = {0xE6, 0x38, 0xFE, 0x12}; #include <SPI.h> #include <MFRC522.h> const int SDA_pin = 10; const int RST_pin = 9; MFRC522 rfid(SDA_pin, RST_pin); // Instance of the class uint8_t RFID_btn = 0; // 1 есть правильная карточка / 0 нет или карточки или неправильная uint8_t Card; void setup() { Serial.begin(9600); //#1 pinMode(led_pin, OUTPUT); // инициализировать светодиод digitalWrite(led_pin, Led = 1); // и погасить светодиод //#2 SPI.begin(); // Init SPI bus rfid.PCD_Init(); // Init MFRC522 } void loop() { //#1 //#2 static uint32_t past_1 = 0 ; if ( millis() - past_1 >= 200) { // опрос карточки идет каждые 200 миллисек past_1 = millis() ; RFID_btn = RFID_btn << 1; if ( rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) { if (rfid.uid.uidByte[0] == uidCard1[0] && // проверка 1 карточки rfid.uid.uidByte[1] == uidCard1[1] && rfid.uid.uidByte[2] == uidCard1[2] && rfid.uid.uidByte[3] == uidCard1[3] ) { RFID_btn = RFID_btn | 1; Card = 1; } if (rfid.uid.uidByte[0] == uidCard2[0] && // проверка 2 карточки rfid.uid.uidByte[1] == uidCard2[1] && rfid.uid.uidByte[2] == uidCard2[2] && rfid.uid.uidByte[3] == uidCard2[3] ) { RFID_btn = RFID_btn | 1; Card = 2; } if ( rfid.uid.uidByte[0] == uidCard3[0] && // проверка 3 карточки rfid.uid.uidByte[1] == uidCard3[1] && rfid.uid.uidByte[2] == uidCard3[2] && rfid.uid.uidByte[3] == uidCard3[3] ) { RFID_btn = RFID_btn | 1; Card = 3; } if (rfid.uid.uidByte[0] == uidCard4[0] && // проверка 4 карточки rfid.uid.uidByte[1] == uidCard4[1] && rfid.uid.uidByte[2] == uidCard4[2] && rfid.uid.uidByte[3] == uidCard4[3]) { RFID_btn = RFID_btn | 1; Card = 4; } if ((RFID_btn & 3) == 1) { digitalWrite(led_pin, Led = ! Led); Serial.print("Card :"); Serial.println(Card); } } } }
гм, что тут заумного по сравнению с вашим кодом?? Код (C++): #define RFID_MASTER 4037699341 #define RFID_STOP 3325048478 #define RFID_RESTART 3858093365 #define RFID_PLAY 511694389 void loop() { unsigned long currentID = readRFID(); // опрос ридера switch (currentID) { case RFID_MASTER : // blip break; case RFID_PLAY: // blop break; case RFID_STOP: // blap break; case RFID_RESTART: // blup break; case CARD_NONE: // clap break; case CARD_ERROR: // clop break; } } unsigned long readRFID() { unsigned long uidDec; // псевдо-хеш: десятичное представление ID карты if (!mfrc522.PICC_IsNewCardPresent()) return CARD_NONE;// метки нет else if (mfrc522.PICC_ReadCardSerial()) // метка есть и удалось прочитать { for (byte i = 0; i < mfrc522.uid.size; i++) uidDec = uidDec * 256 + mfrc522.uid.uidByte[i]; mfrc522.PICC_ReadCardSerial(); return uidDec; } else return CARD_ERROR; // метка есть, но прочитать не удалось } Бонусом получаем возможность отслеживания состояния ридера: карты нет, карта есть, карту убрали (не из-за хеша, чуть другая архитектура кода).
С моей точки , ничего не выиграли. Ни размер исходника, ни понимания. Это как какой карандаш слаще:желтый или красный.