При нажатии кнопки Servo поворачивается на 180, а через 3 секунды обратно.

Bloody
Offline
Зарегистрирован: 24.04.2017

Всем привет!Делаю электронный замок в дверь.Установил RFID, LCD дисплей, Servo. А вот кнопку чтоб выходить можно было не поднося карты - не получается!Куда вписать и что вписать, чтоб при нажатии серва вращалась на 180 градусов?А кнопку подобие такой:https://yandex.ru/images/search?text=%D0%9A%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0%20%D0%B2%D1%8B%D1%85%D0%BE%D0%B4%D0%B0%20PB-26&noreask=1&img_url=http%3A%2F%2Fkupit-cable.ru%2Fupload%2Fiblock%2F4d4%2F4d475cd20b0865777c56a99b4785b1b4.jpg&pos=26&rpt=simage&lr=10865

Вот скетч:

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Servo.h>
#include <SPI.h>
#include <MFRC522.h> // библиотека "RFID".
 
byte bukva_B[8]   = {B11110,B10000,B10000,B11110,B10001,B10001,B11110,B00000,}; // Буква "Б"
byte bukva_G[8]   = {B11111,B10001,B10000,B10000,B10000,B10000,B10000,B00000,}; // Буква "Г"
byte bukva_D[8]   = {B01111,B00101,B00101,B01001,B10001,B11111,B10001,B00000,}; // Буква "Д"
byte bukva_ZH[8]  = {B10101,B10101,B10101,B11111,B10101,B10101,B10101,B00000,}; // Буква "Ж"
byte bukva_Z[8]   = {B01110,B10001,B00001,B00010,B00001,B10001,B01110,B00000,}; // Буква "З"
byte bukva_I[8]   = {B10001,B10011,B10011,B10101,B11001,B11001,B10001,B00000,}; // Буква "И"
byte bukva_IY[8]  = {B01110,B00000,B10001,B10011,B10101,B11001,B10001,B00000,}; // Буква "Й"
byte bukva_L[8]   = {B00011,B00111,B00101,B00101,B01101,B01001,B11001,B00000,}; // Буква "Л"
byte bukva_P[8]   = {B11111,B10001,B10001,B10001,B10001,B10001,B10001,B00000,}; // Буква "П"
byte bukva_Y[8]   = {B10001,B10001,B10001,B01010,B00100,B01000,B10000,B00000,}; // Буква "У"
byte bukva_F[8]   = {B00100,B11111,B10101,B10101,B11111,B00100,B00100,B00000,}; // Буква "Ф"
byte bukva_TS[8]  = {B10010,B10010,B10010,B10010,B10010,B10010,B11111,B00001,}; // Буква "Ц"
byte bukva_CH[8]  = {B10001,B10001,B10001,B01111,B00001,B00001,B00001,B00000,}; // Буква "Ч"
byte bukva_Sh[8]  = {B10101,B10101,B10101,B10101,B10101,B10101,B11111,B00000,}; // Буква "Ш"
byte bukva_Shch[8]= {B10101,B10101,B10101,B10101,B10101,B10101,B11111,B00001,}; // Буква "Щ"
byte bukva_Mz[8]  = {B10000,B10000,B10000,B11110,B10001,B10001,B11110,B00000,}; // Буква "Ь"
byte bukva_IYI[8] = {B10001,B10001,B10001,B11001,B10101,B10101,B11001,B00000,}; // Буква "Ы"
byte bukva_Yu[8]  = {B10111,B10101,B10101,B11101,B10101,B10101,B10111,B00000,}; // Буква "Ю"
byte bukva_Ya[8]  = {B10001,B10001,B10001,B01010,B00100,B01000,B10000,B00000,}; // Буква "Я"
LiquidCrystal_I2C lcd(0x3F, 16, 2);
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
unsigned long uidDec, uidDecTemp;  // для храниения номера метки в десятичном формате
Servo servo;
void setup() {
  pinMode (4, OUTPUT);
  pinMode (3, OUTPUT);
  digitalWrite(4, HIGH);
  digitalWrite(3, LOW);
  lcd.init();
  lcd.backlight();
 
 
 
  
 
  SPI.begin();  //  инициализация SPI / Init SPI bus.
  mfrc522.PCD_Init();     // инициализация MFRC522 / Init MFRC522 card.
  servo.attach(6);
  servo.write(0);  // устанавливаем серву в закрытое сосотояние
}
 
 
void loop()
 
{
 lcd.createChar(1, bukva_P);      // Создаем символ под номером 1
 lcd.createChar(2, bukva_D);      // Создаем символ под номером 2
 lcd.createChar(3, bukva_I);      // Создаем символ под номером 2
 lcd.createChar(4, bukva_Y);      // Создаем символ под номером 2
 
  lcd.setCursor(0, 0);
   
 lcd.setCursor(3, 0);             
 lcd.print("\1");                  
 lcd.setCursor(4, 0);            
 lcd.print("O");                
 lcd.setCursor(5, 0);            
 lcd.print("\2");                  
 lcd.setCursor(6, 0);            
 lcd.print("H");                  
 lcd.setCursor(7, 0);             
 lcd.print("E");                  
 lcd.setCursor(8, 0);            
 lcd.print("C");                 
 lcd.setCursor(9, 0);            
 lcd.print("\3");                 
 lcd.setCursor(10, 0);            
 lcd.print("T"); 
 lcd.setCursor(11, 0);            
 lcd.print("E"); 
 lcd.setCursor(5, 1); //вторая строка            
 lcd.print("K");                  
 lcd.setCursor(6, 1);            
 lcd.print("A");                
 lcd.setCursor(7, 1);            
 lcd.print("P");                  
 lcd.setCursor(8, 1);            
 lcd.print("T");                  
 lcd.setCursor(9, 1);             
 lcd.print("\4");                  
    
  // Поиск новой метки
  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;
  }
  lcd.clear();
  lcd.setCursor(4, 1);
 
  delay(500);
  Serial.println("Card UID: ");
  Serial.println(uidDec); // Выводим UID метки в консоль.
  if (uidDec == 1882236028) // Сравниваем Uid метки, если он равен заданому то серва открывает.
  {
 
    
 lcd.createChar(1, bukva_P);      
 lcd.createChar(2, bukva_D);      
 lcd.createChar(3, bukva_I);      
 lcd.createChar(4, bukva_Y);      
 lcd.createChar(5, bukva_B);      
 lcd.createChar(6, bukva_ZH);     
 lcd.createChar(7, bukva_L);      
      
 
  lcd.setCursor(0, 0);
   
 lcd.setCursor(5, 0);             
 lcd.print("\1");                  
 lcd.setCursor(6, 0);            
 lcd.print("P");                
 lcd.setCursor(7, 0);
  lcd.print("\3");                
 lcd.setCursor(8, 0);            
 lcd.print("B");                  
 lcd.setCursor(9, 0);            
 lcd.print("E");                  
 lcd.setCursor(10, 0);             
 lcd.print("T");
 lcd.setCursor(11, 0);             
 lcd.print("!");                   
 lcd.setCursor(5, 1); //вторая строка           
 lcd.print("B");                  
 lcd.setCursor(6, 1);            
 lcd.print("X");                
 lcd.setCursor(7, 1);            
 lcd.print("O");                  
 lcd.setCursor(8, 1);            
 lcd.print("\2");                  
 lcd.setCursor(9, 1);             
 lcd.print("\3"); 
 lcd.setCursor(10, 1);            
 lcd.print("T");
 lcd.setCursor(11, 1);            
 lcd.print("E");
 
    tone(5, 200, 500); // Делаем звуковой сигнал, Открытие
    servo.write(180); // Поворациваем серву на угол 180 градусов(Отпираем какой либо механизм: задвижку, поворациваем ключ и т.д.)
    delay(1500); // пауза 1.5 сек и механизм запирается.
    tone(5, 500, 500); // Делаем звуковой сигнал,  Закрытие
  servo.write(0);  // устанавливаем серву в закрытое сосотояние
 
}
else
{
  lcd.createChar(1, bukva_P);
  lcd.createChar(2, bukva_Sh); 
  lcd.createChar(3, bukva_L); 
  lcd.createChar(1, bukva_P); 
  lcd.createChar(1, bukva_P); 
            
 
  lcd.setCursor(5, 0);
  lcd.print("\1");                  
 lcd.setCursor(6, 0);            
 lcd.print("O");                
 lcd.setCursor(7, 0);            
 lcd.print("\2");                  
 lcd.setCursor(8, 0);            
 lcd.print("E");                  
 lcd.setCursor(9, 0);             
 lcd.print("\3");                  
 lcd.setCursor(5, 1); //вторая строка           
 lcd.print("B");                  
 lcd.setCursor(6, 1);            
 lcd.print("O");                
 lcd.setCursor(7, 1);
  lcd.print("H");                
 lcd.setCursor(8, 1);
  lcd.print("!");                
 lcd.setCursor(9, 1);
  lcd.print("!");                
 lcd.setCursor(10, 1);
    tone(5, 200, 800); // Делаем звуковой сигнал, Открытие
    
    delay(1500); // пауза 3 сек и механизм запирается.
 
 
    delay(500);
}
 lcd.clear();
 }
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

1. http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii - иначе Ваш код с высокой вероятность и читать никто не будет.

2. http://arduino.ru/forum/obshchii/prezhde-chem-sprosit-pro-servomashinku-servo-posmotri-tut - название темы говорит само за себя.