• 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
Biblioteka LiquidCrystal_I2C.h
#1
Witam
Mam problem z bibliotekom LiquidCrystal_I2C. chciałem zmienić piny LCD z PCF8574 czy jest to możliwe.
Korzystam Arduino IDE 1.8.0.Próby zmiany :
//LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address
//LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7);
//LiquidCrystal_I2C  lcd(2,1,0,4,5,6,7);
kończą się niepowodzeniem.
Zrobiłem sobie płytkę w której inaczej zrobiłem połączenia z LCD dla wygody bo myślałem że nie będzie problemu a jednak jest.
Proszę o pomoc.
 
Odpowiedź
#2
Jak chcesz pomocy to pisz konkretnie co, gdzie, kiedy i dlaczego.
Nikt nie będzie się domyślał z której biblioteki korzystasz i jak zmieniłeś połączenia.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#3
Kod:
//LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address
//LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7);
//LiquidCrystal_I2C  lcd(2,1,0,4,5,6,7);

W pierwszej linijce jest ok. Jest adres , wyjścia są przypisane i podświetlenie tez jest.
 W drugiej linijce brakuje podświetlenia LCD.
Natomiast w trzeciej linijce niema ani adresu, ani podświetlenia.

Ten kod co podałeś jest podany jako komentarz do kodu.
 
Odpowiedź
#4
Właśnie też tak myślałem że pierwsza jest ok ale wywala błąd TongueOSITIVE was not in scope
 
Odpowiedź
#5
(19-03-2017, 21:41)sylwunia35 napisał(a): Właśnie też tak myślałem że pierwsza jest ok ale wywala błąd TongueOSITIVE was not in scope

Wstaw całość kodu zobaczymy co jest nie w hallo
 
Odpowiedź
#6
(19-03-2017, 23:16)ferdricco napisał(a):
(19-03-2017, 21:41)sylwunia35 napisał(a): Właśnie też tak myślałem że pierwsza jest ok ale wywala błąd TongueOSITIVE was not in scope

Wstaw całość kodu zobaczymy co jest nie w hallo

#include <PCF8574.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Set the pins on the I2C chip used for LCD connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
sLiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address
//LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7);
//LiquidCrystal_I2C  lcd(2,1,0,4,5,6,7);
//LiquidCrystal_I2C lcd(0x3C, 16, 2);
//LiquidCrystal_I2C lcd(0x4E/2, 2, 1, 0, 4, 5, 6, 7, 3);  // konfigurujemy wyś
//LiquidCrystal_I2C lcd(0x4E/2, 2, 1, 0, 4, 5, 6, 7, 3);  // konfigurujemy wyświetlacz na modzule I2C
PCF8574 expander1; //PCF8574 expander2;
PCF8574 expander3;
// LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
void setup()
{  
   lcd.begin();
   lcd.begin(16,2);   // initialize the lcd for 16 chars 2 lines, turn on backlight

   lcd.setCursor(0,0);
   lcd.print(" Centrala HB5 !");
    delay(2000);
   expander1.begin(0x38);//klawiatura
   //expander2.begin(0x3C);//wyswietlacz
   expander3.begin(0x3E);//ledy
   expander1.pinMode(0, OUTPUT);
   //expander2.pinMode(0, OUTPUT);
   expander3.pinMode(0, OUTPUT);
}

void loop()
{
 lcd.setCursor(1,1);
   lcd.print(" Centrala HB5 !");
    //expander.clear();
  expander1.digitalWrite(0, LOW);
//   expander2.digitalWrite(0, LOW);
  expander3.digitalWrite(0, LOW);
  delay(1000);
  expander1.digitalWrite(0, HIGH);
 // expander2.digitalWrite(0, HIGH);
  expander3.digitalWrite(0, HIGH);
  //expander.set();
  delay(500);
}
Dodam iż na takim kupnym konwerterze bez tej nili działa
 
Odpowiedź
#7
(19-03-2017, 23:39)sylwunia35 napisał(a):
(19-03-2017, 23:16)ferdricco napisał(a):
(19-03-2017, 21:41)sylwunia35 napisał(a): Właśnie też tak myślałem że pierwsza jest ok ale wywala błąd TongueOSITIVE was not in scope

Wstaw całość kodu zobaczymy co jest nie w hallo

#include <PCF8574.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Set the pins on the I2C chip used for LCD connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
sLiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address
//LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7);
//LiquidCrystal_I2C  lcd(2,1,0,4,5,6,7);
//LiquidCrystal_I2C lcd(0x3C, 16, 2);
//LiquidCrystal_I2C lcd(0x4E/2, 2, 1, 0, 4, 5, 6, 7, 3);  // konfigurujemy wyś
//LiquidCrystal_I2C lcd(0x4E/2, 2, 1, 0, 4, 5, 6, 7, 3);  // konfigurujemy wyświetlacz na modzule I2C
PCF8574 expander1; //PCF8574 expander2;
PCF8574 expander3;
// LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
void setup()
{  
   lcd.begin();
   lcd.begin(16,2);   // initialize the lcd for 16 chars 2 lines, turn on backlight

   lcd.setCursor(0,0);
   lcd.print(" Centrala HB5 !");
    delay(2000);
   expander1.begin(0x38);//klawiatura
   //expander2.begin(0x3C);//wyswietlacz
   expander3.begin(0x3E);//ledy
   expander1.pinMode(0, OUTPUT);
   //expander2.pinMode(0, OUTPUT);
   expander3.pinMode(0, OUTPUT);
}

void loop()
{
 lcd.setCursor(1,1);
   lcd.print(" Centrala HB5 !");
    //expander.clear();
  expander1.digitalWrite(0, LOW);
//   expander2.digitalWrite(0, LOW);
  expander3.digitalWrite(0, LOW);
  delay(1000);
  expander1.digitalWrite(0, HIGH);
 // expander2.digitalWrite(0, HIGH);
  expander3.digitalWrite(0, HIGH);
  //expander.set();
  delay(500);
}
Dodam iż na takim kupnym konwerterze bez tej nili działa

Czy ty w ogóle rozumiesz ten kod???
Wiesz co oznacza taki znak "//"???
 
Odpowiedź
#8
(20-03-2017, 00:54)ferdricco napisał(a):
(19-03-2017, 23:39)sylwunia35 napisał(a):
(19-03-2017, 23:16)ferdricco napisał(a):
(19-03-2017, 21:41)sylwunia35 napisał(a): Właśnie też tak myślałem że pierwsza jest ok ale wywala błąd TongueOSITIVE was not in scope

Wstaw całość kodu zobaczymy co jest nie w hallo

#include <PCF8574.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Set the pins on the I2C chip used for LCD connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
sLiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address
//LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7);
//LiquidCrystal_I2C  lcd(2,1,0,4,5,6,7);
//LiquidCrystal_I2C lcd(0x3C, 16, 2);
//LiquidCrystal_I2C lcd(0x4E/2, 2, 1, 0, 4, 5, 6, 7, 3);  // konfigurujemy wyś
//LiquidCrystal_I2C lcd(0x4E/2, 2, 1, 0, 4, 5, 6, 7, 3);  // konfigurujemy wyświetlacz na modzule I2C
PCF8574 expander1; //PCF8574 expander2;
PCF8574 expander3;
// LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
void setup()
{  
   lcd.begin();
   lcd.begin(16,2);   // initialize the lcd for 16 chars 2 lines, turn on backlight

   lcd.setCursor(0,0);
   lcd.print(" Centrala HB5 !");
    delay(2000);
   expander1.begin(0x38);//klawiatura
   //expander2.begin(0x3C);//wyswietlacz
   expander3.begin(0x3E);//ledy
   expander1.pinMode(0, OUTPUT);
   //expander2.pinMode(0, OUTPUT);
   expander3.pinMode(0, OUTPUT);
}

void loop()
{
 lcd.setCursor(1,1);
   lcd.print(" Centrala HB5 !");
    //expander.clear();
  expander1.digitalWrite(0, LOW);
//   expander2.digitalWrite(0, LOW);
  expander3.digitalWrite(0, LOW);
  delay(1000);
  expander1.digitalWrite(0, HIGH);
 // expander2.digitalWrite(0, HIGH);
  expander3.digitalWrite(0, HIGH);
  //expander.set();
  delay(500);
}
Dodam iż na takim kupnym konwerterze bez tej nili działa

Czy ty w ogóle rozumiesz ten kod???
Wiesz co oznacza taki znak "//"???

Tak te znaki zostawiłem bo testowałem różne warianty ale dobra dam czysty kod
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // tu jest problem
void setup()
{
lcd.begin();
lcd.begin(16,2);
}
void loop()
{
lcd.setCursor(1,1);
lcd.print(" COS TAM ");
}
 
Odpowiedź
#9
(20-03-2017, 00:54)ferdricco napisał(a):
(19-03-2017, 23:39)sylwunia35 napisał(a):
(19-03-2017, 23:16)ferdricco napisał(a):
(19-03-2017, 21:41)sylwunia35 napisał(a): Właśnie też tak myślałem że pierwsza jest ok ale wywala błąd TongueOSITIVE was not in scope

Wstaw całość kodu zobaczymy co jest nie w hallo

#include <PCF8574.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Set the pins on the I2C chip used for LCD connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
sLiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address
//LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7);
//LiquidCrystal_I2C  lcd(2,1,0,4,5,6,7);
//LiquidCrystal_I2C lcd(0x3C, 16, 2);
//LiquidCrystal_I2C lcd(0x4E/2, 2, 1, 0, 4, 5, 6, 7, 3);  // konfigurujemy wyś
//LiquidCrystal_I2C lcd(0x4E/2, 2, 1, 0, 4, 5, 6, 7, 3);  // konfigurujemy wyświetlacz na modzule I2C
PCF8574 expander1; //PCF8574 expander2;
PCF8574 expander3;
// LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
void setup()
{  
   lcd.begin();
   lcd.begin(16,2);   // initialize the lcd for 16 chars 2 lines, turn on backlight

   lcd.setCursor(0,0);
   lcd.print(" Centrala HB5 !");
    delay(2000);
   expander1.begin(0x38);//klawiatura
   //expander2.begin(0x3C);//wyswietlacz
   expander3.begin(0x3E);//ledy
   expander1.pinMode(0, OUTPUT);
   //expander2.pinMode(0, OUTPUT);
   expander3.pinMode(0, OUTPUT);
}

void loop()
{
 lcd.setCursor(1,1);
   lcd.print(" Centrala HB5 !");
    //expander.clear();
  expander1.digitalWrite(0, LOW);
//   expander2.digitalWrite(0, LOW);
  expander3.digitalWrite(0, LOW);
  delay(1000);
  expander1.digitalWrite(0, HIGH);
 // expander2.digitalWrite(0, HIGH);
  expander3.digitalWrite(0, HIGH);
  //expander.set();
  delay(500);
}
Dodam iż na takim kupnym konwerterze bez tej nili działa

Czy ty w ogóle rozumiesz ten kod???
Wiesz co oznacza taki znak "//"???

Tak te znaki zostawiłem bo testowałem różne warianty ale dobra dam czysty kod
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // tu jest problem
//LiquidCrystal_I2C lcd(0x27, 16, 2);// a tak jest ok tyle że ja mam inaczej podłączony wyświetlacz do PCF
void setup()
{  
  lcd.begin();
  lcd.begin(16,2);
}
void loop()
{
 lcd.setCursor(1,1);
 lcd.print(" COS TAM ");
}
 
Odpowiedź
#10
Witam,
Myślę, że popełniłeś błąd myślowy. Nawet nie jeden, a wiele.
Jeśli masz ulicę (magistralę) i na tej ulicy masz domy o adresie 0x27 i 0x3C to nie ma problemu, żeby tam trafić. Ty chcesz dotrzeć do mieszkania (wyświetlacz) w domu o adresie 0x3C (expander) i w tym domu tego mieszkania należy szukać. Dodatkowo deklarujesz to mieszkanie: //LiquidCrystal_I2C lcd(0x3C, 16, 2); (biorąc oczywiście bez znaków komentarza) , a sam dom o adresie 0x3C budując dużo później: //expander2.begin(0x3C);//wyswietlacz. To najpierw stawiasz ściany mieszkania, czy też bloku w którym to mieszkanie ma być? Skąd kompilator ma wiedzieć, że rozkład mieszkań w domu 0x3C ma być identyczny jak dla 0x27? Na opak.
Pozdrawiam.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości