Obsah:

Vlastní generátor znaků (matice Adafruit HT16k33): 3 kroky
Vlastní generátor znaků (matice Adafruit HT16k33): 3 kroky

Video: Vlastní generátor znaků (matice Adafruit HT16k33): 3 kroky

Video: Vlastní generátor znaků (matice Adafruit HT16k33): 3 kroky
Video: 55. Python - Vytvoříme vlastní generátor hesel 2024, Červenec
Anonim
Vlastní generátor znaků (matice Adafruit HT16k33)
Vlastní generátor znaků (matice Adafruit HT16k33)

Tisk speciálních znaků na LCD a LED matice je skvělá zábava. Postup tisku speciálních znaků nebo vlastních znaků je vygenerování pole s binárními hodnotami pro každý řádek a sloupec. Nalezení správného kódu pro jakýkoli vlastní znak může být hektické, a proto tento projekt automatizuje a generuje kód pro matici LED 8x8 a také vytiskne vlastní znak na Bicolor Matrix Adafruit HT16k33 8x8.

Adafruit HT16k33, 1,2 '' 8x8 Bicolor Led Matrix, komunikuje s Arduino prostřednictvím komunikačního protokolu I2C

Podle společnosti Adafruit „Tato verze batohu LED je navržena pro matice 1,2“8x8. Měří pouze 1,2 "x1,2", takže je škoda použít k ovládání obrovské množství čipů. Tento batoh řeší nepříjemnost používání 16 pinů nebo hromady čipů tím, že na zadní straně desky plošných spojů je úhledně umístěn maticový řadič I2C s konstantním proudem. O vše se stará čip řadiče, který na pozadí vykreslí všech 64 LED diod. Stačí do něj zapsat data pomocí 2kolíkového rozhraní I2C. K dispozici jsou dva piny pro výběr adresy, takže můžete vybrat jednu z 8 adres pro ovládání až 8 z nich na jedné 2pinové sběrnici I2C (stejně jako jakékoli jiné I2C čipy nebo senzory, které se vám líbí). Čip ovladače může „ztlumit“celý displej od 1/16 jasu až po plný jas v 1/16 krocích. Nemůže ztlumit jednotlivé LED diody, pouze celý displej najednou. “

V tomto pokynu vám vysvětlím, jak získat kód pro jakýkoli vlastní znak v reálném čase a vytisknout tento znak na Led Matrix.

Krok 1: Součásti

Tento instruktáž je základní projekt na Adafruit HT16k33 Matrix. Potřebuješ:

  1. Adafruit HT16k33 1,2 '' x 1,2 '' 8x8 dvoubarevná LED matice.
  2. Arduino (upřednostňuje se jakákoli varianta kromě Uno).
  3. Prkénko
  4. Zdroj napájení

Krok 2: Schéma

Schéma
Schéma
Schéma
Schéma

Zapojení matice LED Adafruit HT16k33 LED je velmi snadné, protože potřebujeme připojit hodinový a datový pin, jako obvykle u zařízení I2C. Připojení bude vypadat takto:

  1. SCL (Clock pin of Matrix) připojený k A5 (Clock pin of Arduino Uno. Další varianty Arduina najdete v datasheetu)
  2. SDA (datový kolík matice) připojen k formátu A4. (Další varianty Arduina najdete v datasheetu)
  3. VCC připojeno k 5V.
  4. GND připojeno k 0V.

Můžete si také prohlédnout schéma znázorněné na obrázku.

Krok 3: Kód

Kód
Kód
Kód
Kód

Arduino kód

Nejprve zahrneme všechny požadované knihovny.

  1. Wire.h:- Pro komunikaci I2C
  2. Batoh Adafruit_LedBackpack
  3. Adafruit_GFX

Všechny tyto knihovny jsou k dispozici v samotném Arduino IDE. Stačí je nainstalovat ze Správce knihoven. Skica >> Zahrnout knihovnu >> Spravovat knihovny

Funkce nastavení ()

Nastavení 8bitového pole bez znaménka na strore8 binárních hodnot pro 8 řádků po 8 bitů (8 sloupců). Nastavte adresu pro komunikaci I2C.

Funkce smyčky ()

Protože potřebujeme vytisknout znak, potřebujeme kód pro znak v reálném čase. Nejpohodlnější metodou je odeslat kód sériově a Arduino přečte sériová data a podle toho vytiskne znak. Sériové odesílání pole může být hektická práce, proto můžeme poslat řetězec se všemi 8 kódy (každý po 8 bitech) oddělenými čárkami.

Čtení sériového řetězce:

if (Serial.available ()> 0) {data = Serial.readStringUntil ('\ n'); Serial.println (data); }

Po přečtení textu musíme tento řetězec dekódovat a získat zpět binární hodnoty. Jak víme, formát vstupního řetězce bude vždy stejný. Můžeme jej kódovat, abychom našli podřetězce a převedli řetězce na jejich desítkové ekvivalentní hodnoty. Poté předáme vygenerované desetinné pole (uint8_t), aby se znak vytiskl na matici.

Převod řetězce 8 bitů na desítkové:

int val (String str) {int v = 0; for (int i = 0; i <8; i ++) {if (str == '1') {v = v+power (2, (7-i)); }} návrat v; }

Pro vyhodnocení desetinného ekvivalentu pomocí výkonové funkce (pow ()) se musíte vypořádat s hodnotami dvojitého typu, a proto můžeme napsat naši vlastní mocninnou funkci jako:

int power (int base, int exponent) {int c = 1; for (int i = 0; i {c = c*base;} return c;}

Nyní konečně napíšeme kód pro tisk znaku pomocí vygenerovaného pole 8 desetinných hodnot (pro každý řádek jedna).

neplatné print_emoji (uint8_t emoji , barva řetězce) {matrix.clear (); if (color == "red") {matrix.drawBitmap (0, 0, emoji, 8, 8, LED_RED); } else {matrix.drawBitmap (0, 0, emoji, 8, 8, LED_GREEN); } matrix.writeDisplay (); zpoždění (500); }

Tento kód snadno pochopíte, protože nejprve čistíme matici a poté zobrazujeme znak pomocí pole emoji pomocí funkce matrix.drawBitmap (). Po veškerém formátování nezapomeňte napsat „matrix.writeDisplay ()“, protože tato funkce zobrazí pouze všechna dosud provedená formátování na matici.

Nyní můžete řetězec odeslat se všemi hodnotami kódu a Arduino vytiskne znak na matici. Kód Arduino si můžete stáhnout níže. Pro experimentální účely můžete psát

B00111100, B01000010, B10100101, B10000001, B10100101, B10011001, B01000010, B00111100

tento řetězec v Serial Monitor a vidí znak na matici.

Nyní musíme automaticky odeslat sériová data ze softwaru, když stiskneme tlačítko „Tisk“. Abychom to zautomatizovali, vytvoříme demo matici 8x8 a poskytneme uživateli možnost vybrat si, které buňky by měly být vybarveny, a poté software automaticky vygeneruje kód a odešle data sériově do Arduina ve formátu řetězců. Pro zbytek své práce jsem si vybral zpracování. Při zpracování můžeme vytvořit matici pomocí 64 tlačítek (obdélníky se stisknutou funkcí) a přiřadit konkrétní hodnotu a barvu na začátku (nechť je to bílá barva s hodnotou 0). Nyní, kdykoli je tlačítko stisknuto, převedeme barvu tlačítka na černou a nastavíme hodnotu na 1. Pokud uživatel znovu stiskne stejné tlačítko, jeho hodnota se opět změní na 0 a barva se vrátí na bílou. To pomůže uživateli snadno znovu a znovu měnit kód a může snadno provádět změny, aniž by znovu vymazal celou matici. Po kliknutí na tlačítko „Tisk“vytvoříme řetězec podobný tomu, který je ukázán výše pro ukázku. Poté bude řetězec odeslán na konkrétní sériový port.

Zpracovávací kód si můžete stáhnout níže. Toto je můj první zpracovávaný kód. Návrhy na vylepšený způsob kódování jsou vysoce ceněny.

Můžete vidět, jak GUI vypadá a jak je postava vytvořena pomocí systému. Vytvoření stejného znaku na matici bude sotva trvat několik sekund.

Kód a obrázky tohoto projektu si můžete stáhnout z mého úložiště GitHub.

Doporučuje: