Inhoudsopgave:

Aangepaste karaktergenerator (Adafruit HT16k33 Matrix): 3 stappen
Aangepaste karaktergenerator (Adafruit HT16k33 Matrix): 3 stappen

Video: Aangepaste karaktergenerator (Adafruit HT16k33 Matrix): 3 stappen

Video: Aangepaste karaktergenerator (Adafruit HT16k33 Matrix): 3 stappen
Video: Lesson 76: Using one or more VL6180X 20cm Time-of-Flight proximity sensor with Arduino 2024, November
Anonim
Aangepaste karaktergenerator (Adafruit HT16k33 Matrix)
Aangepaste karaktergenerator (Adafruit HT16k33 Matrix)

Speciale karakters printen op LCD's en Led Matrices is erg leuk. De procedure voor het afdrukken van speciale tekens of aangepaste tekens is het genereren van een array met binaire waarden voor elke rij en kolom. Het kan hectisch zijn om de juiste code voor elk aangepast teken te vinden, daarom zal dit project de code automatiseren en genereren voor een 8x8 led-matrix en het aangepaste teken ook afdrukken op Adafruit HT16k33 8x8 Bicolor Matrix.

Adafruit HT16k33, een 1,2'' 8x8 Bicolor Led Matrix communiceert met Arduino via een I2C-communicatieprotocol

Volgens Adafruit: "Deze versie van de LED-rugzak is ontworpen voor de 1,2" 8x8-matrices. Ze meten slechts 1,2"x1,2", dus het is zonde om een enorme reeks chips te gebruiken om ze te besturen. Deze rugzak lost de ergernis van het gebruik van 16 pinnen of een heleboel chips op door een I2C-matrixcontroller met constante stroom netjes op de achterkant van de PCB te plaatsen. De controllerchip zorgt voor alles en trekt alle 64 LED's op de achtergrond. Het enige dat u hoeft te doen, is er gegevens naar toe te schrijven met behulp van de 2-pins I2C-interface. Er zijn twee adresselectiepinnen, dus je kunt een van de 8 adressen selecteren om er maximaal 8 op een enkele 2-pins I2C-bus te bedienen (evenals welke andere I2C-chips of -sensoren je ook wilt). De driverchip kan het hele display 'dimmen' van 1/16 helderheid tot volledige helderheid in stappen van 1/16. Het kan geen individuele LED's dimmen, alleen het hele scherm tegelijk."

In deze instructable zal ik je uitleggen hoe je de code voor elk aangepast personage in realtime kunt krijgen en dat personage op Led Matrix kunt afdrukken.

Stap 1: Componenten

Dit instructable is een basisproject op Adafruit HT16k33 Matrix. Jij hebt nodig:

  1. Adafruit HT16k33 1.2'' x 1.2'' 8x8 Bicolor Led Matrix.
  2. Arduino (elke variant maar Uno heeft de voorkeur).
  3. Breadboard
  4. Stroomvoorziening

Stap 2: Schema

Schematisch
Schematisch
Schematisch
Schematisch

Bedrading van de Adafruit HT16k33 Led-matrix is heel eenvoudig, omdat we de klok en de datapin moeten aansluiten zoals we gewoonlijk doen voor I2C-apparaten. Verbindingen zullen zijn als:

  1. SCL (klokpen van Matrix) aangesloten op A5 (klokpen van Arduino Uno. Raadpleeg datasheet voor andere varianten van Arduino)
  2. SDA (Data pin of Matrix) aangesloten op A4. (Zie datasheet voor andere varianten van Arduino)
  3. VCC aangesloten op 5V.
  4. GND aangesloten op 0V.

U kunt ook het schema in de afbeelding raadplegen.

Stap 3: Coderen

Code
Code
Code
Code

Arduino-code

Ten eerste zullen we alle benodigde bibliotheken opnemen.

  1. Wire.h: - Voor I2C-communicatie
  2. Adafruit_LedRugzak
  3. Adafruit_GFX

Al deze bibliotheken zijn beschikbaar in Arduino IDE zelf. Je hoeft ze alleen maar te installeren vanuit Bibliotheekbeheer. Sketch>>Bibliotheek opnemen >> Bibliotheken beheren

Instelfunctie ()

Een unsigned integer 8-bit array instellen op strore8 binaire waarden voor 8 rijen, van 8 bits elk (8 kolommen). Stel het adres in voor I2C-communicatie.

Loop-functie ()

Omdat we het teken moeten afdrukken, hebben we de code voor het teken in realtime nodig. De handigste methode is om de code serieel te verzenden en Arduino zal de seriële gegevens lezen en het teken dienovereenkomstig afdrukken. Het serieel verzenden van een array kan een hectische klus zijn, daarom kunnen we een string verzenden met alle 8 codes (8 bits elk) gescheiden door komma's.

Seriële string lezen:

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

Na het lezen van de tekst, moeten we deze string decoderen en de binaire waarden terugkrijgen. Zoals we weten, zal het formaat van de invoerreeks altijd hetzelfde zijn. We kunnen het coderen om substrings te vinden en de strings om te zetten naar hun decimale equivalente waarden. Vervolgens geven we de gegenereerde decimale array (uint8_t) door om het teken op de matrix af te drukken.

String van 8 bits converteren naar decimaal:

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

Voor het evalueren van decimale equivalenten met behulp van de machtsfunctie (pow ()), moet u omgaan met dubbele typewaarden en daarom kunnen we onze eigen machtsfunctie schrijven als:

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

Nu zullen we eindelijk de code schrijven om het teken af te drukken met behulp van de gegenereerde array van 8 decimale waarden (één voor elke rij).

void print_emoji(uint8_t emoji, String kleur){ matrix.clear(); if (kleur = = "rood") { matrix.drawBitmap (0, 0, emoji, 8, 8, LED_RED); } else { matrix.drawBitmap(0, 0, emoji, 8, 8, LED_GREEN); } matrix.writeDisplay(); vertraging (500); }

U zult deze code gemakkelijk begrijpen, aangezien we eerst de matrix wissen en vervolgens het teken weergeven met behulp van emoji-array met de functie matrix.drawBitmap(). Vergeet niet om "matrix.writeDisplay()" te schrijven na alle opmaak, aangezien deze functie alleen alle opmaak die tot nu toe op matrix is gedaan, weergeeft.

Nu kunt u de string met alle codewaarden verzenden en Arduino zal het teken op de matrix afdrukken. U kunt de Arduino-code hieronder downloaden. Voor experimentele doeleinden kun je schrijven:

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

deze string in Serial Monitor en kan het teken op de matrix zien.

Nu moeten we de seriële gegevens automatisch verzenden vanuit een software wanneer we op de knop "Afdrukken" drukken. Om dit te automatiseren, zullen we een demo 8x8-matrix maken en we zullen de gebruiker de mogelijkheid bieden om te kiezen welke cellen moeten worden gekleurd en dan zal de software automatisch de code genereren en de gegevens serieel naar Arduino sturen in string-formaat. Voor de rest van mijn werk heb ik voor Processing gekozen. Tijdens de verwerking kunnen we met 64 knoppen (rechthoeken met ingedrukte functie) een matrix maken en aan het begin een bepaalde waarde en kleur toekennen (laat het de witte kleur zijn met waarde 0). Telkens wanneer de knop wordt ingedrukt, zullen we de kleur van de knop omzetten in zwart en de waarde instellen op 1. Als de gebruiker opnieuw op dezelfde knop drukt, verandert de waarde opnieuw in 0 en kleurt hij terug naar wit. Dit zal de gebruiker helpen om de code keer op keer gemakkelijk te wijzigen en kan gemakkelijk wijzigingen aanbrengen zonder de hele matrix opnieuw te wissen. Door op de knop "Afdrukken" te klikken, maken we een tekenreeks die lijkt op de tekenreeks die hierboven is weergegeven voor de demo. Vervolgens wordt de string naar de specifieke seriële poort gestuurd.

U kunt de verwerkingscode hieronder downloaden. Dit is mijn eerste code in verwerking. Suggesties voor de verbeterde manier van coderen worden zeer op prijs gesteld.

U kunt zien hoe de GUI eruit ziet en hoe het personage met het systeem wordt gemaakt. Het duurt nauwelijks seconden om hetzelfde personage op matrix te maken.

Je kunt de code en afbeeldingen van dit project downloaden van mijn GitHub Repository.

Aanbevolen: