а теперь заработало. Я скопировал const unsigned char из того скетча который ты мне давал ранее. Теперь реле должно работать. Спасибо огромное. Я могу тебе чем-то помочь?
Потому что реле обязательно отключается после цветомузыки даже когда карту еще не убрали. Но это такой короткий промежуток времени, что реле и прочая механика наверное не успеет даже дернуться. В общем какой то короткий импульс будет. А насколько он критичен трудно сказать. Лишние движения механике по любому не полезны. Но тут их может и не будет.
Это может из-за PROGMEM? В принципе на 10 карточек памяти хватает. И на больше хватит, но программная память всяко больше. Выложи тогда финальную версию скетча. Я то свою не тестировал. Не на чем. И про замок тоже стоит написать, чтобы решение готовое было. Может еще кому пригодится.
// mcureen 4 /* 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 #define RELAY1 7 // Часто модуль реле имеет неожиданную логику. На LOW - замыкается, на HIGH размыкается. // Укажите уровни пина RELAY1 для открытого и закрытого состояния. #define RCLOSE HIGH #define ROPEN LOW RFID rfid(SS_PIN, RST_PIN); const 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}, {69,156,215,101,107} // тут вы что то накосячили, я убрал число 10 и остаток кодов. проверьте список };// allowed card const int master_size = sizeof(master)/sizeof(master[0]); bool compare_nums( const unsigned char a[5], const unsigned char b[5] ) { for(char i = 5; 0 <= --i; ) { if( a != b ) return false; } return true; } bool check_num( const unsigned char a[5] ){ for( int i = master_size; 0 <= --i; ){ if(compare_nums(a, master)) return true; } return false; } 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); digitalWrite(RELAY1, RCLOSE); // Изначально закрыто pinMode(RELAY1, OUTPUT); } void loop() { if (rfid.isCard()) { digitalWrite(GREEN_LED, LOW); if (rfid.readCardSerial()) { /* Reading card */ Serial.println(" "); Serial.println("Card found"); Serial.println("Cardnumber:"); for (char i = 0; i < 5; i++) { Serial.print(rfid.serNum); Serial.print(" "); } Serial.println(); //verification if(check_num(rfid.serNum)) { allow(); } else { denied(); } } } else { digitalWrite(GREEN_LED, HIGH); // rfid.halt(); } } void allow() { Serial.println("Access accept!"); //доступ получен digitalWrite(RELAY1, ROPEN); 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(RELAY1, RCLOSE); } 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); }