Привет. Помогите. Нужно сделать чтобы проверка была по блоку 4,5 из сектора 1 а не по uid. Собирал из кусков, кое че сам дописывал не получается сделать поверку по id блоку 4,5 из сектора 1 . Все это работает на arduino nano и rfid-rc522 Код (C++): #include <SPI.h> #include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. unsigned long uidDec, uidDecTemp; boolean switchOn = false; boolean cardRead = false; void setup() { Serial.begin(9600); // Initialize serial communications with the PC SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 card mfrc522.PCD_SetAntennaGain(mfrc522.RxGain_max); Serial.println("Waiting for card..."); pinMode(7, OUTPUT); pinMode(6, OUTPUT); pinMode(4, OUTPUT); digitalWrite(7, LOW); digitalWrite(6, LOW); } void loop() { byte status; byte byteCount; byte buffer[2]; // длинa мaccивa (16 бaйт + 2 бaйтa кoнтрoльнaя cуммa) byteCount = sizeof(buffer); uidDec = 0; status = mfrc522.PICC_RequestA(buffer, &byteCount); if (mfrc522.PICC_ReadCardSerial()) { for (byte i = 0; i < mfrc522.uid.size; i++) { uidDecTemp = mfrc522.uid.uidByte[i]; uidDec = uidDec * 256 + uidDecTemp; } //Serial.println(uidDec); //mfrc522.PICC_HaltA(); // Stop reading if ((uidDec == 117,24,42,119,48) && (switchOn == false)) { digitalWrite(4, HIGH); digitalWrite(7, HIGH); // Turn on red LED switchOn = true; Serial.println("Switched On"); Serial.println(uidDec); tone(3, 3000); // Делаем звуковой сигнал, Открытие delay(3000); digitalWrite(7, LOW); digitalWrite(6, HIGH); } mfrc522.PICC_ReadCardSerial(); } else { if (switchOn == true) { Serial.println("Switched Off"); digitalWrite(4, LOW); digitalWrite(7, LOW); digitalWrite(6, LOW); tone(3, 500,300); // Делаем звуковой сигнал, Закрытие switchOn = false; } } }
Sektor 0 первая строчка это UID карты и он не меняется.Все остальное можно переписать. Организация памяти чипа MIFARE 1K (16 секторов, по 4 блока в каждом секторе, по 16 байт каждый блок (в секторе 0, блоке 0 содержится информация завода-изготовителя). if((uidDec ==117,24,42,119,48) это он а мне надо вот этот кусок, он работает как мне надо как раз первые две строки и там дальше. Код (C++): int countUsers = 2; byte Users[2][16] = {{1,2,3,4, 5,6,7,8, 9,16,255,11,12, 13,14,15}, {0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1}}; void setup() { Serial.begin(9600); // Initialize serial communications with the PC SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 card mfrc522.PCD_SetAntennaGain(mfrc522.RxGain_max); Serial.println("Waiting for card..."); pinMode(7, OUTPUT); pinMode(6, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); digitalWrite(7, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); } void loop() { MFRC522::MIFARE_Key key; for (byte i = 0; i < 6; i++) { key.keyByte[i] = 0xFF; } if ( ! mfrc522.PICC_IsNewCardPresent()) { if (digitalRead(8) == HIGH) { digitalWrite(7, HIGH); delay(500); if (switchOn) { switchOn = false; Serial.println("CLOSED!"); digitalWrite(6, HIGH); } else { switchOn = true; Serial.println("OPENED!"); digitalWrite(6, LOW); } delay(500); digitalWrite(7, LOW); } return; } if ( ! mfrc522.PICC_ReadCardSerial()) { return; } Serial.print("!"); Serial.print("\r\n"); for (byte i = 0; i < mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(mfrc522.uid.uidByte[i], HEX); } Serial.print("\r\n"); byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); //Serial.print(mfrc522.PICC_GetTypeName(piccType)); //Serial.print("\r\n"); if ( piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { return; } byte sector = 1; byte valueBlockA = 4; byte valueBlockB = 5; byte valueBlockC = 6; byte trailerBlock = 7; MFRC522::StatusCode status;