Здарова всем Хочу сделать rfid замок. Все работает. Все классно, но единственная проблема в том, что работает только с одной карточки(метки). А я хочу чтобы он работал с 10 картами. Подскажите куда что писать. Заранее спасибо.
ммм нужно вписать как ни-будь массив\объект словарь е если что то из этого словаря пришло то открываем замок и можете скетч здесь показать (не охото скачивать)
/* MOSI: Pin 11 / ICSP-4 * MISO: Pin 12 / ICSP-1 * SCK: Pin 13 / ISCP-3 * SS: Pin 10 * RST: Pin 9 */ #include <SPI.h> #include <RFID.h> #define SS_PIN 10 #define RST_PIN 9 #define RED_LED 6 #define GREEN_LED 5 RFID rfid(SS_PIN, RST_PIN); unsigned char reading_card[5]; //for reading card unsigned char master[5] = {227,197,145,117} ; // allowed card unsigned char i; void indication(int led); void allow(); void denied(); void setup() { Serial.begin(9600); SPI.begin(); rfid.init(); pinMode(RED_LED, OUTPUT); pinMode(GREEN_LED, OUTPUT); } void loop() { if (rfid.isCard()) { if (rfid.readCardSerial()) { /* Reading card */ Serial.println(" "); Serial.println("Card found"); Serial.println("Cardnumber:"); for (i = 0; i < 5; i++) { Serial.print(rfid.serNum); Serial.print(" "); reading_card = rfid.serNum; } Serial.println(); //verification for (i = 0; i < 5; i++) { if (reading_card!=master) { break; } } if (i == 5) { allow(); } else { denied(); } } } else{ digitalWrite(GREEN_LED, HIGH); // rfid.halt(); } } void allow() { Serial.println("Access accept!"); //доступ получен digitalWrite(RED_LED, LOW); digitalWrite(GREEN_LED, HIGH); delay(200); digitalWrite(GREEN_LED, LOW); tone(8, 2500, 200); delay(200); digitalWrite(GREEN_LED, HIGH); delay(200); digitalWrite(GREEN_LED, LOW); tone(8, 2500, 200); delay(200); digitalWrite(RED_LED, LOW); } void denied() { Serial.println("Access denied!"); //доступ закрыт digitalWrite(RED_LED, HIGH); tone(8, 100, 200); delay(300); digitalWrite(RED_LED, LOW); delay(300); digitalWrite(RED_LED, HIGH); tone(8, 100, 200); delay(300); digitalWrite(RED_LED, LOW); delay(300); } и вот коды которые я хотел бы записать карта 1 227,197,145,117,194 карта 2 90,63,99,3,5 карта 3 90,132,142,3,83 карта 4 250,229,196,3,216 карта 5 10,101,141,4,230 карта 6 250,191,109,3,43 карта 7 10,88,184,4,238 карта 8 250,243,195,3,201 карта 9 74,151,2,4,219 карта 10 74,150,202,4,18 карта 11 74,12,148,4,214 брелок 69,156,215,101,107
Код (C++): unsigned char master[10] = { 227,197,145,117,194 , 90,63,99,3,5 ,90,132,142,3,83 , ххх , ххх , ххх , ххх , ххх , ххх , ххх }; вмесо ххх код
слишком много... попробуйте уменьшить кол-во кодов в массиве по одному и скажите сколько пройдет тогда будем дальше
Теперь пишет вот это: sketch_mar10d:20: error: expected ',' or ';' before numeric constant sketch_mar10d:20: error: expected declaration before '}' token unsigned char master[10] = {227,197,145,117,194, 90,63,99,3,5, 90,132,142,3,83, 250,229,196,3,216, 10,101,141,4,230, 250,191,109,3,43, 10,88,184,4,238, 250,243,195,3,201, 74,151,2,4,219, 10 74,150,202,4,18}; // allowed card ^ exit status 1 expected '}' before numeric constant
Ребяты, а как вы хотите запихнуть экую кучку элементов в массив, который вы определили размером в 10 элементов всего?
Ну так не пишите [10]. И ошибка: между 10 74 нет запятой. Это или одно число должно быть - 1074 или числа через запятую 10, 74. Компилятор даже стрелочкой показывает вверх где ошибка. Код (C++): unsigned char master[] = {227,197,145,117,194, 90,63,99,3,5, 90,132,142,3,83, 250,229,196,3,216, 10,101,141,4,230, 250,191,109,3,43, 10,88,184,4,238, 250,243,195,3,201, 74,151,2,4,219, 10, 74,150,202,4,18}; // allowed card
Спасибо тебе огромное. Скетч загрузился в плату, но теперь он пишит что все карточки чужие. Как быть?
Только я что то думаю, раз у вас коды из пятерок чисел состоят, то лучше массив из массивов сделать. Код (C++): unsigned char master[][5]={ {227,197,145,117,194}, { 90, 63, 99, 3, 5}, {90,132,142,3,83}, {250,229,196,3,216}, {10,101,141,4,230}, {250,191,109,3,43}, {10,88,184,4,238}, {250,243,195,3,201}, {74,151,2,4,219}, {74,150,202,4,18} // тут вы что то накосячили, я убрал число 10. проверьте список };// allowed card
наверно чтобы карты были родные то нужно все карты пучком к сканеру пихать а точнее он думает что вы должны дать карту с кодом этого массива т.е все из массива для дуино это 1 карта
У вас по моему хрень, не проверка написана. Это проверка??? Что тут проверяется??? Код (C++): for (i = 0; i < 5; i++) { Serial.print(rfid.serNum); Serial.print(" "); reading_card = rfid.serNum; } Serial.println(); //verification for (i = 0; i < 5; i++) { if (reading_card!=master) { break; } }