Помогите дополнить скетч кнопкой в RFID замке.

traTaTaa
Offline
Зарегистрирован: 19.07.2017

Прошу помощи. Есть программа по RFID замку. Приложил NFC метку - сервопривод открыл замок,через N-время закрывается сам.

Суть в том,что бы дописать скетч кнопкой,что бы при нажатии (тактовой) кнопки серво открывала замок,а через N-время закрывала.

Вот действующий скетч:

#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;
void setup() {
  Serial.begin(9600);
  Serial.println("Waiting for card...");
  SPI.begin();  //  инициализация SPI / Init SPI bus.
  mfrc522.PCD_Init();     // инициализация MFRC522 / Init MFRC522 card.
  servo.attach(6);
  servo.write(0);  // устанавливаем серву в закрытое сосотояние
}
void loop() {
  // Поиск новой метки
  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: ");
  Serial.println(uidDec); // Выводим UID метки в консоль.
  if (uidDec == 2957250330) // Сравниваем Uid метки, если он равен заданому то серва открывает.
  {
    tone(5, 2000, 100); // Делаем звуковой сигнал, Открытие
    servo.write(180); // Поворациваем серву на угол 90 градусов(Отпираем какой либо механизм: задвижку, поворациваем ключ и т.д.)
    delay(1000); // пауза 3 сек и механизм запирается.
    tone(5, 500, 1000); // Делаем звуковой сигнал,  Закрытие
  }
  servo.write(0);  // устанавливаем серву в закрытое сосотояние
}
 
Спасибо за помощь.
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

traTaTaa пишет:

Прошу помощи. 

1. Для начала выложите скетч нормально.

2. А потом выбирайте, или Вы делаете то, что Вам нужно сами и здесь задаёте вопросы по тем местам, где не получается, или, если Вы хотите, чтобы кто-то сделал это за Вас, идёте в профильный раздел форума, размещаете там заказ, договариваетесь об оплате и кто-то за Вас делает.

traTaTaa
Offline
Зарегистрирован: 19.07.2017
#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;
void setup() {
  Serial.begin(9600);
  Serial.println("Waiting for card...");
  SPI.begin();  //  инициализация SPI / Init SPI bus.
  mfrc522.PCD_Init();     // инициализация MFRC522 / Init MFRC522 card.
  servo.attach(6);
  servo.write(0);  // устанавливаем серву в закрытое сосотояние
}
void loop() {
  // Поиск новой метки
  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: ");
  Serial.println(uidDec); // Выводим UID метки в консоль.
  if (uidDec == 2957250330) // Сравниваем Uid метки, если он равен заданому то серва открывает.
  {
    tone(5, 2000, 100); // Делаем звуковой сигнал, Открытие
    servo.write(180); // Поворациваем серву на угол 90 градусов(Отпираем какой либо механизм: задвижку, поворациваем ключ и т.д.)
    delay(1000); // пауза 3 сек и механизм запирается.
    tone(5, 500, 1000); // Делаем звуковой сигнал,  Закрытие
  }
  servo.write(0);  // устанавливаем серву в закрытое сосотояние
}

 

traTaTaa
Offline
Зарегистрирован: 19.07.2017

Я попросил о помощи,так как не сильно розбераюсь в языке программирования.Если считаете,что ваши знания в моем случае стоят каких то денег,тогда просто ничего не отвечайте ничего не отвечайте. Я и сам розберуй со временем,просто может кто то уделит 2 мин.  и поможет мне.И все выйдет гораздо быстрее.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

traTaTaa пишет:

Я попросил о помощи,так как не сильно розбераюсь в языке программирования.

Вы попросили не о помощи, а "сделать за Вас". Неужели не видите разницы?

traTaTaa пишет:

Если считаете,что ваши знания в моем случае стоят каких то денег,

Нет, не считаю. Мои знания стоят не "каких-то" денег, а таких, которые в контексте данного форума являются неадекватными. Потому я никогда не предлагаю своих услуг в разделе "Ищу исполнителя". Так что там Вы никаких предложений что-то сделать от меня не увидите.

traTaTaa пишет:

тогда просто ничего не отвечайте ничего не отвечайте. 

Вы здесь второй день, а я третий год, так что давайте я как-нибудь без Вас буду разбираться где и что мне писать или не писать.

traTaTaa пишет:

просто может кто то уделит 2 мин.  и поможет мне.И все выйдет гораздо быстрее.

Если кто-то уделит, то оно может и выйдёт быстрее, но лишь до того момента, пока Вам не понадобится приделать ещё одну кнопку. А как понадобится, опять протягивать руку и побираться Христа ради. 

Помощь - это как раз то, что я Вам предложил: делайте сами, а мы подскажем, если что. Так Вы чему-то научитесь. А делать за Вас - пустое это всё.

 

traTaTaa
Offline
Зарегистрирован: 19.07.2017

Я очень рад, что вы уделили своим высказываниям куда больше времени, чем 5ти строчкам бонального кода. Если для вас жто все слишком принципиально - спасибо, я как то сам уже разберусь. И я вам не указую что и где писать, если считаете что я какой то наглый тип, которому только и нужно что бы все делали все за него - просто можете пропустить данную тему.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

traTaTaa пишет:
Я очень рад, что вы уделили своим высказываниям куда больше времени, чем 5ти строчкам бонального кода.

Напоминает высказывание. …дорогой, я к соседке на 5 минут, а ты помешивай суп каждые пол часа…

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014
Попробую помочь с доработкой
Создаем переменные
#define kn1 2 //Пин для кнопки - можно поменять
uint32_t time_paus;//Переменная для антидребезга

В сетуп настраюем кнопку

pinMode(kn1, INPUT_PULLUP)//

Открытие закрытие выносим в отдельную ФУНКЦИЮ

void open(){ //Функция открытия
  tone(5, 2000, 100); // Делаем звуковой сигнал, Открытие
    servo.write(180); // Поворациваем серву на угол 90 градусов(Отпираем какой либо механизм: задвижку, поворациваем ключ и т.д.)
    delay(1000); // пауза 3 сек и механизм запирается.
    tone(5, 500, 1000); // Делаем звуковой сигнал,  Закрытие
    servo.write(0);  // устанавливаем серву в закрытое сосотояние 
}

в лооп

//////////////////Обработка кнопки с антидребезгом
static bool f_kn1;
if(!digitalRead(kn1) && f_kn1 == 0){
  time_paus = millis();
  f_kn1=1;
}
if(f_kn1 && digitalRead(kn1) ) f_kn1= 0;

if(f_kn1==1 && millis() - time_paus >= 50) open();//Открываем и закрываем
///////////////////

 

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Я смарю, ты ни в коком езыке бонально не розбираешьса. Ни в С, ни в рюсском. Учись, б-ть.

traTaTaa
Offline
Зарегистрирован: 19.07.2017

Спасибо огромное 

traTaTaa
Offline
Зарегистрирован: 19.07.2017

Спасибо что и ты не прошел мимо. С языком программирования я как то разберусь,а в русском мне и так хватает,учитывая,что не являюсь гражданином росси. Самое главное,что ты разбираешься,где и в какой теме херню написать...

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

traTaTaa пишет:

Спасибо что и ты не прошел мимо. С языком программирования я как то разберусь,а в русском мне и так хватает,учитывая,что не являюсь гражданином росси. Самое главное,что ты разбираешься,где и в какой теме херню написать...

Похоже скоро гражданин не России не поймет, почему в его стране он останется в глубокой жопе.И это не потому, что он херово знает русский язык, а потому ,что херово знает роль фундаментальных знаний.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

qwone пишет:

почему в его стране он останется в глубокой жопе.

жопные спелеологи какие-то - накинулись на бедного нерусского :D

MishaDed
Offline
Зарегистрирован: 12.09.2021
#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;
void setup() {
  Serial.begin(9600);
  Serial.println("Waiting for card...");
  SPI.begin();  //  инициализация SPI / Init SPI bus.
  mfrc522.PCD_Init();     // инициализация MFRC522 / Init MFRC522 card.
  servo.attach(6);
  servo.write(0);  // устанавливаем серву в закрытое сосотояние
}
void loop() {
  // Поиск новой метки
  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: ");
  Serial.println(uidDec); // Выводим UID метки в консоль.
  if (uidDec == 452913025 or uidDec == 4196052250 or uidDec == 1788437888) // Сравниваем Uid метки, если он равен заданому то серва открывает.
  {
    tone(5, 200, 500); // Делаем звуковой сигнал, Открытие
    servo.write(90); // Поворациваем серву на угол 90 градусов(Отпираем какой либо механизм: задвижку, поворациваем ключ и т.д.)
    delay(3000); // пауза 3 сек и механизм запирается.
    tone(5, 500, 500); // Делаем звуковой сигнал,  Закрытие
  }
  servo.write(0);  // устанавливаем серву в закрытое сосотояние
}
 
 
 
один контакт кнопки подключаем на пин D2 и через резистор на 510 ом на GND вторую часть кнопки подключаем на 5V
Это кнопка на закрытие
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

MishaDed пишет:

один контакт кнопки подключаем на пин D2 и через резистор на 510 ом на GND вторую часть кнопки подключаем на 5V
Это кнопка на закрытие

Здорово! Ещё бы и код вставили - цены бы не было!

А сказать-то чё хотели?

MishaDed
Offline
Зарегистрирован: 12.09.2021


#include <Servo.h>
#include <SPI.h>
#include <MFRC522.h> // библиотека "RFID".
#define SS_PIN 10
#define RST_PIN 9
int buttonPin =2; //Пин для кнопки - можно поменять
int buttonState = 0;
uint32_t time_paus;//Переменная для антидребезга
MFRC522 mfrc522(SS_PIN, RST_PIN);
unsigned long uidDec, uidDecTemp;  // для храниения номера метки в десятичном формате
Servo servo;
void setup() {
  Serial.begin(9600);
  Serial.println("Waiting for card...");
  SPI.begin();  //  инициализация SPI / Init SPI bus.
  mfrc522.PCD_Init();     // инициализация MFRC522 / Init MFRC522 card.
  servo.attach(6);
  servo.write(0);  // устанавливаем серву в закрытое сосотояние
  pinMode(buttonPin, INPUT);
}
void open(){ //Функция открытия
    servo.write(90); 
}
void close(){ //Функция закрытия 
      delay(2000);
    servo.write(0); 
}
void loop() {
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
   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: ");
  Serial.println(uidDec); // Выводим UID метки в консоль.
  if (uidDec == 452913025 or uidDec == 4196052250 or uidDec == 1788437888) // Сравниваем Uid метки, если он равен заданому то серва открывает.
  {
   open();
   delay(5000);
  }




}
один контакт кнопки подключаем на пин D2 и через резистор на 510 ом на GND вторую часть кнопки подключаем на 5V
Это кнопка на закрытие

не правильно выставил

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Попробую ещё раз, помедленнее:

ЕвгенийП пишет:

А сказать-то чё хотели?