Код (C++): // 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> #include <Servo.h> #define SS_PIN 10 #define RST_PIN 9 #define RED_LED 4 #define GREEN_LED 5 Servo servo; // Часто модуль реле имеет неожиданную логику. На 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}, {5,219,213,209,218,} // тут вы что то накосячили, я убрал число 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[i] != b[i] ) return false; } return true; } bool check_num( const unsigned char a[5] ){ for( int i = master_size; 0 <= --i; ){ if(compare_nums(a, master[i])) 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); servo.attach(6); servo.write(0); } 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[i]); Serial.print(" "); } Serial.println(); //verification if(check_num(rfid.serNum)) { allow(); } else { denied(); } } } else { digitalWrite(GREEN_LED, HIGH); } } void allow() { Serial.println("Access accept!"); //доступ получен servo.write(90); 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(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(5000); servo.write(0); digitalWrite(RED_LED, HIGH); tone(8, 550, 450); delay(500); tone(8, 550, 450); digitalWrite(RED_LED, HIGH); delay(300); digitalWrite(RED_LED, LOW); } void denied() { Serial.println("Access denied!"); //доступ закрыт digitalWrite(RED_LED, HIGH); tone(8, 550, 250); delay(300); digitalWrite(RED_LED, LOW); delay(300); digitalWrite(RED_LED, HIGH); tone(8, 550, 250); delay(300); digitalWrite(RED_LED, LOW); delay(300); digitalWrite(RED_LED, HIGH); tone(8, 550, 250); delay(300); digitalWrite(RED_LED, LOW); delay(300); digitalWrite(RED_LED, HIGH); tone(8, 550, 250); delay(300); digitalWrite(RED_LED, LOW); delay(300); } Расскажу в кратце, хочу сделать rfid замок, все работает. Но я бы хотел, чтобы когда дверь захлопывается только тогда сервопривод двигал шпингалет. Я сам пробовал делать прогу, но ничего не получилось. Сервопривод самопроизвольно двигается не знаю что делать. P.S. Нужен концевик. За рабочую программу могу дать 100 рублей.
Поставить концевик, отслеживать его состояние. Когда оно меняется с открытого на закрытое дергать шпингалет. То же самое происходит при поднесении метки, только наоборот.
Но если подсказки мало (а ее могло бы и хватить), то можно сделать на возмездной основе, как и принято в этом разделе.
Код (C++): #include <Servo.h> #define SERVO_PIN 9 // пин, к которому подключена серва (желтый провод) #define BUTTON_PIN 2 // пин, к которому подключена кнопка. Второй вывод кнопки подключен к GND const unsigned int angle_min = 20; // начальный угол поворота сервы const unsigned int angle_max = 90; // конечный угол поворота сервы Servo myservo; void setup() { pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { static boolean buttonReleased = true; if (!digitalRead(BUTTON_PIN) && buttonReleased) { myservo.attach(SERVO_PIN); myservo.write(myservo.read() ? angle_min : angle_max); delay(500); myservo.detach(); } buttonReleased = digitalRead(BUTTON_PIN); } Я написал скетч. Только я хочу чтобы он был на двух кнопках. Ну чтобы одна кнопка открывала а другая закрывала. Получится так?