Skocz do zawartości

Wyświetlacz nie wyświetla wszystkich komend


Pomocna odpowiedź

#include <Servo.h>
#include <LiquidCrystal_I2C.h> // biblioteka do LCD
#include <Keypad.h> //biblioteka do klawiatury
#include <Wire.h>



Servo servo;
int pos = 40;
char* password ="2004"; //hasło
int pozisyon = 0; 
int przycisk = 0;
const byte rows = 4; 
const byte cols = 4;

char keyMap [rows] [cols] = { 

  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

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

Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, rows, cols);

LiquidCrystal_I2C lcd(0x3F, 16, 2);

void setup(){
servo.attach(10);
  lcd.begin();
  setLocked (true);
  przycisk = 0;
}

void loop(){
setLocked (true);
  char whichKey = myKeypad.getKey();
  lcd.setCursor(0, 0);
  lcd.print("     Witam");
  lcd.setCursor(0, 1);
  lcd.print("  Wpisz haslo");

  if(whichKey == '*' || whichKey == '#' || whichKey == 'A' ||       // przyciski złe
  whichKey == 'B' || whichKey == 'C' || whichKey == 'D'){
    przycisk=0;
    pozisyon=0;
    setLocked (true);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("ZLY PRZYCISK");
    delay(1000);
    lcd.clear();
    
  }
  if(whichKey == '0' || whichKey == '1' || whichKey == '2' || whichKey == '3' ||       //define keys
  whichKey == '4' || whichKey == '5' || whichKey == '6' || whichKey == '7' || whichKey == '9' || whichKey == '10'){
    przycisk++;
    }
    if(przycisk == 5){
      przycisk = 0;
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.write("    ZA DUZO");
      lcd.setCursor(0,1);
      lcd.write("     ZNAKOW");
      delay(1000);
      lcd.clear();
    }
    if(przycisk == 1){
      lcd.clear();
      lcd.setCursor(0,1);
      lcd.write("      *");
    }
    if(przycisk == 2){
      lcd.clear();
      lcd.setCursor(0,1);
      lcd.write("      **");
    }
    if(przycisk == 3){
      lcd.clear();
      lcd.setCursor(0,1);
      lcd.write("      ***");
    }
    if(przycisk == 4){
      lcd.clear();
      lcd.setCursor(0,1);
      lcd.write("      ****");
    }
    if(przycisk == 4 && pozisyon < 3){
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.write("     Złe");
      lcd.setCursor(0,1);
      lcd.write("    Haslo");
      delay(1000);
      przycisk = 0;
      lcd.clear();
    }
  if(whichKey == password [pozisyon]){

    pozisyon ++;
  }
  if(pozisyon == 4){
    przycisk = 0;
    pozisyon = 0;
    setLocked (false);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("DOBRE HASLO");
    delay(3000);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Skrytka zamknie");
    lcd.setCursor(0, 1);
    lcd.print("   sie za minute");
    delay(60000);
   lcd.clear();
  }
 

  delay(100);
}

void setLocked(int locked){
 if(locked){
    servo.write(40);
   }
    else{
      przycisk = 0;
      servo.write(130);
    }
  }

image.thumb.png.32e0f8795ddffddf59e6717c2b892ecb.pngimage.thumb.png.058a3fc31666b9b9e269771ce24c24bd.png

Gdy wpisuję hasło nie pojawiają się * oraz gdy wpiszę błędne hasło nie wyświetla się "Zle haslo" tylko pojawia się niebieskie tło tak jak na zdjęciu. 

Link to post
Share on other sites

A czy na wyświetlaczu wyświetla się cokolwiek? Jak wpiszesz w Void setup, albo Void loop :

lcd.print("Hello, world!");

To czy się wyświetla?

Jak wejdziesz w przykłady/ LiquidCristal_I2C/Hello, world, To popatrz na siódmą linijkę:

LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 for a 16 chars and 2 line display

Pomijając, że jest to przykład dla wyświetlacza 20:4 to jak ja się tym bawiłem to ten adres 0x27 zawsze działał

A ty masz:

LiquidCrystal_I2C lcd(0x3F, 16, 2);

 

Zmień na:

LiquidCrystal_I2C lcd(0x27, 16, 2);

I napisz czy działa.

  • Lubię! 1
Link to post
Share on other sites

Moze dlatego ze jesli "przycisk" ma 2 to wyswietlasz gwiazdki, po delay(100) kasujesz i wyswietlasz to co masz na poczatku loop() i tak w kolko...poprostu za szybko..

  • Pomogłeś! 1
Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

(edytowany)

Ja bym to uproscil...robisz dwie tablice, w jednej na sztywno wpisane haslo, do drugiej zapisujesz to co wciskasz...w warunku sprawdzasz jaki klawisz wcisniety. Po uzyskaniu odpowiedniej ilosci znakow porownujesz tablice i odpowiednio interpretujesz...

Edit..poza tym takie rozwiazanie daje Ci mozliwosc zmiany hasla z poziomu arduino i zapisu do eepromu..

Edytowano przez farmaceuta
  • Pomogłeś! 1
Link to post
Share on other sites
24 minuty temu, Dam_elektronik napisał:

@farmaceuta zmieniłem z lcd.write na lcd.print i dziła

nie pamietam juz ale chyba "write" sluzy do wyswietlania pojedynczego bajtu??/bitmapy??...moge glupoty gadac...no ale do zwyklych napisow to "print" z regoly sie uzywa..

  • Lubię! 1
Link to post
Share on other sites
1 godzinę temu, farmaceuta napisał:

nie pamietam juz ale chyba "write" sluzy do wyswietlania pojedynczego bajtu

Dobrze pamiętasz. write() wypisuje pojedynczy bajt.

  • Lubię! 2
Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.