neděle 17. ledna 2016

Problém s knihovnou LiquidCrystal_I2C

Tahle knihovna je určená ke komunikaci s řadičem pro 4 a 2 řádkové LCD displaye po sběrnici I2C. To přináší řadu výhod (například netřeba tahat tolik drátů).
Bohužel knihovna je staršího data a má problémy s novější řadou IDE. Kdy po zkompilování a nahrání do Arduina funkce:
 print("Ahoj světe"); 
Vypíše pouze první znak tedy písmeno A. To je bohužel dost velká vada. Naštěstí není zase takový problém jí opravit.

Takže postup je následující!

  • Najdeme si soubor LiquidCrystal_I2C.cpp najdeteho nejspíš někde v dokumentech ve složce kde má Arduino IDE uložené importované knihovny.
  • Soubor otevřete v nějaké příhodném editoru (PSPad, Notepad2 atd.).
  • Najdeme si tuto část kódu: 

inline size_t LiquidCrystal_I2C::write(uint8_t value) { send(value, Rs); return 0;}

  • Hodnotu return 0; změníme na return 1; 
  • Uložíme a jdeme si dát mrkvičku!
A máme hotov!



pondělí 11. ledna 2016

LCD 2x16 zobrazující teplotu

Jednoduchý LCD 2x 16 znaků zobrazující teplotu z teplotního senzoru DHT 11.


#include <dht11.h> // importuje naši novou knihovnu DHT11
#include <LiquidCrystal.h> // knihovn k LCD display

//vytvoří objekt DHT11 s názvem MojeCidlo
dht11 MojeCidlo; //
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
pinMode(13, OUTPUT);
Serial.begin(9600);
lcd.begin(16,2);
}

void loop() {
int stavrele = digitalRead(13);
MojeCidlo.read(10); // přečte údaje z čidla DTH11 připojeného na pin 0
int teplota = MojeCidlo.temperature; // přečte hodnotu z A0
int vlhkost = MojeCidlo.humidity;
lcd.clear();

//podmínky pro zapínání a vypinání čerpadla
if (stavrele == LOW)
{
if (teplota > 75){
digitalWrite(13,HIGH);

}
else
{}
}
else
{
if (teplota < 60)
{
digitalWrite(13,LOW);
}
else
{}
}




//Pro kontrolu tu máme sériový výstup
// Serial.print("Teplota: \n\r");
// Serial.print(teplota);
// Serial.print(" oC\n\r");
// Serial.print("Vlhkost: \n\r");
// Serial.print(vlhkost);
// Serial.print(" % \n\r");
lcd.setCursor(0,0);
lcd.print("Teplota: ");
lcd.print(teplota);
lcd.print(" oC");
lcd.setCursor(0,1);
lcd.print("Vlhkost: ");
lcd.print(vlhkost);
lcd.print("%");

delay(1000); // čekej 1000ms
}