Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:laboratory_iot_c:exp37 [2024/12/04 16:50] – [Программный код эксперимента] labuser30products:laboratory_iot_c:exp37 [2024/12/04 17:20] (текущий) – [Программный код эксперимента] labuser30
Строка 40: Строка 40:
 void setup() {  void setup() { 
   Serial.begin(9600);   Serial.begin(9600);
 +  Serial.println();
   SPI.begin();   SPI.begin();
   rdr.PCD_Init();    rdr.PCD_Init(); 
Строка 69: Строка 70:
 </code> </code>
  
-Далее мы определили функцию ''bytesToString()'', которая принимает массив байт и его длину, и возвращает строку +Далее мы определили функцию ''bytesToString()'', которая принимает массив байт и его длину, и возвращает строку — номер метки. Эта функция позволит нам удобно выводить номер метки. Подробно останавливаться как работает функция не будем.    
 <code python[enable_line_numbers="2", start_line_numbers_at="8"]> <code python[enable_line_numbers="2", start_line_numbers_at="8"]>
 String bytesToString(byte *bytes, byte size) { String bytesToString(byte *bytes, byte size) {
Строка 81: Строка 82:
 </code> </code>
  
-В основном цикле запрашиваем данные о состоянии считывателя +Инициализируем шину SPI и считыватель меток: 
-<code python[enable_line_numbers="2", start_line_numbers_at="7"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="20"]> 
-    (stat, tag_typerdr.request(rdr.REQIDL)+  SPI.begin()
 +  rdr.PCD_Init();
 </code> </code>
  
-Если обнаружена метка, то запрашиваем номер метки +В основном цикле мы сначала проверяем приложена ли метка с считывателюесли нет начинаем цикл сначала. Аналогично проверяем удалось ли считать номер метки, если нет  начинаем цикл сначала. 
-<code python[enable_line_numbers="2", start_line_numbers_at="10"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="25"]> 
-        (stat, raw_uidrdr.anticoll()+  if (!rdr.PICC_IsNewCardPresent()) return; 
 +  if (!rdr.PICC_ReadCardSerial()) return;
 </code> </code>
  
-Формируем строку с номером карты для отображения пользователю +Если считывание метки было успешно, то номер записывается в массив байт ''rdr.uid.uidByte'', который мы передаем в функцию ''bytesToString()'' возвращающую строку.   
-<code python[enable_line_numbers="2", start_line_numbers_at="13"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="28"]>  
-            card_number = '{:x}{:x}{:x}{:x}'.format(raw_uid[0]raw_uid[1], raw_uid[2], raw_uid[3])+  Serial.println("Card detected: " + bytesToString(rdr.uid.uidByte4));
 </code> </code>
  
-Метод ''format()'' принимает произвольное количество аргументов и выполняет их подстановку в указанных местах строки, относительно которой он вызван. В строке- шаблоне есть специальные метки в фигурных скобках. На их места подставляются соответствующие аргументы метода. Полученную таким образом строку выводим в терминал 
- 
-<code python[enable_line_numbers="2", start_line_numbers_at="14"]> 
-  Serial.println("Card detected: " + bytesToString(rdr.uid.uidByte, 27)); 
-</code> 
  
 Оператор ''+'' в данном случае выполняет функцию конкатенации (склейки строк) так как находится в контексте строк, а не чисел. Оператор ''+'' в данном случае выполняет функцию конкатенации (склейки строк) так как находится в контексте строк, а не чисел.
  
 +Функция ''rdr.PICC_HaltA()'' блокирует повторное считывание метки.
 +<code arduino[enable_line_numbers="2", start_line_numbers_at="29"]> 
 +  rdr.PICC_HaltA();
 +</code>
  
 +<WRAP center round info 60%>
 +  * [[https://arduino.ru/Reference/StringObject|Подробнее о строках в Arduino]]
 +</WRAP>