מציג תוצאות 1 עד 6 מתוך 6

נושא: הוספת כפתור override

  1. #1
    תאריך הצטרפות
    Nov 2017
    הודעות
    11
    תודה
    2
    קיבל/ה 0 תודות ב-0 הודעות
    תודה
    0
    Thanked 0 Times in 0 Posts

    הוספת כפתור override

    שלום

    אני מקווה שזה המקום המתאים בפורומים.
    הרכבתי לאחרונה פרוייקט של מנעול לדלת עם קוד, עבדתי בעיקר עם כל מיני מדריכים מפורטים מהאינטרנט.
    הכל עובד מצויין (מצורף קובץ ino).

    הבעיה היא שאין למעשה אפרות לפתוח את המנעול מבפנים - הקודן בחוץ, הסרוו עם המנעול בפנים.
    הפתרון היה נראה לי פשוט - הוספת כפתור שיפתח את המנעול מבפנים, ישהה כמה שניות ויסגור.
    כשניסיתי לשנות/להוסיף לקוד הקיים רק עשיתי יותר בלאגן ומחיפושים באינטרנט רק הסתבכתי יותר.

    איך אני מוסיף לקוד את הכפתור הזה בלי שהוא ישגע את הקוד הקיים?
    קבצים מצורפים קבצים מצורפים

  2. פרסומת
  3. #2
    תאריך הצטרפות
    Aug 2013
    הודעות
    2,094
    תודה
    15
    קיבל/ה 322 תודות ב-286 הודעות
    תודה
    0
    Thanked 1 Time in 1 Post
    תעלה בבקשה את הקוד כטקסט (תעתיק את הטקסט מהעורך של הארדואינו, תבחר ב # בשורת התפריט ותדביק במקום שהסמן נמצא בין שני זוגות הסוגריים המרובעים).

  4. #3
    תאריך הצטרפות
    Nov 2017
    הודעות
    11
    תודה
    2
    קיבל/ה 0 תודות ב-0 הודעות
    תודה
    0
    Thanked 0 Times in 0 Posts
    קוד:
    #include <Password.h> //http://playground.arduino.cc/uploads/Code/Password.zip //tells to use password library
    #include <Keypad.h> //http://www.arduino.cc/playground/uploads/Code/Keypad.zip  //tells to use keypad library
    #include <Servo.h> //tells to use servo library
    
    
    int servoPin = 12;
     
    Servo servo;  
     
    int servoAngle = 170;   // servo position in degrees
    
    
    Password password = Password( "1924" ); //password to unlock, can be changed
    
    
    const byte ROWS = 4; // Four rows
    const byte COLS = 4; // columns
    // Define the Keymap
    char keys[ROWS][COLS] = {
    {'1','2','3','A'},
    {'4','5','6','B'},
    {'7','8','9','C'},
    {'*','0','#','D'}
    };
    // Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
    byte rowPins[ROWS] = { 5, 6, 7, 8 };// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
    byte colPins[COLS] = { 14, 15, 16, 17 };
    
    
    
    
    // Create the Keypad
    Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
    
    
    void setup(){
      Serial.begin(9600);
      Serial.write(254);
      Serial.write(0x01);
      delay(200); 
      pinMode(11, OUTPUT);  //green light
      pinMode(10, OUTPUT);  //red light
      servo.attach(12);
      keypad.setDebounceTime(50);
      keypad.addEventListener(keypadEvent); //add an event listener for this keypad
      }
    
    
    void loop(){
      keypad.getKey();
      servo.write(170);
      }
      //take care of some special events
      void keypadEvent(KeypadEvent eKey){
      switch (keypad.getState()){
      case PRESSED:
      
      Serial.print("Enter:");
      Serial.println(eKey);
      delay(10);
      
      Serial.write(254);
      
      switch (eKey){
        case '*': checkPassword(); delay(1); break;
        
        case '#': password.reset(); delay(1); break;
        
         default: password.append(eKey); delay(1);
    }
    }
    }
    void checkPassword(){
      
    if (password.evaluate()){  //if password is right open
        
        Serial.println("Accepted");
        Serial.write(254);delay(10);
        //Add code to run if it works
        servo.write(20); //deg
        digitalWrite(11, HIGH);//turn on
        delay(4500); //wait 5 seconds
        digitalWrite(11, LOW);// turn off
        digitalWrite(10, LOW);// turn off
        delay (500);
        digitalWrite(11, HIGH);//turn on
        digitalWrite(10, HIGH);//turn on
        delay (500);
        digitalWrite(11, LOW);//turn off
        digitalWrite(10, LOW);//turn off
        delay (500);
        digitalWrite(11, HIGH);//turn on
        digitalWrite(10, HIGH);//turn on
        delay (500);
        digitalWrite(11, LOW);//turn off
        digitalWrite(10, LOW);//turn off
        delay (500);
        digitalWrite(11, HIGH);//turn on
        digitalWrite(10, HIGH);//turn on
        delay (500);
        digitalWrite(11, LOW);//turn off
        digitalWrite(10, LOW);//turn off
        delay (500);
        digitalWrite(11, HIGH);//turn on
        digitalWrite(10, HIGH);//turn on
        delay (500);
        digitalWrite(11, LOW);//turn off
        digitalWrite(10, LOW);//turn off
        servo.write(170);
        password.reset(); delay(1);
    }else{
        Serial.println("Denied"); //if passwords wrong keep locked
        Serial.write(254);delay(10);
        //add code to run if it did not work
        // servo.write(170);
        digitalWrite(10, HIGH); //turn on
        delay(500); //wait 5 seconds
        digitalWrite(10, LOW);//turn off
        password.reset(); delay(1);
    }
    }

  5. #4
    תאריך הצטרפות
    Aug 2013
    הודעות
    2,094
    תודה
    15
    קיבל/ה 322 תודות ב-286 הודעות
    תודה
    0
    Thanked 1 Time in 1 Post
    מכוון שבזמן הפתיחה הידנית אין לך בעיה שהלופ הראשי ישתהה תכניס בלופ הראשי בדיקה של מצב כפתור ה OVERIDE (כנראה תצטרך לעשות איזשהו DEBOUNCE, גם על זה לא חשסר מידע ברשת) וכאשר הוא נלחץ תעבור לפונקציה שתטפל בפתיחה, השהייה, סגירה. חזרה מהפונקציה תחזיר אותך לפעולה הרגילה של הלופ.

  6. #5
    תאריך הצטרפות
    Nov 2017
    הודעות
    11
    תודה
    2
    קיבל/ה 0 תודות ב-0 הודעות
    תודה
    0
    Thanked 0 Times in 0 Posts
    משהו כזה? ניסיתי להדגיש את השינויים שעשיתי
    קוד:
    include <Password.h> //http://playground.arduino.cc/uploads/Code/Password.zip //tells to use password library#include <Keypad.h> //http://www.arduino.cc/playground/uploads/Code/Keypad.zip  //tells to use keypad library
    #include <Servo.h> //tells to use servo library
    
    
    const int servoPin = 12;
    const int ledGreenPin = 11;
    const int ledRedPin = 10;
    const int buttonPin = 9;
    
    
    Servo servo;
    
    
    int servoAngle = 170;   // servo position in degrees
    
    
    Password password = Password( "1924" ); //password to unlock, can be changed
    
    
    const byte ROWS = 4; // Four rows
    const byte COLS = 4; // columns
    // Define the Keymap
    char keys[ROWS][COLS] = {
      {'1', '2', '3', 'A'},
      {'4', '5', '6', 'B'},
      {'7', '8', '9', 'C'},
      {'*', '0', '#', 'D'}
    };
    // Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
    byte rowPins[ROWS] = { 5, 6, 7, 8 };// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
    byte colPins[COLS] = { 14, 15, 16, 17 };
    
    
    
    
    // Create the Keypad
    Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
    
    
    void setup() {
      Serial.begin(9600);
      Serial.write(254);
      Serial.write(0x01);
      delay(200);
      pinMode(ledGreenPin, OUTPUT);  //green light
      pinMode(ledRedPin, OUTPUT);  //red light
      pinMode(buttonPin, INPUT);
      
      servo.attach(12);
      keypad.setDebounceTime(50);
      keypad.addEventListener(keypadEvent); //add an event listener for this keypad
      servo.write(170);
    }
    
    
    void loop() {
      keypad.getKey();
      if ( digitalRead(buttonPin ) == LOW ) {
        // button pressed
        activateLock();
      }
    }
    
    
    //take care of some special events
    void keypadEvent(KeypadEvent eKey) {
      switch (keypad.getState()) {
        case PRESSED:
    
    
          Serial.print("Enter:");
          Serial.println(eKey);
          delay(10);
    
    
          Serial.write(254);
    
    
          switch (eKey) {
            case '*': checkPassword(); delay(1); break;
    
    
            case '#': password.reset(); delay(1); break;
    
    
            default: password.append(eKey); delay(1);
          }
      }
    }
    void checkPassword() {
    
    
      if (password.evaluate()) { //if password is right open
    
    
        Serial.println("Accepted");
        Serial.write(254); delay(10);
        //Add code to run if it works
        activateLock();
        password.reset(); delay(1);
      } else {
        Serial.println("Denied"); //if passwords wrong keep locked
        Serial.write(254); delay(10);
        //add code to run if it did not work
        // servo.write(170);
        digitalWrite(ledRedPin, HIGH); //turn on
        delay(500); //wait 5 seconds
        digitalWrite(ledRedPin, LOW);//turn off
        password.reset(); delay(1);
      }
    }
    
    
    void activateLock() {
        servo.write(20); //deg
        delay(5000); //wait 5 seconds
        servo.write(170);
    }

  7. #6
    תאריך הצטרפות
    Aug 2013
    הודעות
    2,094
    תודה
    15
    קיבל/ה 322 תודות ב-286 הודעות
    תודה
    0
    Thanked 1 Time in 1 Post
    כן, משהו כזה. מכיוון שהפעולה במילא זורקת אותך לפונקציה שתיקח מספר שניות ייתכן ואין צורך ב DEBOUNCE (אלא אם רוצים למנוע הפעלה מקרית בגלל רעשים)

הרשאות פרסום

  • אין באפשרותך לפרסם נושאים חדשים
  • אין באפשרותך לפרסם תגובות
  • אין באפשרותך לצרף קבצים
  • אין באפשרותך לערוך את הודעותיך
  •  
הרשמה