• 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ę.
 
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ź
  


Skocz do:


Przeglądający: 1 gości