Ten sam warunek na wejście i wyjście z pętli

0

Witam, piszę program na arduino program, wspomagam się tym co jest w intrernecie. Program ten będzie systemem alarmowym. Mój problem polega na tym że chcę oprogramowac klawiaturkę membranową tak, żeby po wpisaniu kodu dostępu nastąpiło wejście do pętli (to mam), a następnie po wpisaniu tego samego kodu wyjście z pętli. Kod dostępu nie jest zapisany w programie, a w pamięci mikrokontrolera i można go zmienić z poziomu klawiatury za pomocą innego kodu. Jak można to zrobić?

Tutaj jest warunek który powoduje wejście do pętli:
if( mykey[0]==pamiec[0] && mykey[1]==pamiec[1] && mykey[2]==pamiec[2] && mykey[3]==pamiec[3] && mykey[4]==pamiec[4] )

Z góry dziękuję za pomoc

1
bool passwdEqual(int[] myKey, int[] myPassword) {
for(int i = 0; i < 4; ++i)
    if(myKey[i] != myPassword)
        return false;
return true;

}
int myKey[4] = {};
int myPassword[4] = {1,2,3,4};
for(int i = 0; i < 4; ++i)
    myKey[i] = getKey();
if(passwdEqual(myKey, myPassword))
{
    do {
       for(int i = 0; i < 4; ++i)
           myKey[i] = getKey();
    }while(passwdEqual(myKey, myPassword)
}

GetKey musi wczytywać jedną nową liczbę z klawiatury. Pamiętaj o tym, że użytkownik może przytrzymać klawisz dłużej, niż jeden obrót pętli.
Warto też przerobić ten program w taki sposób, żeby dawał użytkownikowi jakiś sygnał w momencie, gdy wpisze dobre/złe hasło.

0

Niestety ale nie wiem co robię źle, ale wywala mi błędy jak dodam tą część kodu

0

Albo podajesz ten kod z zaznaczeniem w którym wierszu który błąd wywala albo zmieniasz forum na forum wróżbitów.

0

Kilka literówek dałem... dawno nie korzystałem z tablic w stylu c

#include <iostream>

using namespace std;

bool passwdEqual(int myKey[], int myPassword[]) {
for(int i = 0; i < 4; ++i)
    if(myKey[i] != myPassword[i])
        return false;
return true;
 
}

int getKey() {
    int i;
    cin >> i;
    return i;
}

int main()
{
    int myKey[4] = {};
    int myPassword[4] = {1,2,3,4};
    for(int i = 0; i < 4; ++i)
        myKey[i] = getKey();
    if(passwdEqual(myKey, myPassword))
    {
        std::cout << "I'm in" << std::endl;
        do {
           for(int i = 0; i < 4; ++i)
               myKey[i] = getKey();
        }while(!passwdEqual(myKey, myPassword));
    }
    std::cout <<"I'm out!" <<std::endl;
}

Wersja do testowania w konsoli, do uC musisz zamienić cin i cout na co tam chcesz...

Edit
Właściwie to nie jestem pewnien czy na pewno dobrze zrozumiałem o co Ci chodzi z wchodzeniem do pętli, ale najwyżej sobie przerobisz, żeby zamiast porównywać z wzorcem w programie zapisywało do myPassword.

0

Dzęki za pomoc, ale teraz mam inny problem, mianowicie, kiedy wejdzie już do pętli do... while, nie reaguje klawiaturka membranowa i nie mam pojęcia jak sobie z tym poradzić

void dostep() // funkcja sterująca 
  {
   Serial.print("Wprowadz KOD dostepu: ");
   while(l<5)
     {
     char keypressed = kpd.getKey();
     if (keypressed != NO_KEY)
       {
       mykey[l]=keypressed;l++;Serial.print(keypressed);warning_1();
       }
     }
      if(passwdEqual(mykey, pamiec))
      {
        
 
    if(passwdEqual(mykey, pamiec))
    {
    
        
        do
        {
// to co ma się wykonywać w pętli, nieważne dla mojego pytania************************************************
   if(digitalRead(2) == HIGH)
    {digitalWrite(12, HIGH);
  {digitalWrite(10, HIGH);  
    delay(300);
    digitalWrite(12, LOW); 
  digitalWrite(10, LOW);  
    delay(300);
    }
    }
    else {digitalWrite(12,LOW);
    digitalWrite(10,LOW);}
    
    if(digitalRead(3) == HIGH)
    {digitalWrite(13, HIGH);
  {digitalWrite(10, HIGH);  // podstawiamy zmienną zamiast numeru pinu
    delay(200);
    digitalWrite(13, LOW); 
  digitalWrite(10, LOW);  // podstawiamy zmienną zamiast numeru pinu
    delay(200);
    }
    }
    else {digitalWrite(13,LOW);
    digitalWrite(10,LOW);}  
// **************************************************************************
for(int i = 0; i < 5; ++i)
   mykey[i] = kpd.getKey();
   }
   while(!passwdEqual(mykey, pamiec));
    }
      }
  }
0

Pomoże ktoś? Nie potrafię wyjśc z tej pętli, gdyż klawiatura nie reaguje w niej

1 użytkowników online, w tym zalogowanych: 0, gości: 1