Уважаемые участники форума. Захотелось создать систему, выполняющую некое действия в случае успешной идентификации RFID карты. Имеется код : Код (Text): #include <SoftwareSerial.h> SoftwareSerial SoftSerial(2, 3); unsigned char buffer[64]; // buffer array for data recieve over serial port int count=0; // counter for buffer array void setup() { SoftSerial.begin(9600); // the SoftSerial baud rate Serial.begin(9600); // the Serial port of Arduino baud rate. } void loop() { if (SoftSerial.available()) // if date is comming from softwareserial port ==> data is comming from SoftSerial shield { while(SoftSerial.available()) // reading data into char array { buffer[count++]=SoftSerial.read(); // writing data into array if(count == 64)break; } Serial.write(buffer,count); // if no data transmission ends, write buffer to hardware serial port clearBufferArray(); // call clearBufferArray function to clear the storaged data from the array count = 0; // set counter of while loop to zero } if (Serial.available()) // if data is available on hardwareserial port ==> data is comming from PC or notebook SoftSerial.write(Serial.read()); // write it to the SoftSerial shield } void clearBufferArray() // function to clear buffer array { for (int i=0; i<count;i++) { buffer[i]=NULL;} // clear all index of array with command NULL } Как его преобразовать для моих целей ? Например : если карта моя, то на pin 13 загорится светодиод Сам в программировании не силен, поэтому задача непосильная Заведомо спасибо всем, кто окажет помощь или даст какой-то совет
Я так понимаю, у вас RFID сканер на 125 кГц, т.к. ваш код от него. Сам долго парился с ним, хотел сигнализацию сделать) Суть в том, что имеется два скользких момента при работе с этим сканером. 1) необходимо учитывать первый и последний контрольные байты, чтобы сравнение своего кода со считываемым было адекватным. 2) ввести задержку не менее 50 мс (сам подобрал экспериментально), иначе светодиод тупо не загорится. Программа включает светодиод на 13 пине на 1 сек после сканирования известной карты: (где #моей карты 74002AADDF2C, а единицы - это и есть контрольные байты.) #define LED_1 13 unsigned char buffer[64]; unsigned char buffer1[64] = {'1','7','4','0','0','2','A','A','D','D','F','2','C','1'}; int count = 0; int s = 0; void setup() { Serial.begin(9600); pinMode(LED_1,OUTPUT); digitalWrite(LED_1,LOW); } void loop() { s=0; if (Serial.available()) { while(Serial.available()) { buffer[count]=Serial.read(); if (buffer1[count] == buffer[count]) {s = s+1;} count++; if(count == 64)break; } clearBufferArray(); count = 0; } if (s == 12) { digitalWrite(LED_1,HIGH); delay(1000); digitalWrite(LED_1,LOW); } delay(50); } void clearBufferArray() { for (int i=0; i<count;i++) { buffer=NULL;} } Удачи!
Ну и естественно вы должны воткнуть RX сканера в TX платы, а RX платы в TX сканера, ведь софтсериал уже не нужен. Также загружайте скетч на плату только при отключенном сканере, иначе сериал соединение не поймет куда вы отправляете инфу : на плату или на сканер.
Вот сейчас точно такую задачу решаю, в точности вставил ваш код, вылезла следующая ошибка: rfid.ino: In function 'void clearBufferArray()': rfid.ino:9:9: error: incompatible types in assignment of 'int' to 'unsigned char [64]' С чем может быть связано?
Вот тут в конце: void clearBufferArray() { for (int i=0; i<count;i++) { buffer=NULL;} } Надо было buffer Так все нормально)