как добавить кнопку
- Войдите на сайт для отправки комментариев
Втр, 23/08/2016 - 15:13
Все доброе время суток!
Собрал RFID замок с герконом и сервоприводом, все работает шикарно.
Осталось добавить кнопку но не получается.
Как сделать что-бы при нажатии на кнопку проходил цикл действий такой же как после совпадения uid?
#include <Servo.h> #include <SPI.h> #include <MFRC522.h> // библиотека "RFID". #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); unsigned long uidDec, uidDecTemp; // для хранения номера метки в десятичном формате Servo servo; int Door_Sensor_Pin = 6; // контакт для датчика int Door_Sensor_State = 0; // Состояние геркона const int CardsID_Max=2; //Максимальное количество доступных карт в массиве CardsID unsigned long CardsID[CardsID_Max]; // Массив для IDшников карт void setup() { Serial.begin(9600); Serial.println("\n-----------------------------------------------------------------------------------------\nSetup complete!"); SPI.begin(); // инициализация SPI / Init SPI bus. mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card. servo.attach(5); servo.write(0); // устанавливаем серву в закрытое состояние pinMode(Door_Sensor_Pin, INPUT_PULLUP); // установить Door_Sensor_Pin как вход for(int i=0; i<CardsID_Max; i++) CardsID[i]=0; CardsID[0]=3587036261; CardsID[1]=79447765 ; } void loop() { //delay(1000); //Проверка геркона //Serial.println("\nGerkon check."); Door_Sensor_State = digitalRead(Door_Sensor_Pin); if ( Door_Sensor_State == LOW) // читать Door_Sensor_Pin { //Serial.println("Gerkon closed"); servo.write(0); // устанавливаем серву в закрытое состояние //tone(3, 100, 100); Serial.println("SERVO: close"); // Поиск новой метки if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Выбор метки if ( ! mfrc522.PICC_ReadCardSerial()) { return; } uidDec = 0; // Выдача серийного номера метки. for (byte i = 0; i < mfrc522.uid.size; i++) { uidDecTemp = mfrc522.uid.uidByte[i]; uidDec = uidDec * 256 + uidDecTemp; } Serial.println("Card UID:3587036261"); Serial.println(uidDec); // Выводим UID метки в консоль. for(int i=0; i<CardsID_Max; i++) { if(CardsID[i] == uidDec) { tone(3, 100, 500); // Делаем звуковой сигнал, Открытие servo.write(180); // Поворачивавшем серву на угол 90 градусов(Отпираем какой либо механизм: задвижку, поворачивавшем ключ и т.д.) Serial.println("SERVO move 90"); break; } }; } else { Serial.println("Gerkon: open"); } Serial.println("Waiting 3 sec...\n"); delay(3000); //Время на открытие двери после того как карта принята }
if(кнопка) {открыть двэр};
Не получается. Или я что-то не так делаю.
Назначил пин 8 b состояние кнопки 0
В void setup назначил
в цикле добавил
А нельзя добавть символ "или" для открытия сервы? или кнопка или метка.
класс титановый велосипед для тактовой кнопки.
Удалите точку с запятой после
if
(buttonState== 0) - у вас это условие ничего не делает.
и здесь исправьте
servo.write(180
на
servo.write(180);
Часть кода которая отпирает дверь оформите в отдельную функцию которую будете вызывать при совпадении метки или при нажатии на кнопку или пульт или по датчику движения или...
Кнопку безболезненно можно добавить с помощю титанового велосипеда или DigIn
Все равно не работает
Подключал отдельно кнопку с диодом, все работает.
Куда копать не пойму
Если кор открытия оформить в функцию, то в том месте где вы зажигаете светодиод вызывайте функцию отвечающую за открытие, аналогично и с меткой, если совпала вызываем функцию открытия двери. Как по другому объяснить я не знаю.
Имею два вопроса:
1. Кнопка подтянута (или притянута) резистором куда нибудь?
2. В каком месте кода проверяется состояние пина (buttonState = digitalRead(buttonPin))?
кнопка подключена к 5v через резистр, к 8 пину и земле