Помогите разобраться с кодом RFID сканера.

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Илья91, 1 июн 2014.

  1. Илья91

    Илья91 Нуб

    Здравствуйте форумчане. Обращаюсь к вам т.к. не силен в программировании, но появилась нужда в создании RFID системы. Аппаратно все работает, скачал скетч в интернете, залил все заработало как нужно. Мне очень нужна ваша помощь в подробном комментировании кода. Вот так он выглядит:

    #include <SoftwareSerial.h>
    SoftwareSerial RFID(2, 3); // RX and TX

    int data1 = 0;
    int ok = -1;
    int yes = 13;
    int no = 12;

    int tag1[14] = {2,55,49,48,48,56,54,53,70,70,48,53,56,3};
    int newtag[14] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    void setup()
    {
    RFID.begin(9600);
    Serial.begin(9600);
    pinMode(yes, OUTPUT);
    pinMode(no, OUTPUT);
    }

    boolean comparetag(int aa[14], int bb[14])
    {
    boolean ff = false;
    int fg = 0;
    for (int cc = 0 ; cc < 14 ; cc++)
    {
    if (aa[cc] == bb[cc])
    {
    fg++;
    }
    }
    if (fg == 14)
    {
    ff = true;
    }
    return ff;
    }

    void checkmytags()
    {
    ok = 0;

    if (comparetag(newtag, tag1) == true)
    {
    ok++;
    ok++;
    }
    }

    void readTags()
    {
    ok = -1;

    if (RFID.available() > 0)
    {
    delay(100);

    for (int z = 0 ; z < 14 ; z++)
    {
    data1 = RFID.read();
    newtag[z] = data1;
    }
    RFID.flush();

    checkmytags();
    }

    if (ok > 0)
    {
    Serial.println("Yes");
    digitalWrite(yes, HIGH);
    delay(1000);
    digitalWrite(yes, LOW);

    ok = -1;
    }
    else if (ok == 0)
    {
    Serial.println("NO!!!");
    digitalWrite(no, HIGH);
    delay(1000);
    digitalWrite(no, LOW);

    ok = -1;
    }
    }

    void loop()
    {
    readTags();
    }

    Заранее спасибо, очень благодарен за ответ.
    Ну или просто объясните то делает этот кусок скетча

    boolean comparetag(int aa[14], int bb[14])
    {
    boolean ff = false;
    int fg = 0;
    for (int cc = 0 ; cc < 14 ; cc++)
    {
    if (aa[cc] == bb[cc])
    {
    fg++;
    }
    }
    if (fg == 14)
    {
    ff = true;
    }
    return ff;
    }

    void checkmytags()
    {
    ok = 0;

    if (comparetag(newtag, tag1) == true)
    {
    ok++;
    ok++;
    }
    }
     
    Последнее редактирование: 1 июн 2014
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    Функция comparetag сравнивает 2 массива. Если все элементы массивов равны - возвращает true (ИСТИНА), иначе - false (ЛОЖЬ).

    Вот то же самое, только этот вариант не использует лишние переменные и возвращает false на первом несовпадении элементов массива, не перебирая его полностью.
    Код (Text):
    boolean comparetag(int tag1[14], int tag2[14])
    {
      for (int i = 0 ; i < 14 ; i++)
        if (tag1[i] != tag2[i])
          return false;
      return true;
    }
     
     
  3. Илья91

    Илья91 Нуб

    Спасибо большое =)