Мазмуну:
Video: Ыңгайлаштырылган белги генератору (Adafruit HT16k33 Matrix): 3 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:42
ЖК жана 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 боюнча негизги долбоор. Сизге керек:
- Adafruit HT16k33 1.2 "x 1.2" 8x8 Bicolor Led Matrix.
- Arduino (Uno эмес, башка вариант).
- Breadboard
- Электр камсыздоо
2 -кадам: схемалык
Adafruit HT16k33 Led матрицасын туташтыруу абдан оңой, анткени биз, адатта, I2C түзмөктөрүндөй болуп, саатты жана маалымат пинин туташтырышыбыз керек. Байланыштар мындай болот:
- SCL (Матрицанын сааты) A5ке туташкан (Arduino Unoнун сааты. Ардуинонун башка варианттары үчүн маалымат барагын караңыз)
- SDA (Матрицанын маалымат пини) A4 менен туташкан. (Ардуинонун башка варианттары үчүн маалымат барагын караңыз)
- VCC 5Vга туташкан.
- GND 0Vга туташты.
Ошондой эле сүрөттө көрсөтүлгөн схемага кайрылсаңыз болот.
3 -кадам: Код
Arduino коду
Биринчиден, биз керектүү бардык китепканаларды камтыйт.
- Wire.h:- I2C байланышы үчүн
- Adafruit_LedBackpack
- 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 репозиторийимден жүктөп алсаңыз болот.
Сунушталууда:
Видеоконференция үчүн кинематикалык белги: 7 кадам
Видеоконференция үчүн кинематикалык белги: Бул көрсөтмө сизге телеконференцияда болгондо жанып турган белгини кантип курууну үйрөтөт, ошондо башкалар сизди тынчсыздандырбасын
LED жарыктандырылган белги: 10 кадам (сүрөттөр менен)
Жарыктандырылган LED белгиси: Мына, мен бул LED арткы жарык белгисин чыгаруу үчүн жасаган кадамдар. Сиз бул инструкцияны колдонуп, өз дизайныңыздын арткы жарыктандырылган LED белгисин жасай аласыз. Бул долбоор абдан көп убакытты талап кылган жана аяктоо үчүн бир нече ресурстарды жана жабдууларды талап кылган. Бул шо
Аба ырайына негизделген музыка генератору (ESP8266 негизделген Midi генератору): 4 кадам (сүрөттөр менен)
Аба ырайына негизделген музыка генератору (ESP8266 негизделген Midi генератору): Саламатсызбы, мен бүгүн өзүңүздүн кичинекей аба ырайына негизделген музыкалык генераторду кантип жасоону түшүндүрүп берем. жана жарыктын интенсивдүүлүгү. Бул бүтүндөй ырларды же аккорд программасын түзөт деп күтпөңүз
Белги системасы: 5 кадам
Бейджик системасы: Бул белги системасы үчүн сизге бир нече электрондук компоненттер керек болот. Raspberry Pi 3B Arduino Uno Buzzer Led кызыл жана жашыл PIR LCD дисплей RFID сканери Реалдуу убакыт 4x 7 сегментинде секирүүчү зымдар көп
Программасыз анимацияланган LED белги тактасы: 3 кадам
Программалоосуз анимацияланган LED Белги тактасы: Бул программалоосуз же кандайдыр бир микро контролерсуз электрондук долбоор, бул долбоордо мен өз схемамдын жардамы менен өзүңүздүн жеке сөзүңүздүн ырдоо тактасын жасай аласыз, мен IC 74ls164 жана IC 555 анимация резисторун колдондум. сиз лед тактасын жасай аласыз