Skocz do zawartości

Błąd kompilacji programu Arduino z DHT11 i LCD po I2C


pafff82

Pomocna odpowiedź

Witam !

mam problem z arduino, mianowicie postanowiłem podłączyć arduino z czujnikiem DHT11 i lcd i2c (schemat podłączenia i scetch poniżej) ale cały czas mi wywala : exit status 1 błąd kompilacji płytki arduino.

#include "DHT.h"
#include LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display
	#define DHTPIN 2 // sensor's Data pin
#define DHTTYPE DHT22 // sensor type
DHT dht(DHTPIN, DHTTYPE);
	void setup() {
  Serial.begin(9600);
  Serial.println("Initializing...");
	  // initialize the LCD
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Initializing...");
	  dht.begin();
}
	void loop() {
  float h = dht.readHumidity();
  float c = dht.readTemperature();  // Celsius
  float f = dht.readTemperature(true);  // Fahrenheit
	  if (isnan(h) || isnan(c) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
	  lcd.setCursor(0, 0);
  lcd.print("T: ");
  lcd.print(c, 1);  // print only one decimal digit due to limited space
  lcd.print("C | ");
  lcd.print(f, 1);  // print only one decimal digit due to limited space
  lcd.print("F");
	  lcd.setCursor(0, 1);
  lcd.print("H: ");
  lcd.print(h);
  lcd.print("%");
	  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(c);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  delay(2000);
}

Proszę o pomoc i wyrozumiałość dopiero zaczynam przygodę z elektroniką.

1.jpg 0.jpg

Link do komentarza
Share on other sites

@pafff82, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

15 minut temu, pafff82 napisał:

Proszę o pomoc i wyrozumiałość dopiero zaczynam przygodę z elektroniką.

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.

Jeśli chodzi o Twój program, to na pewno błędna jest ta linijka:

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

Coś tu nie gra, nie pomyliłeś się podczas kopiowania? Wygląda jakbyś połączyć dwie linijki w jedną - dodanie biblioteki i deklarację wyświetlacza.

Link do komentarza
Share on other sites

Generalnie, sterowanie równoległym LCD przez ekspander I2C to zły pomysł zwłaszcza jak jest to powolny, 8bit PCF8574.

- Masz dużo wolnych wyprowadzeń, podłącz LCD bezpośrednio do GPIO uC

- Jeśli koniecznie chcesz I2C, to użyj wyświetlacza, który komunikuje sie po I2C, ostatecznie użyj szybkiego (np 400kHz a nie 100 jak PCF8574) 16-bit ekspandera.

Z szybkości komunikacji z wyświetlaczem 40x4 przez 8-bit ekspander 100kHz nie będziesz zadowolony. Jak dobrze pamiętam, odświeżenie całego wyświetlacza to aż 0,7 sekundy! W 99% biblioteki obsługi LCD przez I2C ekspander nie używają przerwań, to oznacza, ze program będzie "wisiał" w czasie komunikacji.

Edytowano przez es2
Link do komentarza
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

No i co z tego? Kogo obchodzi, że układ będzie wolno odświeżał temperaturę albo wilgotność mierzone raz na kilka sekund? Zadałeś sobie trud obejrzenia tego kodu? Przecież to jakiś termometr pokojowy spędzający większość czasu w delay, nie ma tu nic innego do roboty. Po co marudzić, narzekać i proponować budowę szybkiej transmisji czy szerokiego interfejsu równoległego skoro nikt nigdzie się nie spieszy? Wiele "równoległych" wyświetlaczy znakowych jest sprzedawanych już na starcie z dospawaną  przejściówką I2C, mnóstwo ludzi tego używa bo po prostu nie trzeba nic więcej. Proponujesz człowiekowi który ledwo kleci jakiś układ kupowanie scalaków, robienie i oprogramowanie czegoś od zera tylko dlatego, że masz takie widzimisie? Z nudów trzeba pisać żeby istnieć?

Link do komentarza
Share on other sites

Po co przejściówka skoro jest zbędna? Może dodać moduł Wi-Fi, LCD podłączyć do PC przez przejściówkę USB LPT? Jak już, to na bogato a nie tylko niepotrzebny PCF8574.

A jak "ledwo kleci",to niech zacznie od migania ledem a nie od razu sterownik łazika marsiańskiego bo na razie, to widzę, że nie potrafi nawet użyć poprawnie CTRL+C i CTRL+V.

Edytowano przez es2
Link do komentarza
Share on other sites

Kolego es2 - podejrzewam, że istnieje w cholerę rzeczy  na których się nie znasz. I podejrzewam, że elektronika (praktyczna, a nie teoria konstruowania zajefajnych układów) jest jedną z nich.

Zastanów się, ile czasu trzeba na odświeżenie całego displaya, a ile na jego odczytanie... jeśli przeczytasz cztery linie po 20 znaków w 0.7 sekundy to jesteś niezły gość,

Link do komentarza
Share on other sites

(edytowany)

Poprawiłem linie o której mówił Treker i w dalszym ciągu wyskakuje to samo,więc w wolnej chwili posprawdzam wszystko jeszcze raz.

Co do wpisu es2 dotyczącego i2c w lcd to myślę, że Marek1707 wyczerpał temat za co mu z góry dziękuję.

Chcę przez zabawę z arduino czegoś się nauczyć i coś fajnego zbudować.

2 godziny temu, es2 napisał:

A jak "ledwo kleci",to niech zacznie od migania ledem a nie od razu sterownik łazika marsiańskiego bo na razie, to widzę, że nie potrafi nawet użyć poprawnie CTRL+C i CTRL+V.

Zaskoczę Cię es2, miganie ledem, hello world,a także inne projekty dla początkujących i poprawne użycie  CTRL+C i CTRL+V przerobiłem.

P.S. tabelki w Excelu też umiem jakby co 🙂

Pozdrawiam

Edytowano przez pafff82
Link do komentarza
Share on other sites

2 minuty temu, pafff82 napisał:

Poprawiłem linie o której mówił Treker i w dalszym ciągu wyskakuje to samo,więc w wolnej chwili posprawdzam wszystko jeszcze raz.

Co do wpisu es2 dotyczącego i2c w lcd to myślę, że Marek1707 wyczerpał temat za co mu z góry dziękuję.

Chcę przez zabawę z arduino czegoś się nauczyć i coś fajnego zbudować.

Zaskoczę Cię es2, miganie ledem, hello world,a także inne projekty dla początkujących i poprawne użycie  CTRL+C i CTRL+V przerobiłem.

P.S. tabelki w Excelu też umiem jakby co 🙂

Pozdrawiam

Arduino ma ustawiony odpowiedni NR COM ??

 

Link do komentarza
Share on other sites

Zmieniłeś linię... to może zmień na prawidłową (o której pisał Mrpatryk)? Jest duża szansa że zadziała 😉

BTW próba pisania czy nawet uruchamiania programu bez znajomości języka, w którym ów program jest napisany skazana jest na niepowodzenie. To jest tak jakbym chciał się dogadać z anglikiem znając polski, polski i jeszcze z obcych języków polski 😉

Link do komentarza
Share on other sites

z tego co rzuciłem oko na kod to chyba biblioteka DHT nie obsługuje read tylk GET chyba. zmień i sprawdz 🙂

6 minut temu, pafff82 napisał:

Wstawiłem tą co podał Mrpatryk,ale brak rezultatów.

Program pobrałem z sieci i nie modyfikowałem go.

 

sprawdz pod jaki port COM masz podpiete arduino

Link do komentarza
Share on other sites

3 godziny temu, ethanak napisał:

jeśli przeczytasz cztery linie po 20 znaków w 0.7 sekundy to jesteś niezły gość,

"Niestety" nie ja. Takie "genialne" kody znalazłem dla Arduio. Nie pamiętam autora biblioteki bo złych rozwiązań nie należy zapamiętywać.

Swego czasu na jakim forum porównywałem szybkość obsługi i LCD  sterowanego z PCF8574 a z wbudowanym kontrolerem. Przy skrajnie złej bibliotece było to 0,7 sekundy przy dobrej, która niekonieczne zachowuje wymagane czasy sygnału E będzie to prawie 30 ms:

1/1e5*9*2*160  100kHz * 9-bit na transmisję * 2 bajty na jedną daną * 160 znaków

Liczyłem same dane, bez adresowania i komendy ustawienia adresu CGRAM. Taka obsługa, bez zachowania poprawnych zależności sygnału E  z niektórymi wyświetlaczami nie zadziała! Aby mieć taka gwarancję, należałoby zwiększyć liczbę transmisji czterokrotnie co daje 120ms.

Dla porównania, czas transmisji do LCD ze sterownikiem I2C to trochę ponad 3,6ms:

1/4e5*9*162

i to razem z adresowaniem i komendą ustawiającą adres CGRAM. Wy Arduinowcy, nie dość, ze macie wolne uC, to jeszcze marnujecie czas na niepotrzebne transmisje, naturalnie bez przerwań przez co pętla główna wykonuje się, nawet z millis, po 500ms, przez co, np reakcja na klawiaturę jest żałosna czy 64 bajtowy FIFO od USART jest przepełniany.

Jak się nie umie pisać programów, to trzeba użyć RTOS, odpalić 10 wątków i nie ma problemu z sleep czy długimi transmisjami do LCD.

 

3 godziny temu, ethanak napisał:

na których się nie znasz. I podejrzewam, że elektronika (praktyczna, a nie teoria konstruowania zajefajnych układów) jest jedną z nich.

Faktycznie gdy liczy się projekty w setkach to jest jeszcze teoria. Ile muszę zrealizować aby to już nie była teoria? Tysiące?  Ile kolega projektów zrealizował?

 

2 godziny temu, Mrpatryk napisał:

z tego co rzuciłem oko na kod to chyba biblioteka DHT nie obsługuje read tylk GET

To jest "urok" Arduino. Dziesięć bibliotek o tej samej nazwie a w nich różnie nazwane funkcje albo brak niektórych.

 

Edytowano przez es2
Link do komentarza
Share on other sites

Była taka teoria, która mówiła, że "ilość przechodzi w jakość". Ale chyba nieszczególnie się sprawdziła.

Proponuję zamiast robić z tego forum linkedin-a i przechalać się swoimi osiągnięciami, skupić się na tym co tutaj jest istotne - czyli pomaganiu innym. A trolowanie przenieść na inne fora.

Link do komentarza
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.