• 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
Wyświetlacz LCD z konwerterem I2C nie wyświetla tekstu
#1
Witam serdecznie wszystkich,
mam taki problem, a mianowicie chodzi o problem z wyświetlaczem LCD. Tworzę projekt komputera pokładowego przy użyciu Arduino Uno z obrotomierzem do roweru przy użyciu poradnika na YT
 
https://youtu.be/prYAMnMPqTk?t=490

Ogólnie nie miałbym problemu z podłączeniem samemu, jednakże pierwszy raz korzystam z konwertera I2C do wyświetlacza LCD, więc nie byłem pewny na jakiej zasadzie to działa. Po podłączeniu wszystkiego przyszedł czas na testy. Podłączyłem zasilanie i wszystko działa, chociażby takie jest wrażenie, bo się świeci wyświetlacz. Ściągnąłem bibliotekę LiquidCrystal_I2C. Następnie wgrałem kod:


Kod:
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

const int hallPin = 2;
const unsigned long sampleTime = 5000;
const int maxRPM = 300;

void setup() {
  Serial.begin(9600);
  pinMode(hallPin, INPUT);
  lcd.begin(16, 2);
  lcd.print("Miernik kadencji");
  delay(5000);
  lcd.clear();
}

void loop() {
  delay(100);
  int rpm = getRPM();
  lcd.clear();
  displayRPM(rpm);
  displayBar(rpm);
}

float getRPM() { //int
  // sample for sampleTime in millisecs
  int count = 0;
  boolean flag = LOW;
  unsigned long currentTime = 0;
  unsigned long startTime = millis();
  while (currentTime <= sampleTime)  {
    if (digitalRead(hallPin) == HIGH) {
      flag = HIGH;
    }
    if (digitalRead(hallPin) == LOW && flag == HIGH) {
      count++;
      flag = LOW;
    }
    currentTime = millis() - startTime;
  }
  float count2rpm = int(60000. / float(sampleTime)) * count;
  return count2rpm;
}

void displayRPM(int rpm) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("RPM: ");
  lcd.print(rpm, DEC);
}

void displayBar(int rpm) {
  int numOfBars = map(rpm, 0, maxRPM, 0, 15);
  lcd.setCursor(0, 1);
  if (rpm != 0) {
    for (int i = 0; i <= numOfBars; i++)
    {
      lcd.setCursor(i, 1);
      lcd.write(1023);
    }
  }
}


Po kompilacji wyskoczył błąd

\obrotowa.ino: In function 'void displayBar(int)':
\obrotowa.ino:62:21: warning: large integer implicitly truncated to unsigned type [-Woverflow]


lecz wszystko się normalnie wgrało. Problem w tym, że na wyświetlaczu nie wyświetla się dosłownie nic, tylko się ciągle świeci. Postanowiłem więc wgrać jakiś najprostszy kod, aby sprawdzić czy to wina kodu, mianowicie taki:


Kod:
/*
*  LCM1602 & Arduino Uno
*  VCC - > 5 V
*  GND - GND
*  SCL -> A5
*  SDA -> A4
*/
#include <Wire.h>  // standardowa biblioteka Arduino
#include <LiquidCrystal_I2C.h> // dolaczenie pobranej biblioteki I2C dla LCD

LiquidCrystal_I2C lcd(0x27, 16, 2);  // Ustawienie adresu ukladu na 0x27


void setup()
{
lcd.begin();  // Inicjalizacja LCD
lcd.backlight(); // zalaczenie podwietlenia
lcd.setCursor(0,1);
lcd.print("Hello, world!"); //tekst

}

void loop()
{
  lcd.backlight(); // zalaczenie podswietlenia
  delay(5000);
  lcd.noBacklight(); // wylaczenie podswietlenia
  delay(5000);
}


Kod się wgrał, wyświetlacz wygaszał się i odpalał w pętli, jednak napisu jakiekolwiek dalej brak. Próbowałem podłączać SCL oraz SDA i do SCL oraz SDA na Arduino i tak jak w drugim kodzie do A4 i A5, ale nic to nie zmieniło.
 
Pytanie następujące - czy jest możliwość, że otrzymałem uszkodzony wyświetlacz i temu nie wyświetlają mi się teksty, czy jednak problem może tkwić gdzieś indziej lub robię coś źle i popełniam błąd. Wszystkie części dzisiaj zakupione.
  • Płytka Arduino Uno
  • Konwerter I2C dla wyświetlacza LCD HD44780
  • Wyświetlacz LCD 2x16 znaków niebieski ze złączami - justPi
  • 4 baterie AA 1.5V
 
Odpowiedź
#2
Może i jest uszkodzony, ale za wcześnie na taki wniosek. Na początek ustaw kontrast, jak się włącza podświetlenie to pewnie następne punkty nie będą potrzebne. Można to zrobić nawet bez tekstu, ale jak wgrałeś "Hello, World!" to właśnie taki napis powinieneś zobaczyć, tak na czuja to przekręcając potencjometr na płytce z jednej strony powinny być widoczne kwadraty i jak cofasz przekręcenie to przerywasz aż prawie znikną, podświetlenie powinno być włączone.
I2C daje adres każdemu urządzeniu na który wysyła dane, używasz adresu 0x27, sprawdź na jakim adresie masz urządzenie, jest taki programik do znalezienia w sieci i2cscanner. Ale w tym "Hello, World!" mozna też zmienić czas przełączania podświetlenia z 5s na 1, jak zmiana jest widoczna to wgrany program "gada" z LCD.
Konkretny wyświetlacz może mieć różnie podłączone piny do konwertera I2C, może masz nietypowy. Można to ustawić w bibliotece, trzeba przeanalizować ścieżki i piny LCD.
Na koniec wypróbuj inną bibliotekę.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
Gościu jesteś koksem, miałem rację, że nie mam zielonego pojęcia o tym konwerterze, a Ty miałeś rację, że wystarczyło pokręcić potencjometrem i jakimś cudem zaczęło działać. Dziękuję serdecznie za pomoc, temat do zamknięcia. Smile
 
Odpowiedź
#4
(10-02-2023, 00:15)kaczakat napisał(a): Można to zrobić nawet bez tekstu, ale jak wgrałeś "Hello, World!" to właśnie taki napis powinieneś zobaczyć, tak na czuja to przekręcając potencjometr na płytce z jednej strony powinny być widoczne kwadraty i jak cofasz przekręcenie to przerywasz aż prawie znikną, podświetlenie powinno być włączone.
Jestem nowy w arduino. Co jeśli nie mam potencjometra w płytce? Wyświetlacz pokazuje tylko jeden wiersz pełnych kwadracików, a drugi pusty. Wszystko jest dobrze podłączone, ale kwestia jest taka, że moja płyka do arduino D1 R1 i tam niektóre porty mają inne numerki, ale w kodzie nie widzę żeby jakiekolwiek port były używane.


Kod:
// C++ code
//
#include <Adafruit_LiquidCrystal.h>

Adafruit_LiquidCrystal lcd_1(0);

void setup()
{
  lcd_1.begin(16, 2);

  lcd_1.print("hello world");
}

void loop()
{
  delay(10); // Delay a little bit to improve simulation performance
}
 
Odpowiedź
#5
To nie jest płytka Arduino, tylko ESP8266, poszukaj przykładów LCD I2C dla ESP, trzeba zrobić wire begin dla wybranych pinów, można użyć którychkolwiek (prawie) bo tam nie ma I2C, jest emulowany programowo. A w związku z tym program może nie wiedzieć co masz na myśli.
Dla pewności sprawdziłbym na jakimś UNO czy ten wyświetlacz jednak coś pokazuje, bo nie każda biblioteka działa OK z ESP8266 na I2C.
Dziwny jakiś masz ten LCD, jak dopiero zaczynasz, to prędzej bym stawiał na to, że go nie widzisz.
Potencjometr to ta niebieska kostka:
   
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#6
(24-12-2023, 13:11)Bakak napisał(a): Jestem nowy w arduino. Co jeśli nie mam potencjometra w płytce? Wyświetlacz pokazuje tylko jeden wiersz pełnych kwadracików, a drugi pusty. Wszystko jest dobrze podłączone, ale kwestia jest taka, że moja płyka do arduino D1 R1 i tam niektóre porty mają inne numerki, ale w kodzie nie widzę żeby jakiekolwiek port były używane.

Owe kwadraty to normalny stan po włączeniu wyświetlacza, zanim zostanie wysterowany przez procka. Skoro je widzisz, to znaczy, że kontrast masz ustawiony na tyle poprawnie, by widzieć wyświetlaną treść. I skoro pozostają - to praktycznie znaczy, że nie masz "połączenia" z wyświetlaczem, czyli jakoś źle podałeś informacje o połączeniu tego wyświetlacza. Można go tak połączyć/sterować, że nie jest używana żadna informacja zwrotna i wtedy procek nie ma "pojęcia" czy sterowanie działa, czy nie, czy "nie macha sobie nóżkami w powietrzu".
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości