Как добавить кнопку

Тема в разделе "Arduino & Shields", создана пользователем <shmel>, 23 авг 2016.

  1. fogary

    fogary Гик

    Добавьте еще "return;" после паузы, что бы совсем красиво было. Мало ли, вдруг Вы за 3 секунды паузы успеете карту вставить и серво начнет второй раз дверь открывать. ;)
     
  2. qwone

    qwone Гик

    Решил я эту задачу. Дверь геркон,сервопривод 2 кнопки(любая) для открывания и 2 карточки.(любая) для открывания
    Код (C++):
    /*
    //#1
    светодиод -> 8 (Led_pin) 0 горит/ 1 нет
           GND ->  GND
    серва  -> 5 (servo_pin)
    геркон -> A3 (gercon_pin) 0 дверь закрыта / 1 нет
    //#2
    кнопка1 -> A1 (btm1_pin) 0 нажата/ 1 нет
           GND ->  GND
    кнопка2 -> A2 (btm2_pin) 0 нажата/ 1 нет
           GND ->  GND
    //#3               Arduino Uno
    RFID_RC522 RST -> 9 (RST_pin)
            SDA(SS)-> 10 (SDA_pin)
            MOSI   -> 11 (MOSI_pin)
            MISO   -> 12 (MISO_pin)
            SCK    -> 13 (SCK_pin)
            3,3В   -> 3,3В
            GND    -> GND

            Card UID: E6 38 FE 13  брелок
            Card UID: 5A 5D 39 D5  пластик
    */

    //#1
    const int Led_pin = 8 ; // нога светодиода
    uint8_t Led ;
    const int interval = 2000 ; // интервал после нажатия клавиши 2 сек

    #include <Servo.h>
    Servo myservo;
    const int servo_pin = 5  ; // нога серво
    const int servo_OFF = 0; // серва закрыта
    const int servo_ON = 90; // серва открыта
    const int gercon_pin = A3  ; // нога геркона
    uint8_t gercon ;
    //#2
    const int btm1_pin = A1  ; // нога кнопки
    const int btm2_pin = A2  ; // нога кнопки
    //#3
    byte uidCard1[4] = {0xE6, 0x38, 0xFE, 0x13};
    byte uidCard2[4] = {0x5A, 0x5D, 0x39, 0xD5};
    #include <SPI.h>
    #include <MFRC522.h>
    const int SDA_pin = 10;
    const int RST_pin = 9;

    MFRC522 rfid(SDA_pin, RST_pin); // Instance of the class

    void setup() {
      //#1
      pinMode(Led_pin, OUTPUT);
      digitalWrite(Led_pin, Led = 0);
      myservo.attach(servo_pin);
      pinMode(gercon_pin, INPUT_PULLUP);
      //#2
      pinMode(btm1_pin, INPUT_PULLUP);
      pinMode(btm2_pin, INPUT_PULLUP);
      //#3
      SPI.begin(); // Init SPI bus
      rfid.PCD_Init(); // Init MFRC522
      Serial.begin(9600);
      Serial.println("Scan uidCard");
    }

    void loop() {
      static uint32_t MILLIS ;
      MILLIS = millis() ;
      //#1
      static uint32_t future1 = 0 ;
      gercon = digitalRead(gercon_pin); // опрос состояния двери
      if (!gercon && !Led && (MILLIS >= future1)) { // убеждаемся что дверь закрыта и подошло время закрывать на замок
        digitalWrite(Led_pin, Led = 1);
        myservo.write(servo_OFF);  // закрываем
      }
      //#2
      if (!digitalRead(btm1_pin)) { // первая открывающая кнопка
        digitalWrite(Led_pin, Led = 0);
        future1 = millis() + interval;
        myservo.write(servo_ON);
      }
      if (!digitalRead(btm2_pin)) { // вторая открывающая кнопка
        digitalWrite(Led_pin, Led = 0);
        future1 = millis() + interval;
        myservo.write(servo_ON);
      }
      //#3
      static uint32_t future3 = 0 ;
      if (MILLIS >= future3)   {
        future3 = MILLIS + 1000 ;
        if ( rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
          if (rfid.uid.uidByte[0] == uidCard1[0] ||
              rfid.uid.uidByte[1] == uidCard1[1] ||
              rfid.uid.uidByte[2] == uidCard1[2] ||
              rfid.uid.uidByte[3] == uidCard1[3] ) {
            digitalWrite(Led_pin, Led = 0);
            future1 = millis() + interval;
            myservo.write(servo_ON);
          }
          if (rfid.uid.uidByte[0] == uidCard2[0] ||
              rfid.uid.uidByte[1] == uidCard2[1] ||
              rfid.uid.uidByte[2] == uidCard2[2] ||
              rfid.uid.uidByte[3] == uidCard2[3] ) {
            digitalWrite(Led_pin, Led = 0);
            future1 = millis() + interval;
            myservo.write(servo_ON);
          }
        }
      }
    }