Мазмұны:

Таңдамалы таңбалар генераторы (Adafruit HT16k33 матрицасы): 3 қадам
Таңдамалы таңбалар генераторы (Adafruit HT16k33 матрицасы): 3 қадам

Бейне: Таңдамалы таңбалар генераторы (Adafruit HT16k33 матрицасы): 3 қадам

Бейне: Таңдамалы таңбалар генераторы (Adafruit HT16k33 матрицасы): 3 қадам
Бейне: Python - Lists! 2024, Қараша
Anonim
Таңдамалы таңбалар генераторы (Adafruit HT16k33 матрицасы)
Таңдамалы таңбалар генераторы (Adafruit HT16k33 матрицасы)

СКД мен LED матрицаларында арнайы таңбаларды басып шығару - бұл өте қызықты. Арнайы таңбаларды немесе реттелетін таңбаларды басып шығару процедурасы - әрбір жол мен баған үшін екілік мәндері бар массив құру. Кез келген таңдамалы таңбаның дұрыс кодын табу қиын болуы мүмкін, сондықтан бұл жоба 8x8 жарықдиодты матрицаның кодын автоматтандырады және шығарады, сонымен қатар Adafruit HT16k33 8x8 екі түсті матрицасында реттелетін таңбаны басып шығарады.

Adafruit HT16k33, 1,2 дюймдік 8х8 Bicolor Led матрицасы Arduino -мен I2C байланыс протоколы арқылы байланысады

Adafruit айтуынша, «LED рюкзагының бұл нұсқасы 1,2х8х8 матрицаларына арналған. Олар тек 1,2 «x1.2» өлшемін өлшейді, сондықтан оны басқару үшін фишкалардың үлкен массивін қолдану ұят. Бұл рюкзак ПХД-ның артқы жағында I2C тұрақты ток матрицалық реттегішінің болуы арқылы 16 түйреуішті немесе чиптерді пайдаланудың ашуын шешеді. Контроллер чипі барлық 64 жарықдиодты фонда сызып, бәрін реттейді. Сізге 2 істікшелі I2C интерфейсін қолдана отырып, деректерді жазу жеткілікті. Адресті таңдауға арналған екі түйреуіш бар, осылайша сіз бір 2 істікшелі I2C шинасында 8-ге дейін басқарылатын 8 мекенжайдың біреуін таңдай аласыз (сонымен қатар басқа I2C чиптері мен сенсорларының кез келгені сізге ұнайды). Драйвер чипі 1/16 қадаммен 1/16 жарықтықтан толық жарықтылыққа дейін бүкіл дисплейді «күңгірттей» алады. Ол жеке жарықдиодты сөндіре алмайды, тек бірден бүкіл дисплей ».

Бұл нұсқаулықта мен сізге кез келген реттелетін таңбаның кодын нақты уақыт режимінде алуды және сол таңбаны Led Matrix -те басып шығаруды түсіндіремін.

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

Бұл нұсқаулық Adafruit HT16k33 Matrix бойынша негізгі жоба. Сізге қажет:

  1. Adafruit HT16k33 1,2 дюйм 1,2 дюймдік 8x8 екі түсті жарықдиодты матрица.
  2. Arduino (Uno -дан басқа кез келген нұсқа қолайлы).
  3. Нан тақтасы
  4. Нәр беруші

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

Схемалық
Схемалық
Схемалық
Схемалық

Adafruit HT16k33 светодиодты сымға қосу өте оңай, өйткені біз әдетте I2C құрылғыларында қолданылатын сағатты және деректер түйреуішін қосуымыз керек. Қосылымдар келесідей болады:

  1. A5 -ке қосылған SCL (матрицаның сағаттық түйреуі) (Arduino Uno -ның сағаттық түйреуі. Arduino -ның басқа нұсқалары үшін мәліметтер кестесін қараңыз)
  2. A4 -ке қосылған SDA (Matrix Data pin). (Arduino басқа нұсқалары үшін мәліметтер кестесін қараңыз)
  3. VCC 5В қосылған.
  4. GND 0V қосылған.

Сіз сондай -ақ суретте көрсетілген схемаға жүгіне аласыз.

3 -қадам: код

Код
Код
Код
Код

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; }

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

int power (int base, int exponent) {int c = 1; for (int i = 0; i {c = c*base;} c;} қайтару

Енді, ақырында, біз таңбаны басып шығару үшін кодты жазамыз, ондық ондық мәннен құралған массивті қолдана отырып (әр жолға бір).

жарамсыз 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 -ға тізбекті форматта жібереді. Мен қалған жұмысым үшін өңдеуді таңдадым. Өңдеу кезінде біз 64 батырманың көмегімен матрицаны жасай аламыз (басылған функциясы бар тіктөртбұрыштар) және бастапқыда белгілі бір мән мен түс тағайындай аламыз (0 мәні бар ақ түс болсын). Енді түйме басылған сайын біз түйменің түсін қара етіп түрлендіреміз және мәнді 1 -ге қоямыз. Егер пайдаланушы сол батырманы қайтадан басса, оның мәні қайтадан 0 -ге, түсі ақ түске өзгереді. Бұл пайдаланушыға кодты қайта -қайта оңай өзгертуге көмектеседі және бүкіл матрицаны қайтадан өшірмей, түзетулерді оңай енгізе алады. «Басып шығару» түймесін басу арқылы біз демонстрация үшін жоғарыда көрсетілгенге ұқсас жол жасаймыз. Содан кейін жол белгілі бір сериялық портқа жіберіледі.

Сіз өңдеу кодын төменнен жүктей аласыз. Бұл менің өңдеудегі бірінші кодым. Жақсартылған кодтау әдісі бойынша ұсыныстар жоғары бағаланады.

Сіз GUI қалай көрінетінін және жүйенің көмегімен таңбаның қалай жасалатынын көре аласыз. Матрицада бірдей таңбаны жасау үшін бірнеше секунд қажет емес.

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

Ұсынылған: