Запись в ключ RFID 16МГц
- Войдите на сайт для отправки комментариев
Втр, 26/12/2017 - 19:00
Здравствуйте всем как можно написать скетч чтобы при каждом срабатывание значение в 16 чейке уменшалься
#include <SPI.h> #include <MFRC522.h> #define RST_PIN 9 #define SS_PIN 10 byte last=100; MFRC522 mfrc522(SS_PIN, RST_PIN); MFRC522::MIFARE_Key key; void setup() { Serial.begin(9600); while (!Serial); SPI.begin(); mfrc522.PCD_Init(); pinMode(6, OUTPUT); digitalWrite(6, LOW); // Подготовим ключ // используем ключ FFFFFFFFFFFFh который является стандартом для пустых карт for (byte i = 0; i < 6; i++) { key.keyByte[i] = 0xFF; } Serial.println(F("Scan a MIFARE Classic PICC to demonstrate read and write.")); Serial.print(F("Using key (for A and B):")); dump_byte_array(key.keyByte, MFRC522::MF_KEY_SIZE); Serial.println(); Serial.println(F("BEWARE: Data will be written to the PICC, in sector #1")); } void loop() { // Ждем новую карту if ( ! mfrc522.PICC_IsNewCardPresent()) return; // Выбираем одну из карт if ( ! mfrc522.PICC_ReadCardSerial()) return; // Показываем подробности карты Serial.print(F("Card UID:")); dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); Serial.println(); Serial.print(F("PICC type: ")); byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); Serial.println(mfrc522.PICC_GetTypeName(piccType)); // Проверяем совместимость if ( piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { Serial.println(F("This sample only works with MIFARE Classic cards.")); return; } // В этом примере мы используем первый сектор данных карты, блок 4 byte sector = 1; byte blockAddr = 4; byte dataBlock[] = { // Данные, которые мы запишем на карту 0x64, 0x02, 0x03, 0x04, // 1, 2, 3, 4, 0x05, 0x06, 0x07, 0x08, // 5, 6, 7, 8, 0x09, 0x0A, 0x0B, 0x0c, // 9, 10, 11, 12, 0x0d, 0x0e, 0x0f, last // 13, 14, 15, 16 }; byte trailerBlock = 7; byte status; byte buffer[18]; byte size = sizeof(buffer); // Аутентификация Serial.println(F("Authenticating using key A...")); status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } // Показываем текущие данные сектора Serial.println(F("Current data in sector:")); mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); Serial.println(); // Читаем данные из блока Serial.print(F("Reading data from block ")); Serial.print(blockAddr); Serial.println(F(" ...")); status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); if (status != MFRC522::STATUS_OK) { Serial.print(F("MIFARE_Read() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); } Serial.print(F("Data in block ")); Serial.print(blockAddr); Serial.println(F(":")); dump_byte_array(buffer, 16); Serial.println(); Serial.println(); // Аутентификация Serial.println(F("Authenticating again using key B...")); status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } // Записываем данные в блок Serial.print(F("Writing data into block ")); Serial.print(blockAddr); Serial.println(F(" ...")); dump_byte_array(dataBlock, 16); Serial.println(); status = mfrc522.MIFARE_Write(blockAddr, dataBlock, 16); if (status != MFRC522::STATUS_OK) { Serial.print(F("MIFARE_Write() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); } Serial.println(); // Читаем данные снова, чтобы проверить, что запись прошла успешно Serial.print(F("Reading data from block ")); Serial.print(blockAddr); Serial.println(F(" ...")); status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); if (status != MFRC522::STATUS_OK) { Serial.print(F("MIFARE_Read() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); } Serial.print(F("Data in block ")); Serial.print(blockAddr); Serial.println(F(":")); dump_byte_array(buffer, 16); Serial.println(); Serial.println(F("Checking result...")); byte count = 0; for (byte i = 0; i < 16; i++) { if (buffer[i] == dataBlock[i]) count++; } Serial.print(F("Number of bytes that match = ")); Serial.println(count); if (count == 16) { Serial.println(F("Success :-)")); } else { Serial.println(F("Failure, no match :-(")); Serial.println(F(" perhaps the write didn't work properly...")); } Serial.println(); // Выводим данные Serial.println(F("Current data in sector:")); mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); Serial.println(); mfrc522.PICC_HaltA(); mfrc522.PCD_StopCrypto1(); } void dump_byte_array(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.print(buffer[i], HEX); } }
чтобы при каждом срабатывание значение в 16 чейке уменшалься
чтобы при каждом срабатывание значение в 16 чейке уменшалься
попробую перевести :)
- в строках 59-62 определена структура. Автор хочет, чтобы значение 16-ого поля при каждом приложении нужной карты последовательно уменьшалось.
Повидимо, ТС собирается сделать что-то типа транспортной карты с ограниченным количеством проходов.
Спасибо что более подробно описали суть проблемы
- в строках 59-62 определена структура. Автор хочет, чтобы значение 16-ого поля при каждом приложении нужной карты последовательно уменьшалось.
Тогда у автора проблемы. Там определён массив и у него попросту нет 16-го элемента - нечему уменьшаться :(((
В той нумерации, что привел ТС в комментиариях, 16-й элемент имеется.
В той нумерации, что привел ТС в комментиариях, 16-й элемент имеется.
В комментариях или в воспалённой фантазии автора может иметься любой элемент, но с этим на другой форум.
В той нумерации, что привел ТС в комментиариях, 16-й элемент имеется.
и как к нему обратится ? неужели
кол-во их 16, но перый, это нулевой последний 15.
опять холивар какой то.
короче авТор, в 104 строку вставляешь
и не паришься.
и как к нему обратится ?
Главное - понятно, какой именно элемент автор считает "шестнадцатым". Никто не мешает ему располагаться в массиве хоть на первом месте. В данном случае:
Главное - понятно, что такая охинея не пройдет
А что там ему "мешает", одному ему известно.
опять холивар какой то.
Причём на ровном месте.
То-ли тем достойных поубавилось, то-ли на исчезновение клапауция у народа болезненная реация :(
Андриано. всюду вам СЕКС мерещится :)
Андриано. всюду вам СЕКС мерещится :)
Нормальный, здоровый мужик! А то блин, развелось тут ... сами знаете :(
а если будем вставит другой ключ
Ну так вы сначала читайте содержимое этой ячейки из текущего ключа, потом отнимайте единицу. потом записывайте обратно. При такой схеме совершенно непонятно, как у вас данные с одного ключа могут попасть в другой.
а как читать содержимое текущего ключа чтобы не записать туда старое значение
Надеваешь очки, и водя пальцами по ключу и шевеля губами, читаешь его содержимое.
Забыл. К пальцу нада синей изолентой примотать модуль MFRC522.
а как читать содержимое текущего ключа чтобы не записать туда старое значение
странный вопрос. В вашем скетче, начиная со строки 84 - чтение блока ключа.
хотя, судя по вопросу, это не ваш скетч - а скопированный где-то без всякого понимания
Забыл. К пальцу нада синей изолентой примотать модуль MFRC522.
Так то лучше, а то смотрю - вроде недоработка какая-то.
правильно заметили скетч где то на форуме скачал, пока не получается с несколькоми ключами работать
так как записывает значение первого ключа на второй ключ.
правильно заметили скетч где то на форуме скачал, пока не получается с несколькоми ключами работать
так как записывает значение первого ключа на второй ключ.
совет один - разбирайтесь, как работает этот код. ИМХО, там есть все. что вам нужно
Думаю, надо сначала более простои пример паматреть. Разобраца.
немножко трудно разобратся с кодом
немножко трудно разобратся с кодом
А кому легко? Пока не научишься с трудом, но сам разбираться, так и будешь чужие коды по сети тырить, а потом за изменениями по форумам побираться.
Работай, пользы больше будет.
Yer,
>>Запись в ключ RFID 16МГц
Однако, не 16 МГц, а 13.56 МГц
>> The MFRC522 is a highly integrated reader/writer IC for contactless communication
at 13.56 MHz.
https://www.nxp.com/docs/en/data-sheet/MFRC522.pdf
немножко трудно разобратся с кодом
Пьер, как ты находишь мою грудь? С трудом Сюзанна, с трудом...
Пьер, как ты находишь мою грудь? Немножечко трудно Сюзанна, совсем немножечко...
Не подскажите как можно понять код написанной для ключа rfid
Yer. на такие вопросы вы ничего, кроме стеба, не дождетесь. Напишите, что конкретно в коде - какие операторы, какие строки - вам непонятно, тогда шансов на ответ больше.
Спасибо что откликнулись мне непонтно вот этот код:
фунция dump_byte_array как работает непонятно
Добрый день пробовал читать данные с блока ячейки вроде получилось но записывает значение к второму ключю.