Объединить кнопку и модуль rfid rc522 с сервоприводом

У меня очень важный проект. Моя схема работает так: когда я прикладываю карту rfid у меня пищит пьезоэлемент, перегорает красный светодиод и загорается зелёный светодиод, открывается сервопривод, ожидание 3 секунды и механизм запирается. Через несколько дней я увидел свою уязвимость: внутри кабинета с закрытой дверью её открыть не получится, поэтому я решил добавить внутрь кабинета кнопку. Я посмотрел множество сайтов но нигде не нашел ответа, только по отдельности. Решил сам подключить, но получилось так, что теперь открывает только кнопка, а rfid не работает. Кто знает, можете слить код с кнопкой? Буду очень благодарен!
Вот код:

#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(90);  // устанавливаем серву в закрытое сосотояние
}
void loop() {
  // Поиск новой метки
  digitalWrite (4, HIGH);
  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 == 131977158 or uidDec == 2083045409 or uidDec == 2032953778 or uidDec == 1764569778 or uidDec == 4241245474 or uidDec == 2835367603 or uidDec == 1200017862) // Сравниваем Uid метки, если он равен заданому то серва открывает.
  {
    digitalWrite (4, LOW);
    digitalWrite (5, HIGH);
    tone(7, 900, 500); // Делаем звуковой сигнал, Открытие
    delay (100);
    tone(7, 800, 500);
    servo.write(0); // Поворациваем серву на угол 0 градусов(Отпираем какой либо механизм: задвижку, поворациваем ключ и т.д.)
    delay(3000); // пауза 3 сек и механизм запирается.
    tone(7, 1000, 500); // Делаем звуковой сигнал,  Закрытие
    delay (100);
    tone(7, 900, 500);
    digitalWrite (5, LOW);
    digitalWrite (4, HIGH);
  }
  servo.write(90);  // устанавливаем серву в закрытое сосотояние
}

3000р

Вынеси писк, пережигание светодиода и сервокручение в отдельную функцию. Вызывай её как по карте, так и по кнопке.

Чувствую, что совет дельный, но ничего не понял. Не могли бы Вы дать готовый код? Несколько дней уже над этим сижу

@sadman41 попал

Вперёд и с песнЯми! :slight_smile:

Куда вперёд без кода? Проект очень важный, мне нужно сделать его как можно скорее, а вы шутки шутите!

а то диплом не дадуть? да и не надо

2 лайка

Не в дипломе дело. Дело в очень важном проекте, который нужно сделать как можно быстрее. Просьба писать по существу!

Ношкой топнуть забыл.

кстати,

Дать-то я всё могу.
Со временем только проблема - вынужден на пельмени себе зарабатывать.

пжпжпж

Так, делайте! Я разве Вам чем-то мешаю? Нужно - делайте. Нужно “как можно быстрее” - делайте “как можно быстрее”.

Евгений Поросёнок, пожалуйста, закройтесь.

Поросёнок - это оскорбление. Он у нас настоящий свин.

1 лайк

Изначально (самый стартовый пост) - не по существу - там нет конкретного вопроса, а есть только “мне нужно”. Потому, как можно писать в теме “по существу”, если в ней нет существа?


Закажите работу в коммерческом разделе за деньги. Это будет “по существу”.

Евгений Поросёнок, скиньте мне денег пжпжпжпжпжпжпжпжппжпжпж

Какой я Вам поросёнок, юноша - я старый, облезлый хряк. А закрыться я не могу, ибо давно закрыт :frowning:

Владимир Двоечник идите на-на-на-на …

Я Владимир Попрошайкин