Innehållsförteckning:

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

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

Video: Custom Character Generator (Adafruit HT16k33 Matrix): 3 steg
Video: Using HT16K33 4 digit seven segment display with ESP8266 NodeMCU and D1 Mini 2024, November
Anonim
Custom Character Generator (Adafruit HT16k33 Matrix)
Custom Character Generator (Adafruit HT16k33 Matrix)

Att skriva ut specialtecken på LCD -skärmar och LED -matriser är väldigt roligt. Proceduren för att skriva ut specialtecken eller anpassade tecken är att generera en array med binära värden för varje rad och kolumn. Det kan vara hektiskt att hitta rätt kod för alla anpassade tecken, därför kommer detta projekt att automatisera och generera kod för en 8x8 led matris och kommer också att skriva ut det anpassade tecknet på Adafruit HT16k33 8x8 Bicolor Matrix.

Adafruit HT16k33, en 1,2 '' 8x8 Bicolor Led Matrix kommunicerar med Arduino via ett I2C -kommunikationsprotokoll

Enligt Adafruit, "Denna version av LED -ryggsäcken är utformad för 1,2" 8x8 -matriserna. De mäter bara 1,2 "x1,2" så det är synd att använda en massiv mängd chips för att styra det. Denna ryggsäck löser besväret med att använda 16 stift eller ett gäng chips genom att ha en I2C konstantströmmatrisstyrenhet som sitter snyggt på baksidan av kretskortet. Controllerchipet tar hand om allt och drar alla 64 lysdioder i bakgrunden. Allt du behöver göra är att skriva data till den med hjälp av det 2-stifts I2C-gränssnittet. Det finns två adressvalsstift så att du kan välja en av åtta adresser för att styra upp till 8 av dessa på en enda 2-stifts I2C-buss (liksom alla andra I2C-chips eller sensorer du gillar). Drivrutinen kan "dimma" hela skärmen från 1/16 ljusstyrka upp till full ljusstyrka i 1/16 steg. Det kan inte dimma enskilda lysdioder, bara hela skärmen samtidigt."

I den här instruktionsboken kommer jag att förklara för dig hur du får koden för ett anpassat tecken i realtid och skriver ut det tecknet på Led Matrix.

Steg 1: Komponenter

Detta instruerbara är ett grundläggande projekt om Adafruit HT16k33 Matrix. Du behöver:

  1. Adafruit HT16k33 1,2 '' x 1,2 '' 8x8 Bicolor Led Matrix.
  2. Arduino (valfri variant men Uno är att föredra).
  3. Bakbord
  4. Strömförsörjning

Steg 2: Schematisk

Schematisk
Schematisk
Schematisk
Schematisk

Anslutning av Adafruit HT16k33 Led -matris är mycket enkelt eftersom vi behöver ansluta klockan och datapinnen som vi vanligtvis gör för I2C -enheter. Anslutningar kommer att se ut som:

  1. SCL (Clock pin of Matrix) ansluten till A5 (Clock pin of Arduino Uno. Se datablad för andra varianter av Arduino)
  2. SDA (Data pin of Matrix) ansluten till A4. (Se datablad för andra varianter av Arduino)
  3. VCC ansluten till 5V.
  4. GND ansluten till 0V.

Du kan också se schemat som visas i figuren.

Steg 3: Kod

Koda
Koda
Koda
Koda

Arduino -kod

För det första kommer vi att inkludera alla bibliotek som krävs.

  1. Wire.h:- För I2C-kommunikation
  2. Adafruit_LedRyggsäck
  3. Adafruit_GFX

Alla dessa bibliotek är tillgängliga i Arduino IDE själv. Du behöver bara installera dem från Library Manager. Skiss >> Inkludera bibliotek >> Hantera bibliotek

Inställningsfunktion ()

Ange ett osignerat heltal 8-bitars array till strore8 binära värden för 8 rader, med 8 bitar vardera (8 kolumner). Ange adressen för I2C -kommunikation.

Loop -funktion ()

Eftersom vi behöver skriva ut tecknet behöver vi koden för tecknet i realtid. Den mest praktiska metoden är att skicka koden i serie och Arduino kommer att läsa seriell data och skriva ut tecknet i enlighet därmed. Att skicka en array seriellt kan vara ett hektiskt jobb, därför kan vi skicka en sträng med alla 8 koder (8 bitar vardera) åtskilda med kommatecken.

Läser seriesträng:

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

Efter att ha läst texten måste vi avkoda den här strängen och få tillbaka de binära värdena. Som vi vet kommer inmatningssträngens format alltid att vara detsamma. Vi kan koda det för att hitta underlag och konvertera strängarna till deras decimalekvivalenta värden. Sedan passerar vi den genererade decimalmatrisen (uint8_t) för att skriva ut tecknet på matrisen.

Konvertera sträng med 8 bitar till decimal:

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

För att utvärdera decimalekvivalent med effektfunktion (pow ()) måste du hantera dubbelvärden och därför kan vi skriva vår egen effektfunktion som:

int power (int base, int exponent) {int c = 1; för (int i = 0; i {c = c*bas;} returnera c;}

Nu äntligen skriver vi koden för att skriva ut tecknet med hjälp av den genererade matrisen med 8 decimalvärden (en för varje rad).

void print_emoji (uint8_t emoji , strängfärg) {matrix.clear (); if (color == "röd") {matrix.drawBitmap (0, 0, emoji, 8, 8, LED_RED); } annat {matrix.drawBitmap (0, 0, emoji, 8, 8, LED_GREEN); } matrix.writeDisplay (); fördröjning (500); }

Du kommer lätt att förstå den här koden när vi rensar matrisen först och sedan visar tecknet med emoji -array med matrix.drawBitmap () -funktionen. Glöm inte att skriva "matrix.writeDisplay ()" efter all formatering eftersom denna funktion bara visar alla formateringar som gjorts hittills på matrisen.

Nu kan du skicka strängen med alla kodvärden och Arduino kommer att skriva ut tecknet på matrisen. Du kan ladda ner Arduino -koden nedan. För experimentellt ändamål kan du skriva

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

denna sträng i Serial Monitor och kan se tecknet på matrisen.

Nu måste vi skicka seriella data automatiskt från en programvara när vi trycker på "Skriv ut" -knappen. För att automatisera detta kommer vi att göra en demo 8x8 -matris och vi kommer att ge användaren möjlighet att välja vilka celler som ska färgas och sedan kommer mjukvaran automatiskt att generera koden och skicka data seriellt till Arduino i strängformat. Jag valde Processing för resten av mitt arbete. Vid bearbetning kan vi göra en matris med 64 knappar (rektanglar med nedtryckt funktion) och kan tilldela ett visst värde och färg i början (Låt det vara den vita färgen med värde 0). Nu när knappen trycks in, kommer vi att konvertera färgen på knappen till svart och sätta värdet till 1. Om användaren trycker på samma knapp igen, ändras dess värde till 0 och färgen tillbaka till vitt. Detta hjälper användaren att enkelt ändra koden igen och igen och kan enkelt göra ändringar utan att radera hela matrisen igen. Genom att klicka på knappen "Skriv ut" gör vi en sträng som liknar den som visas ovan för demoen. Därefter skickas strängen till den specifika serieporten.

Du kan ladda ner behandlingskoden nedan. Detta är min första kod under bearbetning. Förslag på det förbättrade sättet att koda uppskattas mycket.

Du kan se hur GUI ser ut och hur karaktären skapas med hjälp av systemet. Det kommer knappast att ta några sekunder att skapa samma karaktär på matrisen.

Du kan ladda ner koden och bilderna för detta projekt från mitt GitHub -arkiv.

Rekommenderad: