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


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Błąd biblioteki LiquidCrystal_I2C
#1
Cześć, 

Jestem graczem ASG, znalazłem poradnik jak zbudować atrapę bomby na rozgrywki w Internecie wraz z całym schematem oraz skryptem, i o ile podłączenie wszystkiego do kupy nie sprawiło mi problemu tak wgranie programu już tak.
Mianowicie mam problem z biblioteką LiquidCrystal_I2C... Gość niestety w poradniku nie napisał z jakich bibliotek korzystał. Szukam i czytam, wgrywam nowe biblioteki, testuje ale nie potrafię rozwiązać tego problemu sam. Macie może jakąś radę jak dobrać tą bibliotekę? 

Program:

Kod:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>

#define BACKLIGHT_PIN 3

int e;
int p=0;
char t;
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7);

const byte wiersze= 4; //ilosc wierszy
const byte kolumny= 4; //ilosc kolumn

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

byte wiersze_piny[wiersze] = {9,8,7,6};//{0,1,2,3};
byte kolumny_piny[kolumny] = {5,4,3,2};//{4,5,6,7};

Keypad myKeypad= Keypad(makeKeymap(mapaklawiszy), wiersze_piny, kolumny_piny,wiersze, kolumny);


volatile int l=0;
int mykey[4];
int haslo[4];
int zapis_h[4]={-2,-2,-2,-2};
void setup()
{
Serial.begin(9600);
lcd.begin (16,2);
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);

pinMode(10,OUTPUT);

pinMode(A0,INPUT_PULLUP);
pinMode(A1,INPUT_PULLUP);

lcd.home();
lcd.print("   GOTOWY ???    ");
lcd_czas_zero();
lcd_haslo_zero();

}

void loop()
{

int test=0;
char wybor;

wybor=myKeypad.getKey();

switch(wybor)
{
case 'A': //case '1':
{
opcja1();
}
break;

case 'C': //case '1':
{
lcd.setCursor(0,0);
lcd.print("ARE YOU READY ?  ");
lcd_czas_zero();
lcd_haslo_zero();
}
break;
}
}

int opcja1()
{
lcd_czas_zero();
lcd_haslo_zero();
lcd.setCursor(0,0);
lcd.print("  Ust. CZAS   ");
Serial.println("case 1");
jaki_czas();
}


int czas(int j, int i)
{

boolean czy=false;

lcd.setCursor(0,0);
lcd.print("   Ust. HASLO   ");

Serial.println("HASLO");
l=0;
haslo_glowne();

lcd.setCursor(0,0);
lcd.print(" ");

start_czas();

i=i*10;
 
while(j>-1)//(int x=j+1;j>-1;x--)
{

for(int y=i;y>-1;y--)
{
if(j<10)
{
lcd.setCursor(2,1);
lcd.print("0");
lcd.setCursor(3,1);
lcd.print(j);
}
else
{
lcd.setCursor(2,1);
lcd.print(j);
}
lcd.setCursor(4,1);
lcd.print(":");

if(y<100)
{
lcd.setCursor(5,1);
lcd.print("0");
lcd.setCursor(6,1);
lcd.print(y/10);
}
else
{
lcd.setCursor(5,1);
lcd.print(y/10);
}

if(y<100 & j==0)
{
lcd.setCursor(5,1);
lcd.print("0");
lcd.setCursor(6,1);
lcd.print(y/10);
if(y%10 == 0)
{
digitalWrite(10,HIGH);
lcd.noDisplay();
}
}
else if(y<100)
{
lcd.setCursor(5,1);
lcd.print("0");
lcd.setCursor(6,1);
lcd.print(y/10);
}
else
{
lcd.setCursor(5,1);
lcd.print(y/10);
}

test_haslo();

float odczyt1 = analogRead(A0);
float odczyt2 = analogRead(A1);


if(odczyt1 >1000.00 && odczyt2 >1000.00)
{

if(haslo[0]==zapis_h[0] && haslo[1]==zapis_h[1] && haslo[2]==zapis_h[2] && haslo[3]==zapis_h[3])
{
Serial.println("HASLO POPRAWNE");
lcd.display();
digitalWrite(10,LOW);
lcd.setCursor(4, 1);
czy=true;
break;
}
}
if(zapis_h[0]>-1 && zapis_h[1]>-1 && zapis_h[2]>-1 && zapis_h[3]>-1)
{
zapis_h[0]=-1;
zapis_h[1]=-1;
zapis_h[2]=-1;
zapis_h[3]=-1;
Serial.println("HASLO NIE POPRAWNE");
lcd_haslo_zero();
}

delay(70);
lcd.display();
digitalWrite(10,LOW);
delay(30);
}

float odczyt1 = analogRead(A0);
float odczyt2 = analogRead(A1);

if(odczyt1 >1000.00 && odczyt2 >1000.00)
{
if(haslo[0]==zapis_h[0] && haslo[1]==zapis_h[1] && haslo[2]==zapis_h[2] && haslo[3]==zapis_h[3])
{
Serial.println("HASLO POPRAWNE");
lcd.display();
digitalWrite(10,LOW);
lcd.setCursor(4, 1);
czy=true;
break;
}
}
i=600;
j=j-1;
}
int o=0;

if(czy)
{
lcd.setCursor(0, 0);
lcd.print("HASLO. POPRAWNE ");
while(o<3)
{
digitalWrite(10,HIGH);
delay(200);
digitalWrite(10,LOW);
delay(200);
o++;
}

}
else
{
lcd.setCursor(0, 0);
lcd.print("   BOOOOOM!!!   ");
digitalWrite(10,HIGH);
delay(5000);
digitalWrite(10,LOW);
}
 
}

//wyswietlenie czasu ktory jest nieznany
int lcd_czas_zero()
{
lcd.setCursor(0,1);
lcd.print("T~--:--");
}
//wyswietlenie hasła ktore jest nieznane
int lcd_haslo_zero()
{
lcd.setCursor(10,1);
lcd.print("H~****");
}

int jaki_czas()
{

lcd_czas_zero();

int i,j;

for(int q=0;q<4;q++)
{
mykey[q]=0;
}

i=0;
j=0;
l=0;

while(l<4)
{

char keypressed = myKeypad.getKey();
if (keypressed)
{
mykey[l]=keypressed-'0';
if(l<=1)
{
lcd.setCursor(l+2,1);
lcd.print(mykey[l]);
}
else
{
lcd.setCursor(l+3,1);
lcd.print(mykey[l]);
}
l++;
Serial.println(keypressed);
}
}

i=(mykey[0]*10)+mykey[1];//i=((mykey[0]-'0')*10)+(mykey[1]-'0');
j=(mykey[2]*10)+mykey[3];// j=((mykey[2]-'0')*10)+(mykey[3]-'0');

lcd.setCursor(0,0);
lcd.print("               ");

while(l!=66)
{
l=myKeypad.getKey();
if(l==67)
{
jaki_czas();
}
}

czas(i,j);

}

int start_czas()
{
int l=0;
while(l!=35)
{
l=myKeypad.getKey();
}
lcd.setCursor(0,0);
lcd.print(" START ");
Serial.println("START");
}


int haslo_glowne()
{
lcd_haslo_zero();
l=0;
while(l<4)
{
char keypressed_1 = myKeypad.getKey();
if (keypressed_1) //if (keypressed != NO_KEY)
{
haslo[l]=keypressed_1-'0';
lcd.setCursor(l+12,1);
lcd.print(haslo[l]); 
l++;
}
}
while(l!=35)
{
l=myKeypad.getKey();
Serial.println("2 while");
if(l==67) //C = 67, B=66
{
haslo_glowne();
}
}
lcd_haslo_zero();
Serial.println("HASLO ZAPISANE");
}

int test_haslo()
{

int keypressed_2 = 0;

if(zapis_h[0]==-1)
{
p=0;
}

keypressed_2 = myKeypad.getKey()-'0';

if( p<4 && keypressed_2>0 )
{
zapis_h[p]=keypressed_2;
lcd.setCursor(p+12,1);
lcd.print(zapis_h[p]); 
p++;
}
}

Oraz komunikat błędu:
Kod:
Arduino:1.8.19 (Windows Store 1.8.57.0) (Windows 10), Płytka:"Arduino Uno"





















sketch_may26a:10:41: error: no matching function for call to 'LiquidCrystal_I2C::LiquidCrystal_I2C(int, int, int, int, int, int, int, int)'

LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7);

                                         ^

In file included from C:\Users\grabe\Documents\Arduino\sketch_may26a\sketch_may26a.ino:2:0:

C:\Users\grabe\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:57:3: note: candidate: LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, uint8_t)

   LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows);

   ^~~~~~~~~~~~~~~~~

C:\Users\grabe\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:57:3: note:   candidate expects 3 arguments, 8 provided

C:\Users\grabe\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:55:7: note: candidate: constexpr LiquidCrystal_I2C::LiquidCrystal_I2C(const LiquidCrystal_I2C&)

class LiquidCrystal_I2C : public Print {

       ^~~~~~~~~~~~~~~~~

C:\Users\grabe\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:55:7: note:   candidate expects 1 argument, 8 provided

C:\Users\grabe\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:55:7: note: candidate: constexpr LiquidCrystal_I2C::LiquidCrystal_I2C(LiquidCrystal_I2C&&)

C:\Users\grabe\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:55:7: note:   candidate expects 1 argument, 8 provided

C:\Users\grabe\Documents\Arduino\sketch_may26a\sketch_may26a.ino: In function 'void setup()':

sketch_may26a:37:6: error: 'class LiquidCrystal_I2C' has no member named 'setBacklightPin'; did you mean 'setBacklight'?

  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);

      ^~~~~~~~~~~~~~~

      setBacklight

sketch_may26a:37:36: error: 'POSITIVE' was not declared in this scope

  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);

                                    ^~~~~~~~

exit status 1

no matching function for call to 'LiquidCrystal_I2C::LiquidCrystal_I2C(int, int, int, int, int, int, int, int)'



Ten raport powinien zawierać więcej informacji jeśli w
File -> Preferencje zostanie włączona opcja "Pokaż
szczegółowe informacje podczas kompilacji"

Poradnik jest z 2016 (nie wiem czy ma to jakieś znaczenie), jakaś rada jak próbować znaleźć tą bibliotekę?
 
Odpowiedź
#2
Są biblioteki, gdzie możesz podać piny przypisane do adaptera I2C, są takie, które mają jedno ustawienie. Znasz adres to zamień tę linię na:
LiquidCrystal_I2C lcd(0x27);
Ale kolejne funkcje z tej biblioteki mogą się inaczej nazywać, więc możliwe że to daleko nie pomoże, trzeba otworzyć swoja bibliotekę, zobaczyć jakie są funkcje, jakie mogą mieć argumenty, przeanalizować przykłady i odpowiednio wszystko podmieniać. Albo szukać dalej.
I dalej od razu widać kolejny błąd, bo biblioteka nie ma lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);.
Ale składając te dwie informacje do kupy w Google znajduje to: https://github.com/esp8266/Basic/tree/ma...uidCrystal
Ta biblioteka ma funkcję do ustawienia osobno pinu backlightpin.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości