Jako začátečníci jste se určitě už setkali s ukázkovými programy pro jednotlivé moduly. Avšak další bod je kombinace jednotlivých příkladů do jednoho společného programu, abyste mohli například data ze senzoru teploty DHT11 zobrazit na OLED displeji.

Použil jsem moduly z těchto návodů:

https://navody.arduino-shop.cz/navody-k-produktum/teplotni-senzor-dht11.html
https://navody.arduino-shop.cz/navody-k-produktum/oled-displej-ssd1306.html


A právě tyto 2 moduly jsem vybral pro videonávod, kde komentuji celý postup:

Vytvořený ukázkový kód pak můžete stáhnout zde:

// Kombinace OLED displeje a DHT senzoru

////////// OLED
// připojení knihovny U8glib
#include "U8glib.h"

// inicializace OLED displeje z knihovny U8glib
U8GLIB_SSD1306_128X64 mujOled(U8G_I2C_OPT_NONE);

// proměnná pro uchování času poslední obnovy displeje
long int prepis = 0;

////////// DHT senzor
// připojení knihovny DHT
#include "DHT.h"
// nastavení čísla pinu s připojeným DHT senzorem
#define pinDHT 5

// odkomentování správného typu čidla
#define typDHT11 DHT11     // DHT 11
//#define typDHT22 DHT22   // DHT 22 (AM2302)

float tep;
float vlh;

// inicializace DHT senzoru s nastaveným pinem a typem senzoru
DHT mojeDHT(pinDHT, typDHT11);

void setup(void) {
  ////////// OLED
  // pro otočení displeje o 180 stupňů
  // stačí odkomentovat řádek níže
  // mujOled.setRot180();

  ////////// DHT senzor
  // zapnutí komunikace s teploměrem DHT
  mojeDHT.begin();
}

void loop(void) {
  // porovnání uloženého a aktuálního času
  // při rozdílu větším než 100 ms se provede
  // obnovení displeje, čas můžeme nastavit dle potřeby
  if (millis()-prepis > 250) {
    // následující skupina příkazů
    // obnoví obsah OLED displeje
    mujOled.firstPage();
    do {
      // funkce vykresli vykreslí žádaný obsah
      vykresli();
    } while( mujOled.nextPage() );
    // uložení posledního času obnovení
    prepis = millis();
  }
  
  // zde je místo pro další příkazy pro Arduino
  
  // volitelná pauza 10 ms pro demonstraci
  // vykonání dalších příkazů
  delay(10);
}
// funkce vykresli pro nastavení výpisu informací na OLED
void vykresli(void) {
  tep = mojeDHT.readTemperature();
  vlh = mojeDHT.readHumidity();
  // nastavení písma, toto písmo umožní vypsat
  // přibližně 15x4 znaků
  mujOled.setFont(u8g_font_unifont);
  // nastavení pozice výpisu v pixelech
  // souřadnice jsou ve tvaru x, y
  // souřadnice 0, 0 je v levém horní rohu
  // OLED displeje, maximum je 128, 64
  mujOled.setPrintPos(0, 10);
  if (isnan(tep) || isnan(vlh)) {
    // při chybném čtení vypiš hlášku
    mujOled.print("Chyba pri cteni z DHT senzoru!");
  } else {
    // výpis textu na zadanou souřadnici
    mujOled.print("Vypis teploty:");
    mujOled.setPrintPos(0, 25);
    mujOled.print(tep);
    mujOled.print(" stC");
    mujOled.setPrintPos(0, 40);
    mujOled.print("Vypis vlhkosti:");
    mujOled.setPrintPos(40, 55);
    mujOled.print(vlh);
    mujOled.print(" %");
  }
}

Vysíláno živě na https://www.twitch.tv/bastlir/

FB gp tw

Další podobné články