• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 1 głosów - średnia: 1
  • 1
  • 2
  • 3
  • 4
  • 5
próba budowy systemu alarmowego
#7
Miałem 2 problemy z lcd, jeden rozwiązałem, na drugim utknąłem, mianowicie za żadne skarby nie potrafię skasować poprzedniego napisu na LCD.

Kod:
#include <Keypad.h>

#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(13, 12, 11, 10, 1, 0);



int diodaZielona = A0;
int diodaZulta = A1;
int diodaCzerwona = A2;
int buzzer = A3;
int czujnikRuchu = A4;
//miejsce na kontrakton
int syrena = A5;
 
const byte ROWS = 4; 
const byte COLS = 4;

byte rowPins[ROWS] = {9, 8, 7 ,6 };
byte colPins[COLS] = {5, 4, 3, 2};

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

Keypad klawiatura = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //inicjalizacja klawiatury

volatile int stanAlarmu = 1;
int aktywacjaAlarmuPozycja = 1;
char aktywacjaCyfra1 = '1'; //
char aktywacjaCyfra2 = '2'; //
char aktywacjaCyfra3 = '3'; //   PIN DO WŁĄCZENIA CZUWANIA
char aktywacjaCyfra4 = '4'; //
char aktywacjaCyfra5 = 'A'; //

int dezaktywacjaAlarmuPozycja = 1;
char dezaktywacjaCyfra1 = '1'; //
char dezaktywacjaCyfra2 = '2'; //  PIN DO WYŁĄCZENIA ALARMU I
char dezaktywacjaCyfra3 = '3'; //       STANU CZUWANIA
char dezaktywacjaCyfra4 = '4'; //
char dezaktywacjaCyfra5 = 'D'; //

int czasNaWpisPinu = 0;


void setup() {
  lcd.begin(16, 2);
  lcd.setCursor(0,0);
 
  pinMode(diodaZielona, OUTPUT);
  pinMode(diodaZulta, OUTPUT);
  pinMode(diodaCzerwona, OUTPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(syrena, OUTPUT);
  pinMode(czujnikRuchu, INPUT_PULLUP);
  //miejsce na kontrakotn     
}

void loop() {
 
char klawisz = 0;
 
  switch(stanAlarmu) {
    case 1: // czuwanie wyłączone
   
    lcd.setCursor(0, 0);
    lcd.print("CZUWANIE WYL");
   
    digitalWrite(diodaZielona, HIGH);
    digitalWrite(diodaZulta, LOW);
    digitalWrite(diodaCzerwona, LOW);
    digitalWrite(buzzer, LOW);
    digitalWrite(syrena, LOW); 
   
    czasNaWpisPinu = 0;
   
    klawisz = klawiatura.getKey();
      if (klawisz) {
      if (aktywacjaAlarmuPozycja == 1 && klawisz == aktywacjaCyfra1) {
          aktywacjaAlarmuPozycja++;         
          lcd.clear();
          lcd.setCursor(0, 0);
          lcd.print("x");
        } else if (aktywacjaAlarmuPozycja == 2 && klawisz == aktywacjaCyfra2) {
          aktywacjaAlarmuPozycja++;
          lcd.setCursor(0, 0);
          lcd.print("x x");
        } else if (aktywacjaAlarmuPozycja == 3 && klawisz == aktywacjaCyfra3) {
          aktywacjaAlarmuPozycja++;         
          lcd.setCursor(0, 0);
          lcd.print("x x x");
        } else if (aktywacjaAlarmuPozycja == 4 && klawisz == aktywacjaCyfra4) {
          aktywacjaAlarmuPozycja++;         
          lcd.setCursor(0, 0);
          lcd.print("x x x x");
        } else if (aktywacjaAlarmuPozycja == 5 && klawisz == aktywacjaCyfra5) {           
          lcd.setCursor(0, 0);
          lcd.print("x x x x x");
          delay(1000);
          lcd.setCursor(0, 0);
          lcd.print("POPRAWNY KOD");
          delay(1000); 
          lcd.clear();
          stanAlarmu = 2;
          aktywacjaAlarmuPozycja = 1;
        } else {
          lcd.setCursor(0, 0);
          lcd.print("NIEPOPRAWNY KOD");
          delay(1000);
          lcd.clear();
          stanAlarmu = 1;
          aktywacjaAlarmuPozycja = 1;
         
      }
      }
    break;
   
    case 2://czuwanie włączone
   
    lcd.setCursor(0, 0);
    lcd.print("STAN CZUWANIA");
   
    digitalWrite(diodaZielona, LOW);
    digitalWrite(diodaZulta, HIGH);
    digitalWrite(diodaCzerwona, LOW);
    digitalWrite(syrena, LOW);
   
    klawisz = klawiatura.getKey();
      if (klawisz) {
      if (dezaktywacjaAlarmuPozycja == 1 && klawisz == dezaktywacjaCyfra1) {
          dezaktywacjaAlarmuPozycja++;
          lcd.clear();
          lcd.setCursor(0, 0);
          lcd.print("x");
        } else if (dezaktywacjaAlarmuPozycja == 2 && klawisz == dezaktywacjaCyfra2) {
          dezaktywacjaAlarmuPozycja++;   
          lcd.setCursor(0, 0);
          lcd.print("x x");
        } else if (dezaktywacjaAlarmuPozycja == 3 && klawisz == dezaktywacjaCyfra3) {
          dezaktywacjaAlarmuPozycja++; 
          lcd.setCursor(0, 0);
          lcd.print("x x x");
        } else if (dezaktywacjaAlarmuPozycja == 4 && klawisz == dezaktywacjaCyfra4) {
          dezaktywacjaAlarmuPozycja++;
          lcd.setCursor(0, 0);
          lcd.print("x x x x");
        } else if (dezaktywacjaAlarmuPozycja == 5 && klawisz == dezaktywacjaCyfra5) {
          lcd.setCursor(0, 0);
          lcd.print("x x x x x");
          delay(1000);
          lcd.setCursor(0, 0);
          lcd.print("POPRAWNY KOD");
          delay(1000);
          lcd.clear();
          lcd.setCursor(0, 0);
          lcd.print("ALARM WYL");
          delay(1000);
          lcd.clear();
          stanAlarmu = 1; //poprawnie wpisany pin, wyłączenie czuwania
          dezaktywacjaAlarmuPozycja = 1;
        } else {
           stanAlarmu = 5; // źle wpisany pin, przeniesienie do stanu 5
          dezaktywacjaAlarmuPozycja = 1;
        }
      }
    if (digitalRead(czujnikRuchu) == HIGH) {
        stanAlarmu = 3; // wykrycie ruchu, przejscie do stanu 3
      }
    break; 
   
    case 3: // czas na rozbrojenie alarmu po wykryciu  ruchu przez PIR
    digitalWrite(diodaZielona, LOW);
    digitalWrite(diodaZulta, LOW);
    digitalWrite(diodaCzerwona, HIGH);
    tone(buzzer, 2000);
    delay(20);
    digitalWrite(diodaCzerwona, LOW);
    tone(buzzer, 2000);
    delay(20);
    noTone(buzzer);
    digitalWrite(buzzer, HIGH);
   
     klawisz = klawiatura.getKey();
      if (klawisz) {
      if (dezaktywacjaAlarmuPozycja == 1 && klawisz == dezaktywacjaCyfra1) {
          dezaktywacjaAlarmuPozycja++;
        } else if (dezaktywacjaAlarmuPozycja == 2 && klawisz == dezaktywacjaCyfra2) {
          dezaktywacjaAlarmuPozycja++;         
        } else if (dezaktywacjaAlarmuPozycja == 3 && klawisz == dezaktywacjaCyfra3) {
          dezaktywacjaAlarmuPozycja++; 
        } else if (dezaktywacjaAlarmuPozycja == 4 && klawisz == dezaktywacjaCyfra4) {
          dezaktywacjaAlarmuPozycja++;
        } else if (dezaktywacjaAlarmuPozycja == 5 && klawisz == dezaktywacjaCyfra5) {
           stanAlarmu = 1; // dobrze wpisany pin, przejscie do stanu 1
          dezaktywacjaAlarmuPozycja = 1; 
        }  else {
           stanAlarmu = 4; // źle wpisany pin przejscie do stanu 4 (druga szansa na wpisanie pinu)
          dezaktywacjaAlarmuPozycja = 1;
      }
      }
      delay(100);                  //
      czasNaWpisPinu++;            //   USTAWIENIE CZASU NA                                       //   WPISANIE PINU
      if (czasNaWpisPinu >= 50) {  //   WPISANIE PINU
        czasNaWpisPinu = 0;        //
        stanAlarmu = 6; // czas na wpisanie pinu minął, przejscie do stanu (alarm)
      }
    break;
   
   
    case 4: // Druga szansa na rozbrojenie alarmu po wykryciu  ruchu przez PIR
   
    digitalWrite(diodaZielona, LOW);
    digitalWrite(diodaZulta, HIGH);
    digitalWrite(diodaCzerwona, HIGH);
    tone(buzzer, 4000);
    delay(20);
    tone(buzzer, 1000);
    delay(20);
    noTone(buzzer);
    digitalWrite(diodaCzerwona, LOW);
    digitalWrite(buzzer, HIGH);
   
     klawisz = klawiatura.getKey();
      if (klawisz) {
      if (dezaktywacjaAlarmuPozycja == 1 && klawisz == dezaktywacjaCyfra1) {
          dezaktywacjaAlarmuPozycja++;
        } else if (dezaktywacjaAlarmuPozycja == 2 && klawisz == dezaktywacjaCyfra2) {
          dezaktywacjaAlarmuPozycja++;         
        } else if (dezaktywacjaAlarmuPozycja == 3 && klawisz == dezaktywacjaCyfra3) {
          dezaktywacjaAlarmuPozycja++; 
        } else if (dezaktywacjaAlarmuPozycja == 4 && klawisz == dezaktywacjaCyfra4) {
          dezaktywacjaAlarmuPozycja++;
        } else if (dezaktywacjaAlarmuPozycja == 5 && klawisz == dezaktywacjaCyfra5) {
           stanAlarmu = 1; // dobrze wpisany pin, przejscie do stanu 1
          dezaktywacjaAlarmuPozycja = 1; 
        }  else {
           stanAlarmu = 6; // źle wpisany pin przejscie do stanu 6 (alarm)
          dezaktywacjaAlarmuPozycja = 1;
      }
      }
      delay(100);                  //
      czasNaWpisPinu++;            //   USTAWIENIE CZASU NA                                       //   WPISANIE PINU
      if (czasNaWpisPinu >= 50) {  //   WPISANIE PINU
        czasNaWpisPinu = 0;        //
        stanAlarmu = 6; // czas na wpisanie pinu minął, przejscie do stanu 6 (alarm)
      }
    break;
   
   
    case 5: // rozbrajanie alarmu po nieudanej próbie ze stanu 2. ograniczony czas na rozbrojenie.
    digitalWrite(diodaZielona, LOW);
    digitalWrite(diodaZulta, HIGH);
    tone(buzzer, 4000);
    delay(20);
    tone(buzzer, 1000);
    delay(20);
    noTone(buzzer);
    digitalWrite(diodaZulta, LOW);
    digitalWrite(diodaCzerwona, LOW);
       
    klawisz = klawiatura.getKey();
      if (klawisz) {
      if (dezaktywacjaAlarmuPozycja == 1 && klawisz == dezaktywacjaCyfra1) {
          dezaktywacjaAlarmuPozycja++;
        } else if (dezaktywacjaAlarmuPozycja == 2 && klawisz != dezaktywacjaCyfra2) {
          dezaktywacjaAlarmuPozycja = 1;
        } else if (dezaktywacjaAlarmuPozycja == 2 && klawisz == dezaktywacjaCyfra2) {
          dezaktywacjaAlarmuPozycja++;
        } else if (dezaktywacjaAlarmuPozycja == 3 && klawisz == dezaktywacjaCyfra3) {
          dezaktywacjaAlarmuPozycja++; 
        } else if (dezaktywacjaAlarmuPozycja == 4 && klawisz == dezaktywacjaCyfra4) {
          dezaktywacjaAlarmuPozycja++;
        } else if (dezaktywacjaAlarmuPozycja == 5 && klawisz == dezaktywacjaCyfra5) {
           stanAlarmu = 1; // dobrze wpisany pin, przejscie do stanu 1
        dezaktywacjaAlarmuPozycja = 1;
      } else {
           stanAlarmu = 6; // źle wpisany pin, przejscie do stanu 6 (alarm)
        dezaktywacjaAlarmuPozycja = 1; 
      }
      }
      delay(100);                //
      czasNaWpisPinu++;          //   USTAWIENIE CZASU NA                                       //   WPISANIE PINU
    if (czasNaWpisPinu >= 50) {  //   WPISANIE PINU
        czasNaWpisPinu = 0;      //
        stanAlarmu = 6; // czas na wpisanie pinu minął, przejscie do stanu 6 (alarm)
}
    break;
   
    case 6: // ALARM
   
     lcd.setCursor(4, 0);
     lcd.print("ALARM !");
   
    digitalWrite(diodaZielona, LOW);
    digitalWrite(diodaZulta, LOW);
    digitalWrite(diodaCzerwona, HIGH);
    digitalWrite(buzzer, LOW);
    digitalWrite(syrena, HIGH);
   
 
     klawisz = klawiatura.getKey();
      if (klawisz) {
      if (dezaktywacjaAlarmuPozycja == 1 && klawisz == dezaktywacjaCyfra1) {
          dezaktywacjaAlarmuPozycja++;
        } else if (dezaktywacjaAlarmuPozycja == 2 && klawisz != dezaktywacjaCyfra2) {
          dezaktywacjaAlarmuPozycja = 1;
        } else if (dezaktywacjaAlarmuPozycja == 2 && klawisz == dezaktywacjaCyfra2) {
          dezaktywacjaAlarmuPozycja++;
        } else if (dezaktywacjaAlarmuPozycja == 3 && klawisz == dezaktywacjaCyfra3) {
          dezaktywacjaAlarmuPozycja++; 
        } else if (dezaktywacjaAlarmuPozycja == 4 && klawisz == dezaktywacjaCyfra4) {
          dezaktywacjaAlarmuPozycja++;
        } else if (dezaktywacjaAlarmuPozycja == 5 && klawisz == dezaktywacjaCyfra5) {
           stanAlarmu = 1; // Po wpisaniu pinu przejscie do stanu 1
        dezaktywacjaAlarmuPozycja = 1;
        }else {
           stanAlarmu = 6; // ZŁY WPIN, ALARM TRWA NADAL
        dezaktywacjaAlarmuPozycja = 1;
        }
      }
    break;       
  }
}


W case1 wyświetla się napis "CZUWANIE WYL". Dlaczego po wpisaniu prawidłowego znaku pinu, nie kasuje się napis na lcd? Zamiast niego powinien pojawić się "x".  Mam na myśli ten fragment kodu. Użyłem lcd.clear();  ale nic to nie daje.

Kod:
case 1: // czuwanie wyłączone
   
    lcd.setCursor(0, 0);
    lcd.print("CZUWANIE WYL");
   
    digitalWrite(diodaZielona, HIGH);
    digitalWrite(diodaZulta, LOW);
    digitalWrite(diodaCzerwona, LOW);
    digitalWrite(buzzer, LOW);
    digitalWrite(syrena, LOW); 
   
    czasNaWpisPinu = 0;
   
    klawisz = klawiatura.getKey();
      if (klawisz) {
      if (aktywacjaAlarmuPozycja == 1 && klawisz == aktywacjaCyfra1) {
          aktywacjaAlarmuPozycja++;         
          lcd.clear();
          lcd.setCursor(0, 0);
          lcd.print("x");

Dlaczego tak się dzieje?
 
Odpowiedź
  


Wiadomości w tym wątku
próba budowy systemu alarmowego - przez Lucek20 - 05-01-2020, 14:31
RE: próba budowy systemu alarmowego - przez elvis - 05-01-2020, 15:02
RE: próba budowy systemu alarmowego - przez Lucek20 - 05-01-2020, 15:08
RE: próba budowy systemu alarmowego - przez Lucek20 - 05-01-2020, 19:25
RE: próba budowy systemu alarmowego - przez Lucek20 - 05-01-2020, 22:04
RE: próba budowy systemu alarmowego - przez Lucek20 - 10-01-2020, 00:03
RE: próba budowy systemu alarmowego - przez Lucek20 - 10-01-2020, 12:32
RE: próba budowy systemu alarmowego - przez Lucek20 - 13-02-2020, 23:08
RE: próba budowy systemu alarmowego - przez Lucek20 - 14-02-2020, 22:32
RE: próba budowy systemu alarmowego - przez Lucek20 - 15-02-2020, 21:02
RE: próba budowy systemu alarmowego - przez Lucek20 - 15-02-2020, 22:36
RE: próba budowy systemu alarmowego - przez Lucek20 - 16-02-2020, 12:04
RE: próba budowy systemu alarmowego - przez Lucek20 - 22-02-2020, 12:34
RE: próba budowy systemu alarmowego - przez Lucek20 - 26-02-2020, 17:23
RE: próba budowy systemu alarmowego - przez Lucek20 - 26-02-2020, 19:12
RE: próba budowy systemu alarmowego - przez Lucek20 - 01-03-2020, 20:42
RE: próba budowy systemu alarmowego - przez Lucek20 - 03-03-2020, 21:44
RE: próba budowy systemu alarmowego - przez Lucek20 - 04-03-2020, 23:42
RE: próba budowy systemu alarmowego - przez Lucek20 - 15-03-2020, 20:33
RE: próba budowy systemu alarmowego - przez Lucek20 - 20-03-2020, 23:43
RE: próba budowy systemu alarmowego - przez Lucek20 - 01-04-2020, 14:30
RE: próba budowy systemu alarmowego - przez Lucek20 - 04-04-2020, 09:33
RE: próba budowy systemu alarmowego - przez Lucek20 - 12-04-2020, 08:24
RE: próba budowy systemu alarmowego - przez Lucek20 - 12-04-2020, 22:17
RE: próba budowy systemu alarmowego - przez Lucek20 - 23-04-2020, 11:41
RE: próba budowy systemu alarmowego - przez Lucek20 - 26-04-2020, 14:47

Skocz do:


Przeglądający: 1 gości