Ви не увійшли.
Сторінки 1

Добрий день. Потрібна допомога з доповнення скечу.
Роблю rfid замок, потрібно добавити кнопку(з підтягнути опором на 10ком на масу) , щоб при натисканні на кнопку зпрацював селеноид на 1 секунду і провернувся сервомотор на 90 градусів а потім повернувся на 0.
Будь ласка допоможіть.
Остання редакція Shylz (2022-06-22 00:40:03)
Неактивний

#include <SPI.h>
#include <MFRC522.h>
const int SS_PIN = 10;      // SS вывод модуля RC522
const int RST_PIN = 9;      // RST вывод модуля RC522
const int BUZZER = 3;       //Пин для Пищалки
const int LED_R = 8;        //Пин для Красного цвета
const int LED_G = 7;        //Пин для Зелёного цвета
const int buttonPin = 6;      //Пин для кнопка откр
const int LOCK = 4;         // подключаем электрозамок
char* keys[]={"71 17 43 99"}; // ,"242 166 122 26","02 187 203 27"
MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.
 
void setup() 
{
  Serial.begin(9600);       // Initiate a serial communication
  SPI.begin();              // Initiate  SPI bus
  mfrc522.PCD_Init();       // Initiate MFRC522
  pinMode(buttonPin, INPUT);  // объявляем пин как вход.
  pinMode(LED_G, OUTPUT);   //объявляем пин как выход.
  pinMode(LED_R, OUTPUT);   //объявляем пин как выход.  
  pinMode(BUZZER, OUTPUT);  //объявляем пин как выход.
  pinMode(LOCK, OUTPUT);    //объявляем пин как выход.
  
  digitalWrite(LOCK, LOW);  //Выключаем замок
 
  Serial.println("Поднесите карту к считывателю");
}
void loop() 
{
  if ( ! mfrc522.PICC_IsNewCardPresent()){
    return;
  }
  if ( ! mfrc522.PICC_ReadCardSerial()){
    return;
  }
  Serial.print("UID:");
  String content= "";
  byte letter;
  for (byte i = 0; i < mfrc522.uid.size; i++) 
  {
     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
     Serial.print(mfrc522.uid.uidByte[i], DEC);
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     content.concat(String(mfrc522.uid.uidByte[i], DEC));
  }
  Serial.println();
  content.toUpperCase();
int x=1;
  for (int i = 0; i < sizeof(keys) / sizeof(char *); i++){
  if (content.substring(1) == keys[i]){
    Serial.println("Доступ разрешён");
    digitalWrite(BUZZER, HIGH);     // Включаем Замок
    digitalWrite(LED_G, HIGH);    // Зажигаем Зелёный светодиод 
     digitalWrite(LOCK, HIGH);   //Включаем замок
    delay(500);
    digitalWrite(LOCK, LOW);  //Выключаем замок
    digitalWrite(BUZZER, LOW);
    delay(1000);
    digitalWrite(LED_G, LOW);    // Гасим Зелёный светодиод
   
    return;
  } 
  else  x=0;
}
 if(x==0){
    Serial.println("Доступ запрещён");
    digitalWrite(LED_R, HIGH);
    digitalWrite(BUZZER, HIGH);
    delay(100);
    digitalWrite(BUZZER, LOW);
    delay(100);
    digitalWrite(BUZZER, HIGH);
    delay(100);
    digitalWrite(BUZZER,LOW);
    delay(100);
    digitalWrite(LED_R, LOW);
}   
}Неактивний

помогать бесплатно принято тем, кто что то сам накодил, но не получается.
в вашем коде нет ни кнопки, ни соленоида, ни сервы.
В коді є і кнопка і соленоід (const int buttonPin = 6;      //Пин для кнопка откр
const int LOCK = 4;         // подключаем электрозамок) соліноід від карточки спрацьовує а от з кнопкою ніяк неможу ту частину коду яку писав під кнопку витер щоб незаважала
Неактивний

ту частину коду яку писав під кнопку витер щоб незаважала
потрібно не витирати, а показувати і писати що конкретно не виходить. Інакше - #3

// карта - 02 187 203 27
// брелок - "60 19 192 33"
// КАРТА - 242 166 122 26
#include <SPI.h>
#include <MFRC522.h>
const int SS_PIN = 10;      // SS вывод модуля RC522
const int RST_PIN = 9;      // RST вывод модуля RC522
const int BUZZER = 3;       //Пин для Пищалки
const int LED_R = 8;        //Пин для Красного цвета
const int LED_G = 7;        //Пин для Зелёного цвета
const int buttonPin = 6;      //Пин для кнопка откр
const int LOCK = 4;         // подключаем электрозамок
char* keys[]={"71 17 43 99"}; // ,"242 166 122 26","02 187 203 27"
MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.
 
void setup() 
{
  Serial.begin(9600);       // Initiate a serial communication
  SPI.begin();              // Initiate  SPI bus
  mfrc522.PCD_Init();       // Initiate MFRC522
  pinMode(buttonPin, INPUT);  // объявляем пин как вход.
  pinMode(LED_G, OUTPUT);   //объявляем пин как выход.
  pinMode(LED_R, OUTPUT);   //объявляем пин как выход.  
  pinMode(BUZZER, OUTPUT);  //объявляем пин как выход.
  pinMode(LOCK, OUTPUT);    //объявляем пин как выход.
  
  digitalWrite(LOCK, LOW);  //Выключаем замок
 
  Serial.println("Поднесите карту к считывателю");
}
void loop() 
{
  if ( ! mfrc522.PICC_IsNewCardPresent()){
    return;
  }
  if ( ! mfrc522.PICC_ReadCardSerial()){
    return;
  }
  Serial.print("UID:");
  String content= "";
  byte letter;
  for (byte i = 0; i < mfrc522.uid.size; i++) 
  {
     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
     Serial.print(mfrc522.uid.uidByte[i], DEC);
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     content.concat(String(mfrc522.uid.uidByte[i], DEC));
  }
  Serial.println();
  content.toUpperCase();
int x=1;
  for (int i = 0; i < sizeof(keys) / sizeof(char *); i++){
  if (content.substring(1) == keys[i]){
    Serial.println("Доступ разрешён");
    digitalWrite(BUZZER, HIGH);     // Включаем Замок
    digitalWrite(LED_G, HIGH);    // Зажигаем Зелёный светодиод 
     digitalWrite(LOCK, HIGH);   //Включаем замок
    delay(500);
    digitalWrite(LOCK, LOW);  //Выключаем замок
    digitalWrite(BUZZER, LOW);
    delay(1000);
    digitalWrite(LED_G, LOW);    // Гасим Зелёный светодиод
   
    return;
  } 
  else  x=0;
}
 if(x==0){
    Serial.println("Доступ запрещён");
    digitalWrite(LED_R, HIGH);
    digitalWrite(BUZZER, HIGH);
    delay(100);
    digitalWrite(BUZZER, LOW);
    delay(100);
    digitalWrite(BUZZER, HIGH);
    delay(100);
    digitalWrite(BUZZER,LOW);
    delay(100);
    digitalWrite(LED_R, LOW);
}   
int buttonState = digitalRead(buttonPin);
    // делаем простую проверку нашей переменной, если на входе в порт кнопки присутствует напряжение 
    if (buttonState == HIGH) {
       digitalWrite(BUZZER, HIGH);     // Включаем Замок
    digitalWrite(LED_G, HIGH);    // Зажигаем Зелёный светодиод 
     digitalWrite(LOCK, HIGH);   //Включаем замок
    delay(500);
    digitalWrite(LOCK, LOW);  //Выключаем замок
    digitalWrite(BUZZER, LOW);
    delay(1000);
    digitalWrite(LED_G, LOW);    // Гасим Зелёный светодиод // 
    
    }
}Неактивний

А схема где?

На карточку більше нереагує
Вообще-то на кнопку не должно быть никакой реакции при таком построении кода. Так что схему в студию. И желательно нормальную (хоть и на листочке от руки), а не наскальную живопись из всяких там фритцингов и тинкеркадов
Остання редакція г0сть (2022-06-22 21:51:38)
Неактивний

Куча вопросов. 
1. Что собой представляет механизм открывания (схемотехнически)? Разводка платы если правильно понял - двусторонняя? 
2. Если из кода убрать все что касается карточки - тоже зависает? 
3. Если после включения карту не подносить, а сразу нажать кнопку - что происходит?
Ну и повторюсь, с этим кодом кнопка не должна срабатывать. Эти строки
if ( ! mfrc522.PICC_IsNewCardPresent()){
    return;
  }крутятся к цикле пока не будет поднесена карта и код дальше не должен выполняться. Перенеси обработку кнопки в начало loop.
Неактивний

1-механізм відкривання буде соленоід через мосфет, або сервомотор. Більш завсесервомотор просто зараз нема в наявності бо той що прийшов бракований.
Плата одностороння, там лише одна перемичка між  опором та масою, і конденсатори стабілізаторів навісним монтажом.
Код без рфід не пробував.
Неактивний

Плата одностороння, там лише одна перемичка між опором та масою
тогда как подключена кнопка к пину ардуины? Судя по огрызку с рисунком платы кнопка (самый нижний проводник?) подходит к одному выводу резистора, второй конец резистора на gnd(?), а к пину как? Тоже навесным проводом?
Неактивний

Shylz пише:Плата одностороння, там лише одна перемичка між опором та масою
тогда как подключена кнопка к пину ардуины? Судя по огрызку с рисунком платы кнопка (самый нижний проводник?) подходит к одному выводу резистора, второй конец резистора на gnd(?), а к пину как? Тоже навесным проводом?
Сама нижня дорожка приходить на опір, другий вивід опору переходить на 6 ножку ардуіни і опір на землю, зараз на місті першого опору перемичка. На ціх опорах на випадок необхідності може бути виконано пониження напруги, якщо наприклад кнопка це напруга в 12-15 v.
Неактивний

На ціх опорах на випадок необхідності може бути виконано пониження напруги, якщо наприклад кнопка це напруга в 12-15 v.
Бред. INPUT_PULLUP, кнопка на землю и не морочь йайголову всякой ерундой
Неактивний

Може так буде зрозуміліше, pullup тут не проходить.
Выход з домофона на замок +15v саме вони мають давати команду на 6 ногу ардуіни щоб вона открывала замок. Домофон встановлено а кнопка покищо для тестової роботи ардуіни.
Остання редакція Shylz (2022-06-23 22:54:32)
Неактивний

Объясни мне в чем сакральный смысл замыкания кнопки на "плюс" ???
подсказка http://schip.com.ua/pc817/
Остання редакція renoshnik (2022-06-24 08:04:29)
Неактивний

void loop() 
{
  int buttonState =digitalRead(buttonPin); //считуем порт кнопки
  if (buttonState == HIGH) {
    Serial.println("Доступ разрешён");
    digitalWrite(BUZZER, HIGH);     // Включаем Зумер
    digitalWrite(LED_G, HIGH);    // Зажигаем Зелёный светодиод 
     digitalWrite(LOCK, HIGH);   //Включаем замок
    delay(500);
    digitalWrite(LOCK, LOW);  //Выключаем замок
    digitalWrite(BUZZER, LOW);
    delay(1000);
    digitalWrite(LED_G, LOW);    // Гасим Зелёный светодиод
  }
  
  if ( ! mfrc522.PICC_IsNewCardPresent()){
    return;
  }Неактивний
Сторінки 1