Využij akce až 30 % zdarma při nákupu e-learningu. Více informací. Zároveň je tento týden sleva až 80 % na e-learning týkající se C# .NET
Hledáme nového kolegu do redakce - 100% home office, 100% flexibilní pracovní doba. Více informací.
Avatar
peter
Člen
Avatar
peter:19.12.2019 0:54

Zdravím,
už dlhší čas si neviem dať rady s displejom I2C. Nedokážem pochopiť tomu, že prečo mi nefunguje pri určitých úlohách. Neviem naprogramovať to, aby mi ukazoval teplotu z BMP180 snímaču a naozaj ma to už hnevá. V tomto programovaní som úplný začiatočník a neviem urobiť viac menej absolútne nič.

Používam na to dosku Node Mcu Base Ver 1.0 s ESP8266Modulom
káble sú duponty
snímaš= BMP 180
a LED displej 20x4 I2C

/* http://www.electronoobs.com */

/*-----( Inport library )-----*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_BMP085.h>

Adafruit_BMP085 bmp;
//i2c pins
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //


void setup()
{
  Serial.begin(9600);
  if (!bmp.begin()) {
  Serial.println("Could not find a valid BMP085 sensor, check wiring!");
  while (1) {}
//WE define our LCD 16 columns and 2 rows
lcd.begin(16,2);
lcd.backlight();//Power on the back light
//lcd.backlight(); Power off the back light

}}

void loop()
{
//Write your text:
lcd.setCursor(0,0); //we start writing from the first row first column
lcd.print("Temperature = "); //16 characters poer line
lcd.print(bmp.readTemperature());
lcd.println(" *C");
delay(1000);//Delay used to give a dinamic effect
}

Zkusil jsem: skúšal som rôzne príklady, ale displej mi žiadne hodnoty nenačítal

Chci docílit: Snažím sa dosiahnúť toho, aby mi tento displej ukazoval teplotu a tlak, ktorý sníma BMP 180 snímač

 
Odpovědět
19.12.2019 0:54
Avatar
Odpovídá na peter
Erik Šťastný:19.12.2019 8:53

Ehm?

while (1) {}
 
Nahoru Odpovědět
19.12.2019 8:53
Avatar
peter
Člen
Avatar
Odpovídá na Erik Šťastný
peter:19.12.2019 9:07

Teraz som si toho všimol, môžem to asi vymazať. Či?

 
Nahoru Odpovědět
19.12.2019 9:07
Avatar
Odpovídá na peter
Erik Šťastný:19.12.2019 9:22

No neznám Arduino, třeba to překladače nějak vyhodí nebo něco, ale v normálním programu se ti to na tomto místě zasekne a nikdy nepůjde dál.

 
Nahoru Odpovědět
19.12.2019 9:22
Avatar
peter
Člen
Avatar
Odpovídá na Erik Šťastný
peter:19.12.2019 9:26

No skúsim teda...

 
Nahoru Odpovědět
19.12.2019 9:26
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na peter
Petr Štechmüller:19.12.2019 10:17

Ahoj, kdyby jsi si nechal správně zformátovat kód, tak bys na tu chybu určitě přišel sám.

void setup()
{
  Serial.begin(9600);
  if (!bmp.begin()) {
    Serial.println("Could not find a valid BMP085 sensor, check wiring!");
    while (1) {}
    //WE define our LCD 16 columns and 2 rows
    lcd.begin(16,2);
    lcd.backlight();//Power on the back light
    //lcd.backlight(); Power off the back light
  }
}

Display nefunguje nejspíš proto, že se neinicializuje ta knihovna Adafruit. Proto to vypíše chybovou hlášku a skončí to v nekonečné smyčce. Ta je tam správně, takže je hloupost ji mazat.

Editováno 19.12.2019 10:17
Nahoru Odpovědět
19.12.2019 10:17
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Odpovídá na Petr Štechmüller
Erik Šťastný:19.12.2019 11:52

Co je v ní správně? Vždyť v tom while true nic není? :D

 
Nahoru Odpovědět
19.12.2019 11:52
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na Erik Šťastný
Petr Štechmüller:19.12.2019 12:13

Jenže, když se ti nějaká komponenta neinicializuje, tak je hloupost pokračovat dále ve vykonání programu.

Nahoru Odpovědět
19.12.2019 12:13
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Erik Šťastný:19.12.2019 12:18

Aha, tak to pardon, nevěděl jsem, že v Arduinu je standard na zastavení programu, tam dát

while (1)
:O

Když kouknu na google, tak existuje

exit(0)
Editováno 19.12.2019 12:20
 
Nahoru Odpovědět
19.12.2019 12:18
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na Erik Šťastný
Petr Štechmüller:19.12.2019 13:39

A četl jsi si, co ta funkce udělá? :-P

exit is a system function that exits your app ( on arduino interrupts are disabled and an infinite loop locks the system ).

Nahoru Odpovědět
19.12.2019 13:39
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Erik Šťastný:19.12.2019 14:01

No četl a to je přesně ten důvod proč bych while(1) nepoužil.

  • První vec je, že to na víc deaktivuje interrupty
  • A druhá, že je to prostě nachystaná funkce pro tento účel. Co když se její implementace vylepší? Všude na netu jsou právě zmínky o tom, že by to na místo toho cyklu mělo čip do budoucna uvést do nějakého sleepu. V c++ taky používám nachystané funkce a nezkopíruju si jejich implementaci k sobě znovu. :)
 
Nahoru Odpovědět
19.12.2019 14:01
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.