Мазмуну:

Ыңгайлаштырылган белги генератору (Adafruit HT16k33 Matrix): 3 кадам
Ыңгайлаштырылган белги генератору (Adafruit HT16k33 Matrix): 3 кадам

Video: Ыңгайлаштырылган белги генератору (Adafruit HT16k33 Matrix): 3 кадам

Video: Ыңгайлаштырылган белги генератору (Adafruit HT16k33 Matrix): 3 кадам
Video: 7 проектов. Сборка светодиодного ЖК-будильника с использованием DS1307 и Arduino | Урок 105 2024, Июль
Anonim
Ыңгайлаштырылган белгилер генератору (Adafruit HT16k33 Matrix)
Ыңгайлаштырылган белгилер генератору (Adafruit HT16k33 Matrix)

ЖК жана LED матрицаларында атайын белгилерди басып чыгаруу - бул абдан кызыктуу. Атайын символдорду же ыңгайлаштырылган белгилерди басып чыгаруу процедурасы ар бир сап жана мамыча үчүн бинардык мааниге ээ массивди түзүү болуп саналат. Каалаган тамга үчүн туура кодду табуу түйшүктүү болушу мүмкүн, демек, бул долбоор автоматташтырылган жана 8x8 жетилген матрицанын кодун жаратат, ошондой эле Adafruit HT16k33 8x8 Bicolor Matrixде бажы тамгасын басып чыгарат.

Adafruit HT16k33, 1,2 '' 8x8 Bicolor Led Matrix Arduino менен I2C байланыш протоколу аркылуу байланышат

Adafruit айтымында, "LED рюкзактын бул версиясы 1.2" 8x8 матрицалары үчүн иштелип чыккан. Алар болгону 1,2 "x1,2" өлчөшөт, андыктан аны көзөмөлдөө үчүн чиптердин массивин колдонуу уят. Бул рюкзак I2C туруктуу ток матрицасы контролерун ПХБнын арт жагына тыкан отургузуп, 16 казыкты же бир топ чиптерди колдонуунун кыжырдануусун чечет. Контроллер чипи баардык нерсеге кам көрөт, бардык 64 LEDди фондо тартат. Болгону ага 2-пиндүү I2C интерфейсин колдонуп маалыматтарды жазуу керек. Эки дарек тандоо казыгы бар, андыктан сиз 8 адрестин бирин тандай аласыз, буларды 2 пиндүү I2C автобусунда (ошондой эле сизге жаккан башка I2C чиптери же сенсорлору) 8ге чейин көзөмөлдөө үчүн. Айдоочу чипи дисплейдин 1/16 жарыгынан 1/16 кадамында толук жарыктыгына чейин "күңүрт" кыла алат. Ал жеке диоддорду өчүрө албайт, бир эле учурда бүтүндөй дисплейди."

Бул көрсөтмөдө мен сизге каалаган убакта каалаган тамганын кодун кантип реалдуу убакытта алууну жана ал белгини Led Matrixке кантип басып чыгарууну түшүндүрөм.

1 -кадам: Компоненттер

Бул көрсөтмө Adafruit HT16k33 Matrix боюнча негизги долбоор. Сизге керек:

  1. Adafruit HT16k33 1.2 "x 1.2" 8x8 Bicolor Led Matrix.
  2. Arduino (Uno эмес, башка вариант).
  3. Breadboard
  4. Электр камсыздоо

2 -кадам: схемалык

Схемалык
Схемалык
Схемалык
Схемалык

Adafruit HT16k33 Led матрицасын туташтыруу абдан оңой, анткени биз, адатта, I2C түзмөктөрүндөй болуп, саатты жана маалымат пинин туташтырышыбыз керек. Байланыштар мындай болот:

  1. SCL (Матрицанын сааты) A5ке туташкан (Arduino Unoнун сааты. Ардуинонун башка варианттары үчүн маалымат барагын караңыз)
  2. SDA (Матрицанын маалымат пини) A4 менен туташкан. (Ардуинонун башка варианттары үчүн маалымат барагын караңыз)
  3. VCC 5Vга туташкан.
  4. GND 0Vга туташты.

Ошондой эле сүрөттө көрсөтүлгөн схемага кайрылсаңыз болот.

3 -кадам: Код

Code
Code
Code
Code

Arduino коду

Биринчиден, биз керектүү бардык китепканаларды камтыйт.

  1. Wire.h:- I2C байланышы үчүн
  2. Adafruit_LedBackpack
  3. Adafruit_GFX

Бул китепканалардын баары Arduino IDEде жеткиликтүү. Сиз аларды китепкана менеджеринен орнотушуңуз керек. Эскиз >> Китепкананы кошуу >> Китепканаларды башкаруу

Орнотуу функциясы ()

Кол коюлбаган 8-биттик массивди 8 экилик 8 стрелге, ар бирине 8 биттен (8 тилке) орнотуу. I2C байланышынын дарегин коюңуз.

Цикл функциясы ()

Биз каарманды басып чыгарышыбыз керек болгондой эле, биз реалдуу убакытта символдун кодуна муктажбыз. Эң ыңгайлуу ыкма - бул кодду сериялык түрдө жөнөтүү жана Arduino сериялык маалыматтарды окуйт жана ошого жараша белгини басып чыгарат. Массивди ырааттуу жөнөтүү түйшүктүү жумуш болушу мүмкүн, ошондуктан биз үтүр менен ажыратылган бардык 8 коддору (ар бири 8 бит) бар сапты жөнөтө алабыз.

Сериялык сапты окуу:

if (Serial.available ()> 0) {data = Serial.readStringUntil ('\ n'); Serial.println (маалыматтар); }

Текстти окугандан кийин, биз бул саптын кодун чечип, экилик маанилерди кайтарып алышыбыз керек. Биз билгендей, киргизүү сабынын форматы дайыма бирдей болот. Биз аны субстрингдерди табуу жана саптарды ондук эквиваленттүү маанилерине айландыруу үчүн кодтой алабыз. Андан кийин биз жаратылган ондук массивди (uint8_t) өткөрүп, белгини матрицага басып чыгарабыз.

8 биттин сабын ондукка айландыруу:

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

Power функциясын колдонуп ондук эквивалентти баалоо үчүн (pow ()), сиз кош типтеги маанилер менен иштешиңиз керек, демек биз өзүбүздүн күчүбүздүн функциясын мындай жаза алабыз:

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

Эми, акыры, биз 8 ондук маанинин (ар бир сап үчүн бирден) түзүлгөн массивин колдонуп, белгини басып чыгаруу үчүн кодду жазабыз.

жараксыз print_emoji (uint8_t эмодзи , Саптын түсү) {matrix.clear (); эгер (түс == "кызыл") {matrix.drawBitmap (0, 0, эмодзи, 8, 8, LED_RED); } башка {matrix.drawBitmap (0, 0, эмодзи, 8, 8, LED_GREEN); } matrix.writeDisplay (); кечигүү (500); }

Сиз бул кодду жонокой түшүнөсүз, анткени биз матрицаны тазалап, андан кийин matrix.drawBitmap () функциясын колдонуп, эмодзи массивин колдонуп, белгини көрсөтөбүз. Бардык форматтагандан кийин "matrix.writeDisplay ()" деп жазууну унутпаңыз, анткени бул функция матрицада буга чейин жасалган бардык форматтоолорду гана көрсөтөт.

Эми сиз сапты бардык коддор менен жөнөтө аласыз жана Arduino матрицада белгини басып чыгарат. Сиз Arduino кодун төмөндөн жүктөп алсаңыз болот. Эксперименталдык максатта жазсаңыз болот

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

Бул сап сериялык монитордо жана матрицанын символын көрө алат.

Эми, биз "Басып чыгаруу" баскычын басканда сериялык маалыматтарды программадан автоматтык түрдө жөнөтүшүбүз керек. Муну автоматташтыруу үчүн, биз демо 8x8 матрицасын түзөбүз жана колдонуучуга кайсы клеткаларды түстүү болууну тандоо мүмкүнчүлүгүн беребиз, андан кийин программа кодду автоматтык түрдө түзүп, маалыматтарды Arduinoго сап форматында сериялык түрдө жөнөтөт. Калган жумуштарым үчүн Processing тандадым. Иштетүүдө биз 64 баскычты колдонуп матрицаны түзө алабыз (басылган функциясы бар тик бурчтуктар) жана башында белгилүү бир маанини жана түсүн бере алабыз (0 мааниси бар ак түс болсун). Эми качан баскыч басылганда, биз баскычтын түсүн кара кылып, 1ге коёбуз. Эгерде колдонуучу ошол эле баскычты кайра басса, анын мааниси кайра 0гө, түсү акка өзгөрөт. Бул колдонуучуга кодду кайра -кайра оңой өзгөртүүгө жардам берет жана бүт матрицаны кайра өчүрбөй оңой оңдоолорду киргизе алат. "Басып чыгаруу" баскычын чыкылдатуу менен, биз демо үчүн жогоруда көрсөтүлгөн сапка окшош кылабыз. Андан кийин сап белгилүү бир сериялык портко жөнөтүлөт.

Төмөндөн иштетүү кодун жүктөп алсаңыз болот. Бул менин иштеп жаткан биринчи кодум. Өркүндөтүлгөн коддоо жолу боюнча сунуштар жогору бааланат.

Сиз GUIдин кандай экенин жана системанын жардамы менен символдун кандайча түзүлгөнүн көрө аласыз. Матрицада бир эле белгини түзүү үчүн секунддар талап кылынбайт.

Бул долбоордун кодун жана сүрөттөрүн менин GitHub репозиторийимден жүктөп алсаңыз болот.

Сунушталууда: