Innholdsfortegnelse:

Custom Character Generator (Adafruit HT16k33 Matrix): 3 trinn
Custom Character Generator (Adafruit HT16k33 Matrix): 3 trinn

Video: Custom Character Generator (Adafruit HT16k33 Matrix): 3 trinn

Video: Custom Character Generator (Adafruit HT16k33 Matrix): 3 trinn
Video: Adding a push button matrix to HT16K33 led display modules (featuring the TinyPICO) 2024, November
Anonim
Custom Character Generator (Adafruit HT16k33 Matrix)
Custom Character Generator (Adafruit HT16k33 Matrix)

Det er veldig morsomt å skrive ut spesialtegn på LCD -skjermer og LED -matriser. Fremgangsmåten for å skrive ut spesialtegn eller egendefinerte tegn er å generere en matrise med binære verdier for hver rad og kolonne. Det kan være hektisk å finne den riktige koden for et egendefinert tegn, derfor vil dette prosjektet automatisere og generere kode for en 8x8 led matrise og vil også skrive ut det egendefinerte tegnet på Adafruit HT16k33 8x8 Bicolor Matrix.

Adafruit HT16k33, en 1,2 '' 8x8 Bicolor Led Matrix kommuniserer med Arduino via en I2C kommunikasjonsprotokoll

I følge Adafruit, "Denne versjonen av LED -ryggsekken er designet for 1,2" 8x8 matriser. De måler bare 1,2 "x1,2", så det er synd å bruke et stort utvalg av sjetonger for å kontrollere det. Denne ryggsekken løser irritasjonen ved å bruke 16 pinner eller en haug med sjetonger ved å ha en I2C konstantstrømmatrisekontroller som sitter pent på baksiden av kretskortet. Kontrolleren -brikken tar seg av alt og tegner alle 64 lysdiodene i bakgrunnen. Alt du trenger å gjøre er å skrive data til den ved hjelp av 2-pinners I2C-grensesnittet. Det er to adressevalgpinner, slik at du kan velge en av åtte adresser for å kontrollere opptil 8 av disse på en enkelt 2-pinners I2C-buss (så vel som alle andre I2C-brikker eller sensorer du liker). Driverchippen kan "dempe" hele skjermen fra 1/16 lysstyrke til full lysstyrke i 1/16 trinn. Den kan ikke dempe individuelle lysdioder, bare hele skjermen samtidig."

I denne instruksen vil jeg forklare deg hvordan du får koden for et egendefinert tegn i sanntid og skriver ut det tegnet på Led Matrix.

Trinn 1: Komponenter

Dette instruerbare er et grunnleggende prosjekt på Adafruit HT16k33 Matrix. Du trenger:

  1. Adafruit HT16k33 1,2 '' x 1,2 '' 8x8 Bicolor Led Matrix.
  2. Arduino (hvilken som helst variant, men Uno foretrekkes).
  3. Brødbrett
  4. Strømforsyning

Trinn 2: Skjematisk

Skjematisk
Skjematisk
Skjematisk
Skjematisk

Kabling av Adafruit HT16k33 Led -matrise er veldig enkelt, ettersom vi trenger å koble klokken og datapinnen som vi vanligvis gjør for I2C -enheter. Tilkoblinger vil være som:

  1. SCL (Clock pin of Matrix) koblet til A5 (Clock pin of Arduino Uno. Se datablad for andre varianter av Arduino)
  2. SDA (Data pin of Matrix) koblet til A4. (Se datablad for andre varianter av Arduino)
  3. VCC koblet til 5V.
  4. GND koblet til 0V.

Du kan også se skjematikken vist på figuren.

Trinn 3: Kode

Kode
Kode
Kode
Kode

Arduino -koden

For det første vil vi inkludere alle nødvendige biblioteker.

  1. Wire.h:- For I2C-kommunikasjon
  2. Adafruit_LedRyggsekk
  3. Adafruit_GFX

Alle disse bibliotekene er tilgjengelige i Arduino IDE selv. Du trenger bare å installere dem fra Library Manager. Skisse >> Inkluder bibliotek >> Administrer biblioteker

Oppsettfunksjon ()

Angi et usignert heltall 8-bits array til strore8 binære verdier for 8 rader, med 8 bits hver (8 kolonner). Angi adressen for I2C -kommunikasjon.

Sløyfe -funksjon ()

Siden vi trenger å skrive ut tegnet, trenger vi koden for tegnet i sanntid. Den mest praktiske metoden er å sende koden i serie, og Arduino vil lese de serielle dataene og skrive ut tegnet deretter. Å sende en matrise i serie kan være en hektisk jobb, derfor kan vi sende en streng med alle 8 koder (8 biter hver) atskilt med kommaer.

Lese seriestreng:

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

Etter å ha lest teksten, må vi dekode denne strengen og få tilbake de binære verdiene. Som vi vet, vil formatet på inndatastrengen alltid være det samme. Vi kan kode det for å finne underlag og konvertere strengene til deres desimalekvivalente verdier. Deretter passerer vi det genererte desimalsystemet (uint8_t) for å skrive ut tegnet på matrisen.

Konvertering av streng på 8 bits til desimal:

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

For å evaluere desimalekvivalent ved bruk av effektfunksjon (pow ()), må du forholde deg til verdier av dobbel type, og derfor kan vi skrive vår egen effektfunksjon som:

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

Nå vil vi endelig skrive koden for å skrive ut tegnet ved å bruke den genererte rekken med 8 desimalverdier (en for hver rad).

void print_emoji (uint8_t emoji , strengfarge) {matrix.clear (); hvis (farge == "rød") {matrix.drawBitmap (0, 0, emoji, 8, 8, LED_RED); } annet {matrix.drawBitmap (0, 0, emoji, 8, 8, LED_GREEN); } matrix.writeDisplay (); forsinkelse (500); }

Du vil lett forstå denne koden ettersom vi først rydder matrisen og deretter viser tegnet ved hjelp av emoji -array ved hjelp av matrix.drawBitmap () -funksjonen. Ikke glem å skrive "matrix.writeDisplay ()" etter all formatering, da denne funksjonen bare vil vise alle formateringer som er gjort så langt på matrisen.

Nå kan du sende strengen med alle kodeverdier, og Arduino vil skrive ut tegnet på matrisen. Du kan laste ned Arduino -koden nedenfor. For eksperimentelle formål kan du skrive

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

denne strengen i Serial Monitor og kan se tegnet på matrisen.

Nå må vi sende serielle data automatisk fra en programvare når vi trykker på "Skriv ut" -knappen. For å automatisere dette, vil vi lage en 8x8 -matrise for demo, og vi vil gi brukeren mulighet til å velge hvilke celler som skal farges, og deretter vil programvaren automatisk generere koden og sende dataene serielt til Arduino i strengformat. Jeg valgte Processing for resten av arbeidet mitt. Under behandling kan vi lage en matrise ved hjelp av 64 knapper (rektangler med trykket funksjon) og kan tildele en bestemt verdi og farge i starten (La det være den hvite fargen med verdi 0). Nå når knappen trykkes, vil vi konvertere fargen på knappen til svart og sette verdien til 1. Hvis brukeren trykker på samme knapp igjen, vil verdien igjen endres til 0 og fargen tilbake til hvit. Dette vil hjelpe brukeren med å endre koden igjen og igjen enkelt og kan enkelt gjøre endringer uten å slette hele matrisen igjen. Ved å klikke på "Skriv ut" -knappen, lager vi en streng som ligner den som er vist ovenfor for demoen. Deretter blir strengen sendt til den bestemte serielle porten.

Du kan laste ned behandlingskoden nedenfor. Dette er min første kode under behandling. Forslag til den forbedrede måten å kode er høyt verdsatt.

Du kan se hvordan GUI ser ut og hvordan tegnet opprettes ved hjelp av systemet. Det vil neppe ta sekunder å lage det samme tegnet på matrisen.

Du kan laste ned koden og bildene til dette prosjektet fra GitHub -depotet mitt.

Anbefalt: