Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Электроника - это просто Теоретические и практические вопросы для начинающих электронщиков.

 
Опции темы
Непрочитано 13.08.2018, 07:27  
GrafGrigorio
Частый гость
 
Регистрация: 13.08.2018
Адрес: Краснодар
Сообщений: 25
Сказал спасибо: 14
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
GrafGrigorio на пути к лучшему
По умолчанию Китайский двухчастный модуль rfid

Привет всем.
Недавно я себе приобрел модуль 7941W по заявлению китайца может писать и читать rfid в данный момент интересует 125кГц, вообщем накидал на макетку шлю ему команду отвечает, ключ читает, но как только пытаюсь что то записать он выдает успешное завершение команды но запись как таковую не производит.

Когда игрался с паузами на отправку каким то чудом удалось произвести запись, но там был не ключ который был послан, а кусок ответа самого модуля.

Ссылка на сам модуль

Возможно, я что то не так делаю в программе, буду рад услышать конструктивную критику по коду=)
В кранце шлем 1 и ждем ключа полученный ключ сохраняем шлем 2 пытаемся его записать.
Нажмите, чтобы открыть спойлер
PHP код:
#include ‹SoftwareSerial.h›
SoftwareSerial rfidSerial(910);

int lastLenght 0;//Длина последнего считанного массива
byte respose[12], key[5]  = {0xFF0xFF0xFF0xFF0xFF}; //Отдельный массив с ключем и ответом модуля
byte readId[6]            = {0xAB0xBA0x000x150x000x15};//Команда на сичтывание
//byte writeId[12]          = {0xAB, 0xBA, 0x00, 0x16, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00};//команда на запись
byte writeId[12]            = {0xAB0xBA0x000x160x050x2E0x000xB60xA30x020x2A};//команда на запись

void setup()
{
  
Serial.begin(115200);
  
rfidSerial.begin(115200);
}

void loop()
{
  
int rd Serial.read();
  if (
rd == '1')// ждем ключ и пишим егов массив key
  
{
    
vaitKey(100);
    
keySe();
    
printKey(respose);
  }
  if (
rd == '2')//пытаемся записать ключ
  
{
    
//================================================
    
int op 0;
    for (
int t 5‹ 10; ++t)
    {
      
writeId[t] = key[op];//формируем команду для отправки модулю
      
++op;
    }
    
writeId[10] = xorCheck(writeId);//вставляем последний байт с чек суммой
    //sendComand(writeId, 10);
    //================================================
    //vaitKey(100);
    //printKey(respose, lengt);

    
Serial.print("Old key: ");
    
//    clearRespose();
    //    vaitKey(100);//Джем ключа
    //    printKey(respose);//выводим ключ
    //
    //    clearRespose();
    
sendComand(writeId11);//отправляем команду на запись
    
readRespose();//читаем ответ
    
printKey(respose);//смотрим че пришло

    
while (true)
    {
      
vaitKey(100);//ждем ключа для кго проверки
      
if (keyCheck())//проверяем равны ли ключи
      
{
        
//vaitKey(100);// если все хошоло то запрашиваем записанный
        
printKey(respose);//выводим его
        
Serial.print("Write Success");
        return;
      }
      else
      {
        
//delay(200);
        
clearRespose();
        
sendComand(writeId11);//Отправляем команду назапись
        
readRespose();//Читаем ответ
        
printKey(respose);//выводим его
      
}
    }
  }
  if (
rd == '3')
  {

  }
}

boolean keyCheck()//Проверяем равны ли считанный ключ с тем что пришел в ответ на запрос
{
  
int yy 0;
  for (
int o 5‹= 9; ++o)
  {
    if (
respose[o] != key[5])
    {
      return 
false;
    }
    ++
yy;
  }
  return 
true;
}

void printKey(byte rp[])//Вывод в консоль
{
  
char str[20];
  if (
rp[4] == 0x00)// если модуль вернул 0 в значении длинна данных то выводим только команды
  
{
    
Serial.print(millis() / 1000);
    
Serial.print("›› Key: ");
    for (
int tr 2tr ‹= 5; ++tr)
    {
      
Serial.print(rp[tr], HEX);
      
Serial.print(" ");
    }
    
Serial.println("");
  }
  else
// Выводим весь ответ
  
{
    
Serial.print(millis() / 1000);
    
Serial.print("›› Key: ");
    for (
int tr 5tr ‹= 10; ++tr)
    {
      
Serial.print(rp[tr], HEX);
      
Serial.print(" ");
    }
    
Serial.print("Lenght: ");
    
Serial.print(rp[4], HEX);
    
Serial.println("");
  }
}

void readRespose()//Процедура чтения ответа
{
  
/*По протококу модуль в начало ответа шлет заголовок CD DC */
  
int yp 1;
  if (
rfidSerial.read() == 0xCD)// Отлавливаем заголовок
  
{
    while (
rfidSerial.available() › 0)// Читаем пока есть данные
    
{
      
respose[yp] = rfidSerial.read();
      
//Serial.print(respose[yp], HEX);
      //Serial.print(" ");
      
++yp;
      
lastLenght yp;// Счетцик считанных байтов
    
}
    
Serial.flush();
    
//Serial.println("");
  
}
}

void keySe()//Выдираем из массива отвера 5 байт самого ключа
{
  
int k 0;
  if (
respose[3] == 0x81)
  {
    for (
int ui 5ui ‹= 9; ++ui)
    {
      
key[k] = respose[ui];
      ++
k;
    }
  }
}

void vaitKey(int vait)//Ждем считываение ключа
{
  do
  {
    
clearRespose();       // очистка массива перед чтением
    //rfidSerial.flush();   // На всякий сделал очистку кэша порта
    
sendComand(readId6);// Отправляем команду заранее прописанную в массиве AB BA 00 15 00 15
    
readRespose();        // Читаем ответ в массив respose
    
delay(vait);          // Пауза чтобы не сильно напрягать модуль
  
} while (respose[3] == 0x00 || respose[3] == 0x80);
  
/* В случае успешного выполнения команды модуль шлет 81 и в случае провала 80
    00  на проверке про причине первоначальной очистки  массива.*/
}

void sendComand(byte comand[], int lenght//Отправляем команду модулю
{
  
rfidSerial.write(comandlenght);
}

void clearRespose() //Очистка массива в котором хранится ответ
{
  for (
int r 0‹ 12; ++r)
  {
    
respose[r] = 0;
  }
}

byte xorCheck(byte rr[]) //Чек сумма отправляемого запроса
{
  
int z 0;
  for (
int i 2‹= 9; ++i)
  {
    
rr[i];
  }
  return 
z;

Реклама:

Последний раз редактировалось GrafGrigorio; 13.08.2018 в 07:36.
GrafGrigorio вне форума  
Непрочитано 13.08.2018, 10:49  
johanh
Почётный гражданин KAZUS.RU
 
Регистрация: 28.03.2006
Сообщений: 3,611
Сказал спасибо: 141
Сказали Спасибо 427 раз(а) в 377 сообщении(ях)
johanh на пути к лучшему
По умолчанию Re: Китайский двухчастный модуль rfid

GrafGrigorio, может быть длина пароля ?
...
johanh вне форума  
Непрочитано 13.08.2018, 12:01  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Китайский двухчастный модуль rfid

GrafGrigorio, для начала - код таки стоит вставлять как файл, так будет сильно меньше непоняток с отсутствием его частей (минимум в первой строке в угловых скобках). Да и смотреть код каждому желающему в привычном редакторе как-то удобнее , можно даже в двух кодировках - 1251 и Unicode.
По сути вопроса - тут стоит очень внимательно покурить DS на сам модуль и проверить все цепочки команд, длины буферов и настройки. Чудес при работающем модуле не бывает…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 14.08.2018, 00:23  
GrafGrigorio
Частый гость
 
Регистрация: 13.08.2018
Адрес: Краснодар
Сообщений: 25
Сказал спасибо: 14
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
GrafGrigorio на пути к лучшему
По умолчанию Re: Китайский двухчастный модуль rfid

Сообщение от johanh Посмотреть сообщение
GrafGrigorio, может быть длина пароля ?
...
Пароль нужен только для частоты 13.56 в данном случае используется простая nmarine.

mike-y-k файлы добавил, по поводу цепочки команд и буферов хотелось бы поподробнее.
Вложения:
Тип файла: rar rfid_v1.1.rar (4.1 Кб, 0 просмотров)
GrafGrigorio вне форума  
Непрочитано 14.08.2018, 01:28  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Китайский двухчастный модуль rfid

GrafGrigorio, так а где нормальное описание на модуль?
И на каком вартианте arduino это все у Вас запускается?
По ссылке на модуль маловато информации, только если брать такой же и разбираться и с его прошивкой, и с протоколом
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 14.08.2018, 02:40  
johanh
Почётный гражданин KAZUS.RU
 
Регистрация: 28.03.2006
Сообщений: 3,611
Сказал спасибо: 141
Сказали Спасибо 427 раз(а) в 377 сообщении(ях)
johanh на пути к лучшему
По умолчанию Re: Китайский двухчастный модуль rfid

GrafGrigorio, Может быть длина слова ?
Вроде на страничке продажи описаны все команды и протоколы.
И примеры есть.
Пролистать страничку вниз.
...

Последний раз редактировалось johanh; 14.08.2018 в 03:44.
johanh вне форума  
Непрочитано 14.08.2018, 04:47  
GrafGrigorio
Частый гость
 
Регистрация: 13.08.2018
Адрес: Краснодар
Сообщений: 25
Сказал спасибо: 14
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
GrafGrigorio на пути к лучшему
По умолчанию Re: Китайский двухчастный модуль rfid

Сообщение от mike-y-k Посмотреть сообщение
GrafGrigorio, так а где нормальное описание на модуль?
И на каком вартианте arduino это все у Вас запускается?
Вся информация что я располагаю это ссылка на товар, ардуино нано, пытался найти похожие, находил только ридеры, продаван говорит, что у тебя брелок не такой.
GrafGrigorio вне форума  
 

Закладки

Метки
125 кгц, 13.56 мгц, 7941w, rfid
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ускорить компьютер 7Fantomas7 Ремонт оргтехники 111 08.08.2018 05:27
RFID на Arduino с использованием Parallax RFID reader/writer IvanPuzirev Микроконтроллеры, АЦП, память и т.д 13 22.04.2014 20:57


Часовой пояс GMT +4, время: 02:05.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot