Получите ошибку 'setLocked' не может использоваться как функция, новичок и не совсем уверен, как исправить эту ошибку

Я новичок, когда дело касается Arduino и tinkercad, я не совсем уверен, в чем проблема, но я пытаюсь создать блокировку клавиатуры и ЖК-дисплея. Сначала он сказал, что setlock не был объявлен в области видимости, но затем я добавил boolean setLocked, но затем ошибка просто изменилась на то, что setLocked не может использоваться как функция. Любая помощь будет очень признательна, и, пожалуйста, поговорите со мной, как будто я очень тупой, лол, я только начинаю этот курс без предварительных знаний. Спасибо!

boolean setLocked;
    #include <LiquidCrystal.h>
    #include <Keypad.h>

    #define redLED 10
    #define greenLED 11

    char* password="1212";
    int positions = 0;

    const byte rows = 4;
    const byte columns = 4;

    char keyMap [rows] [columns] = {
      {'1', '2', '3', 'A'},
      {'4', '5', '6', 'B'},
      {'7', '8', '9', 'C'},
      {'*', '0', '#', 'D'}  
    };

    byte rowPins [rows] = {1, 2, 3, 4};
    byte columnsPins [columns] = {5, 6, 7, 8};

    Keypad myKeypad = Keypad (makeKeymap(keyMap), rowPins, columnsPins, rows, columns);

    LiquidCrystal lcd (A0, A1, A2, A3, A4, A5);

    void setup() {

      lcd.begin(16, 2);
      pinMode(redLED, OUTPUT);
      pinMode(greenLED, OUTPUT);
      setLocked(true);
    }

    void loop() {

      char whichKey = myKeypad.getKey();

      lcd.setCursor (0,0);
      lcd.print ("Hello");
      lcd.setCursor(0,1);
      lcd.print("Please enter the password");

      if(whichKey == '*' || whichKey =='#'|| whichKey =='A' || whichKey =='B'|| whichKey =='C' || whichKey =='D') {
        positions=0;
        setLocked(true);
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("The password is incorrect");
        delay(500);
        lcd.clear();    
        }

        if(whichKey == password [positions]) {
          positions ++;
          }

          if(positions == 4){
            setLocked(false);
            lcd.clear();
            lcd.setCursor(0, 0);
            lcd.print("!Correct!");
            delay(3000);
            lcd.clear();
            lcd.setCursor(0, 0);
            lcd.print("End Arduino");
            lcd.setCursor(0, 1);
            lcd.print("Thank you for trying me out")
            delay(5000);
            lcd.clear();     
            }
            delay(100);
    }        
    void setLocked(int locked)
      if(locked){
        digitalWrite(redLED, HIGH);
        digitalWrite(greenLED, LOW);
        }     
        else{
        digitalWrite(redLED, LOW);
        digitalWrite(greenLED, HIGH);
          }
    }

1 ответ

Ваш компилятор прав. setLockedне заявлено. Если вы добавляете функцию в свой эскиз (сверху вниз) после ее вызова, вам нужно было добавить прототип функции вверху:

void setLocked(int locked);

Теперь вы можете использовать эту функцию везде в своем скетче.

Другие вопросы по тегам