Jump to content

Search the Community

Showing results for tags 'lcd 1602'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Вопрос-Ответ. Для начинающих
    • Песочница (Q&A)
    • Дайте схему!
    • Школьникам и студентам
    • Начинающим
    • Паяльник TV
    • Обсуждение материалов с сайта
  • Радиоэлектроника для профессионалов
    • admin
    • Питание
    • Ремонт
    • Системы охраны и наблюдения. Личная безопасность
    • Роботы и модели на ДУ-управлении
    • Световые эффекты и LED
    • Самодельные устройства к компьютеру
    • Программное обеспечение
    • Металлоискатели
    • Автоматика
    • Электрика
    • Промышленная электроника
    • Измерительная техника
    • Мастерская радиолюбителя
    • КВ и УКВ радиосвязь
    • Радиопередатчики
    • Сотовая связь
    • Спутниковое ТВ
    • Телефония и фрикинг
    • Высокое напряжение
    • Идеи и технологии будущего
    • admin
    • Литература
    • Схемотехника для профессионалов
    • Разное
  • Аудио
    • FAQ, Технологии и компоненты
    • Для начинающих
    • Источники звука
    • Предусилители, темброблоки, фильтры
    • Питание аудио аппаратуры
    • Усилители мощности
    • Акустические системы
    • Авто-аудио
    • Ламповая техника
    • Гитарное оборудование
    • Прочее
  • Микроконтроллеры
    • МК для начинающих
    • admin
    • AVR
    • STM32
    • PIC
    • ПЛИС
    • Другие микроконтроллеры и семейства
    • Алгоритмы
    • Программаторы и отладочные модули
    • Периферия и внешние устройства
    • Разное
  • Товары и услуги
    • Коммерческие предложения
    • Продам-Отдам, Услуги
    • Куплю
    • Уголок потребителя
    • Вакансии и разовая работа
    • Наши обзоры и тесты
  • Разное
    • Курилка
    • Сайт Паяльник и форум
    • FAQ (Архив)
    • Технический английский (English)
    • Личные блоги
    • Наши проекты для Android и Web
    • Корзина
    • Конкурсы сайта с призами
    • Вопросы с VK
  • Переделки's ATX->ЛБП
  • Переделки's разные темы
  • Киловольты юмора's Юмор в youtube

Blogs

  • Твори, выдумывай, пробуй.
  • fant's блог
  • Ток покоя
  • Где купить велпатасвир, epclusa, velpanat, velasof, софосбувир в России по лучшей цене.
  • Китайские бренды видеокамер
  • Создание Маленькой Мастерской
  • Блог администрации
  • STEN50's блог
  • Изучение, наладка, исследование
  • MiSol62's блог
  • короткие записки по ходу дела
  • Программирование AVR и PIC блог
  • Стабилизированный выпрямитель тока ТЕС 12-3-НТ
  • Блог getshket
  • ТНПА
  • welder's блог
  • blog cheloveka loshadi
  • OPeX3's блог
  • Подводная робототехника
  • Сабвуфер и акустика.
  • Радиоуправляемая машина
  • Консультация психолога сексолога онлайн, психолог онлайн
  • Nokian блог
  • Оповещения Dermabellix Scam !! Не покупайте это !!!
  • Cheerful Boss' блог
  • Cheerful Boss' блог
  • VLAD1996B's блог
  • "Коллективное увеличение продаж"
  • Dudok's блог
  • "Коллективное увеличение продаж"
  • Goluboglazyi's блог
  • Прибор определяющий электролитический конденсатор на работоспособность.
  • Mosfet@'s блог
  • mazzi's блог
  • Лучшие компьютерные игры 2017
  • Marchenkokerya's блог
  • Заметки начинаущего аудиофила
  • Почти бесполезные проги
  • Светлый блог.
  • дядюшка Филин's блог
  • Дневники нуба
  • satyrn's блог
  • Люк. В погреб.
  • Фильм Дом Солнца
  • Светодиодная лента B-LED 2835-120 W белая негерметичная
  • Само-Реплицируещиеся Производственные Системы
  • Блог от Eknous
  • РВС's блог
  • Den_R's blog
  • РВС's блог
  • Чтото крутое и про криворукость
  • ekadom's блог
  • Проектирование любых чертежей
  • Lisovic's блог
  • Блог уже не юного радиогубителя
  • денди
  • eHouse
  • zaregan's блог
  • Схемотехника УНЧ с низковольтным питанием на примере приёмников фирмы Grundig
  • То, что в руки попало.
  • Блок питания водородного генератора и все что с ним связано
  • slava_va@mail.ru's блог
  • Блог alex123al97
  • slava_va@mail.ru's блог
  • параленое соединение КРЕНок или как сделать стабилизатор напряжения 24-12в
  • Свободная генерация Андрея Мельниченко
  • реобас
  • Модернизации системы впрыска на 555
  • помощь
  • Копии схем и печатных плат устройств попавшие ко мне
  • MBM75's блог
  • Буду
  • lagutai's блог
  • Мои проекты.
  • lagutai's блог
  • Трудовик
  • vOVK@'s блог
  • токарь-радиолюбитель
  • azlk3000's блог
  • Коллизия сингулярности
  • SmallAlex's блог
  • Вопрос по Цифровому усилителю мощности звука 2x12 Вт YDA138-E
  • bebulo's блог
  • Простейший макет станка термо-вакуумной формовки
  • Блог им. pryanic
  • peratronika
  • Zer's блог
  • MEDBEDb's
  • Гнездо кукушки
  • hiMiческий блог
  • luna_kamen's блог
  • Изучаем USI на основе сверхэкономичного прототипа
  • Алекс-Юстасу
  • SUBWOOFER.RU
  • kot sansher's блог
  • Поделки стареющего пионера
  • доброжелатель2's блог
  • Grig96. Полезные заметки.
  • Attiny 0-ой и 1-ой серии (Attiny817, 1614 и прочие)
  • pavlo's блог
  • MSP430FR
  • viper2's блог
  • Моя Электро Чинильня
  • Selyk's блог
  • VoltServis.ru
  • kpush's блог
  • OM3 на новых платах.
  • конни's блог
  • Электронный экстазёр "MASHKA".
  • ptimai's блог
  • noc functionalities
  • Sun kapitane's blog
  • ODEON AV-500
  • Sun kapitane's blog
  • Логика на транзисторах,диодах, счетние тригери на транзисторах
  • AleksandrBulchuck's блог
  • Качественные окна от производителя
  • KRALEX's блог
  • Javaman's projects
  • SeVeR36's блог
  • 3232
  • Пять копеек.
  • Az@t's блог
  • Индукционный нагрев
  • Схемы разных устройств
  • Кардшаринг SAT ТВ блог
  • PENTAGRID SAYS
  • Ещо раз о "Кощее 5И"
  • Игровые автоматы на официальном сайте
  • коллекционер
  • дямон's блог
  • Ламповый усилитель и акустика для озвучки семейных мероприятий
  • дямон's блог
  • tiosmutoutrup1971
  • Светомузыкальная установка для новачков
  • Лучшие игры для ПК скачать бесплатно
  • sqait's блог
  • Блокнотик
  • Gubernator's блог
  • Записки электрика
  • Полстакана
  • Vrednyuka
  • Интегральные микросхемы
  • grigorik's блог
  • Интегральные микросхемы
  • VMWare удобство и безопастность
  • Профсоюз обычных пользователей
  • rtfcnf's блог
  • Гидроэнергетика в России: отечественные гидроэлектростанции, типы и характеристики
  • VMWare удобство и безопастность
  • Лайфхаки от Кати
  • Kinh chong anh sang xanh gia re
  • ukabumaga's блог
  • АО "Диполь Технологии"
  • artos5's блог
  • блог
  • Kraftwerk's блог
  • 1
  • Kraftwerk's блог
  • Как выбрать точечный светильник?
  • мастерская ky3ne4ik'а
  • Работа с микроконтроллером Atmega8
  • Aronsky
  • Игорь Камский
  • Диммеры
  • 5В = 1,5+3
  • vitiv' блог
  • Ремонт цифровой панели прибора тойоты марк 100. Замена транзистора 36 ( SOT- 23 )PNP
  • Все СРО России
  • 300writers
  • Металлоискатель Tracker FM-1D3
  • Былое
  • Создание монстра "Blaster 8920"
  • 2Smart Cloud Blog
  • EmmGold's блог
  • 2Smart Cloud Blog
  • ivan15961596's блог
  • Кумир у-001
  • ivan15961596's блог
  • My blog
  • Интернет радио в машину
  • SamON
  • Помогите люди добрые
  • AI
  • Помогите подключить маяк 231 стерео.
  • Гаусс-пушки
  • Название
  • 7400's блог
  • Как я собирал свой первый импульсный источник питания
  • Віталік Приходько_130349's блог
  • Lithium ECAD - российская САПР печатных плат
  • Евгений Малюта's блог
  • ПИшу свои мысли
  • werekpro
  • Venera Electronica
  • afurgon's блог
  • Выбросьте это в парашу!
  • odaplus' блог
  • Zvik's блог
  • Smart overload protection power amplifier «Zita (Z) ThermalTrak™»
  • радиоэлектоника
  • BoBka777's блог
  • МиУЗР - Модернизация и Усовершенствование Звуковой Радиотехники .
  • aleksey9900's блог
  • Лабораторная блок питания
  • Нашел статью о пайке проводов к светодиодов
  • Китайский городовой
  • Костик0's блог
  • УФ лампа для маникюра SK-818
  • 8 Contrasts Between Web Servers and Application Servers
  • Конденсатор
  • Новости, обзоры и другая полезная информация от ИМ "Радиодар"
  • Цветомузыка
  • OPeX3's блог
  • Sem2012's блог
  • это не хлам – это часть моей жизни
  • Контроллер на базе ПК (OS Win LTSC)
  • OdiS' блог
  • Хитрости строителя
  • aleksfil's блог
  • Color Preamp - предусилитель на лампах 12AU7
  • Проблема с зарядкой литиевого аккумулятора для шуруповерта 21 вольт
  • EmmGold's блог; AVR
  • Микроэлектроника
  • З
  • CH32V
  • Блог Плотникова Ильи
  • Бесплатные радиодетали с Алиэкспресс
  • Повышение качества и снижение временных затрат при испытаниях электронных компонентов с помощью отечественного испытательного оборудования
  • Источники питания MEAN WELL
  • Жизнь и рыбалка
  • yureika's блог
  • Глушитель спутникогого интернета
  • Всякая всячина
  • Для начинающих
  • Ignite your senses with the grace and allure of female escorts near Laguna Niguel
  • Fumitox's блог
  • Наш-RXT6 топ-10 на январь 2023: Лучшие сайты онлайн казино в России
  • Лицензионные казино онлайн в 2024 году на реальные деньги
  • Самоделки блог
  • Домашняя автоматика
  • Интересное и полезное
  • Ремонт Амфитон 35у-101с
  • ульян's блог
  • Свет в грузовой газели
  • Блок питания 0-12В для начинающих
  • Список лучших онлайн казино (RU+KZ) по играм на реальные деньги: Легальные сайты России по рейтингу 2024
  • Dimko's блог
  • ЦАП на PCM1794 c прекрасным звучанием.
  • Иван Самец's блог
  • Стабилизатор напряжения
  • SolomonVR's блог
  • gfdbf
  • gendzz's блог
  • Функциональный генератор
  • fleh138's блог
  • Нужна ли система учета рабочего времени?
  • Электроника forever!
  • Лучшие лицензионные казино онлайн в России 2024 года, официальный рейтинг клубов
  • aleksejhozhenets' блог
  • Футбол
  • aleksejhozhenets' блог
  • Любитель радист
  • diserver блог
  • aleksey290476 блог
  • ВАРГ's блог
  • Люстра Чижевского
  • wanes101's блог
  • voldemar2009's блог
  • Jana's блог
  • Jana's блог
  • Рена Искужин's блог
  • abduraxman7's блог
  • Kuzumba's блог
  • Самопальник
  • заработок через интернет на запчасти!!!
  • electric.kiev's блог
  • lolo's блог
  • leravalera's блог
  • ideomatic's блог
  • приглашаем на работу инженера-радиоэлектронщика
  • FREEMAN_77's блог
  • Блог автоэлектрика
  • Блог начинающего электронщика
  • Dersu's блог
  • Электроэнергия и её экономия!
  • Электроэнергия и её экономия!
  • Семён Ковалёв's блог
  • piligrim-666's блог
  • помогите с партотивной калонкой
  • помогите с партотивной калонкой
  • Музыка в стене.
  • m-a-r-i-k-a's блог
  • cosmos44's блог
  • oyama14's блог
  • блог Виталика!
  • ciornii's блог
  • Великий и Ужастный блог
  • Denis__Ricov's блог
  • Universal12's блог
  • Sprut's блог
  • Alexeyslav's блог
  • cosmosemo's блог
  • Заметки радиолюбителя
  • Falconist. Мемуары
  • Блог MillyVolt
  • усилитель импульсов
  • Panasonic sa-ak 18
  • Простое радиоуправление из того, что было.
  • 35house
  • Блог Радиочайника
  • Блохи iiiytnik'a
  • Хороший сервис- Бяка
  • Аудиолаборатория "Философия Звука"
  • ОколоCADовое
  • Блог KVLADS
  • Короп блог
  • Автоматизация котла Protherm MTV
  • Бложиг Касянича
  • Обо всём
  • Эксперимент
  • No electronics
  • ПРИРОДА СВЕТА и ЕГО ВОЗМОЖНОСТИ
  • Генератор на xr2206
  • HTPOWLASER
  • Когда-то были очень популярны у радиолюбителей
  • AVR - микроконтроллеры
  • Микроконтроллер
  • Самодельный автосимулятор
  • Интернет-магазин керамической плитки «Боярская Плитка»
  • Разработка электронных метрических мишеней IPSC для мягкой пневматики (страйкбол)
  • ,

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Skype


ICQ


Интересы


Город


Сфера радиоэлектроники


Оборудование

Found 5 results

  1. Приобрел по случаю несколько данных модулей. По описанию продавца, "...принимaлa чeгo-то по 232 порту и выводила нa дисплей." Раньше встречался с подобными модулями (CE110, CE210: I2C контроллер ЖКИ и клавиатуры на PIC16F876), но там было подробное описание от производителя, а на этот нет никакой информации. Обратился к производителю, тот ответил: "This is other customer’s custom-made product item and we have signed DNA with other customer for this custom-made item. We are unable to sell this item and also provide any related information to you.", без комметариев. Будь устройство в сборе, можно было-бы поснифферить UART, а пока придется разбираться, что называется AS IS и, возможно, выяснять линии обмена с LCD и писать свою прошивку. Модуль пока не включал посмотрю, как он себя поведет после включения, и будет-ли активность на UART-е при нажатии кнопок и прозвоню доступные контрольные точки на плате, возможно это шина программирования, но уверен, что прошивка защищена. Возле 232-го чипа тоже 5 каких-то пинов. На сейчас два вопроса: 1. Самый очевидный и наиболее предсказуемый: может кто-нибудь имел дело с таким изделием? 2. Для выяснения распиновки шины LCD решил покупать себе логический анализатор, чтобы был свой, ибо фирменный теперь недоступен. Сейчас отложил 3: первые два: - https://aliexpress.ru/item/1005001621950241.html?spm=a2g2w.cart.cart_split.10.48ab4aa6xeZLT0&sku_id=12000016846593922&_ga=2.240102022.482015187.1700625783-1571267238.1700625783 - https://aliexpress.ru/item/1005006023889184.html?spm=a2g2w.cart.cart_split.8.48ab4aa6xeZLT0&sku_id=12000035368138955&_ga=2.16789308.482015187.1700625783-1571267238.1700625783 У второго комплектация побогаче, понятно, что он и подороже, но первый стОит 434р. с доставкой, но пока искал, обратил внимание, что подобные анализаторы, даже в минимальной комплектации, различаются по цене, иногда весьма значительно, например этот, вдвое дороже: https://aliexpress.ru/item/1005006199156574.html?sku_id=12000036235805994&spm=a2g2w.productlist.search_results.19.159e52bfzDsUdi они что, внутри по разному устроены? Или переплата за бренд? и еще один, с type-c и без корпуса: https://aliexpress.ru/item/1005005736923008.html?spm=a2g2w.cart.cart_split.5.48ab4aa6xeZLT0&sku_id=12000034162534598&_ga=2.117910540.482015187.1700625783-1571267238.1700625783 На первые два в сети приводятся фото внутренностей. Плата обильно усыпана SMD-элементами, а у этого плата почти голая, вот и возникают сомнения. Кто что посоветует?
  2. Недавно перешел с avr на stm32, для начала решил заказать Blue Pill. Нашел у себя дисплей MT-16S2H, почитал доку по нему и набросал код в Keil. Экран загорелся, но ничего на нем не появляется. И никак не могу понять или при инициализации накосячил или же с форматом вывода что-то. Кто работал с подобным, отпишитесь) Настраиваю на работу в 4х битном режиме. Работаю на порте B (PB4-PB7), A0 к B0, E к B1. main.c: #include "main.h" #define SYSLOCK 72000000U #define E1 GPIOB->BSRR |= GPIO_BSRR_BR1 #define E0 GPIOB->BSRR |= GPIO_BSRR_BS1 #define A1 GPIOB->BSRR |= GPIO_BSRR_BR0 #define A0 GPIOB->BSRR |= GPIO_BSRR_BS0 #define LCD_PINS0 GPIOB->BSRR |= (GPIO_BSRR_BS0 | GPIO_BSRR_BS1 | GPIO_BSRR_BS4 | GPIO_BSRR_BS5 | GPIO_BSRR_BS6 | GPIO_BSRR_BS7) #define LED_ON GPIOC->BSRR |= GPIO_BSRR_BR13 #define LED_OFF GPIOC->BSRR |= GPIO_BSRR_BS13 __IO static uint32_t SysTick_CNT = 0; void PORTS_INIT(void) { RCC->APB2ENR |= RCC_APB2ENR_IOPCEN | RCC_APB2ENR_IOPBEN; /*PORTC settings*/ GPIOC->CRH &= GPIO_CRH_CNF13; GPIOC->CRH |= GPIO_CRH_MODE13; /*A0(PB0) & E(BP1) INIT*/ GPIOB->CRL &= GPIO_CRL_CNF0; GPIOB->CRL |= GPIO_CRL_MODE0; GPIOB->CRL &= GPIO_CRL_CNF1; GPIOB->CRL |= GPIO_CRL_MODE1; /*PORTB PB4-PB7 settings*/ GPIOB->CRL &= GPIO_CRL_CNF4; GPIOB->CRL |= GPIO_CRL_MODE4; GPIOB->CRL &= GPIO_CRL_CNF5; GPIOB->CRL |= GPIO_CRL_MODE5; GPIOB->CRL &= GPIO_CRL_CNF6; GPIOB->CRL |= GPIO_CRL_MODE6; GPIOB->CRL &= GPIO_CRL_CNF7; GPIOB->CRL |= GPIO_CRL_MODE7; } void SysTick_INIT(void) { SysTick->LOAD &= ~SysTick_LOAD_RELOAD_Msk; SysTick->LOAD = SYSLOCK/(1000000-1); SysTick->VAL &= ~SysTick_VAL_CURRENT_Msk; SysTick->CTRL |= SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; } void delay_mks(uint32_t x) { SysTick->VAL &= ~SysTick_VAL_CURRENT_Msk; SysTick->VAL = SYSLOCK/(1000000-1); SysTick_CNT = x; while (SysTick_CNT); } void SysTick_Handler(void) { if (SysTick_CNT > 0) SysTick_CNT--; } void LCD_INIT(void) { LCD_PINS0; delay_mks(20000); sendbyte(0x33, 0); delay_mks(40); sendbyte(0x32, 0); delay_mks(40); sendbyte(0x28, 0); delay_mks(40); sendbyte(0x0C, 0); sendbyte(0x06, 0); sendbyte(0x01, 0); } void sendbyte(int16_t b, uint8_t mode) { LCD_PINS0; GPIOB->ODR &= ~(b & 0xF0); if (mode == 1) A1; else A0; pulse(); LCD_PINS0; GPIOB->ODR &= ~((b & 0x0F) << 4); if (mode == 1) A1; else A0; pulse(); } void pulse(void) { E0; delay_mks(22); E1; delay_mks(22); E0; delay_mks(22); } void sendChar(char *e) { char *text; text = e; while ((*text != 0) && (*text != 0)) { sendbyte(*text, 1); text++; } } void setPos(uint8_t row, uint8_t col) { uint8_t address = 0; if (row == 0) address = 0; else address = 0x40; address |= col; sendbyte(0x80 | address, 0); } int main(void) { PORTS_INIT(); SysTick_INIT(); LCD_INIT(); setPos(0,2); sendChar("sass"); while(1) { /* LED_ON; delay_mks(200000); LED_OFF; delay_mks(200000);*/ } }
  3. имеем: ардуино нано дисплей 1602 с i2c переходником блок релюшек 4 кнопки. все работало около часа при различних кнопкотыканиях. и на испытании произошла непонятная програмная ошибка: сначала вылезли случайные символы потом потухла подсветка, хотя как понял она управляется перемычкой. при дальнейшем перезапуске на выходах висит 0 и нет никакой реакции на нажатия. убрал из программы дисплей и она заработала. пробовал переустановить библиотеки liquid cristal i2c но не помогло. пробовал отключать дисплей. даже инвертированные выходы лежат в 0. код прилагаю #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C _lcd1(0x27, 16, 2); int _dispTempLength1=0; boolean _isNeedClearDisp1; const byte _menuParametrsArray[] PROGMEM = {1, 3, 2, 0, 0, 0, 5, 6, 1, 8, 3, 0, 2, 3, 1, 0, 0, 0, 5, 6, 1, 8, 1, 0, 3, 4, 1, 0, 0, 0, 2, 3, 1, 4, 2, 0, 4, 3, 3, 0, 0, 0, 5, 6, 1, 8, 4, 0}; bool _menuValueArray_bool[3]; const bool _menuConstantValuesArray_bool[] PROGMEM = {1, 0}; int _menuValueArray_int[1]; const int _menuConstantValuesArray_int[] PROGMEM = {3, 15, -3}; const char _flprogMenuNameString1[] PROGMEM = "dislink"; const char _flprogMenuNameString2[] PROGMEM = "attenuator"; const char _flprogMenuNameString3[] PROGMEM = "cross line"; const char _flprogMenuNameString4[] PROGMEM = "noise generaror"; const char _flprogMenuNameString5[] PROGMEM = "ON"; const char _flprogMenuNameString6[] PROGMEM = "OFF"; const char* const _flprogMenuStringsArray[] PROGMEM = { _flprogMenuNameString1, _flprogMenuNameString2, _flprogMenuNameString3, _flprogMenuNameString4, _flprogMenuNameString5, _flprogMenuNameString6}; struct _menuItemStricture { int startInArrayIndex; } ; struct _menuMainStricture { byte startIndex; byte stopIndex; bool isSwitchMenuAroundRing; _menuItemStricture currentItem; } ; _menuItemStricture _MenuItems[4]; _menuMainStricture _MainMenus[1]; String _MenuBlock_41244328_MNO; String _MenuBlock_41244328_VNO; bool _MenuBlock_41244328_OEIS = 0; bool _MenuBlock_41244328_OMUIS = 0; bool _MenuBlock_41244328_OMDIS = 0; bool _MenuBlock_41244328_OVUIS = 0; bool _MenuBlock_41244328_OVDIS = 0; bool _bounseInputD0S = 0; bool _bounseInputD0O = 0; unsigned long _bounseInputD0P = 0UL; int _disp2oldLength = 0; bool _bounseInputD2S = 0; bool _bounseInputD2O = 0; unsigned long _bounseInputD2P = 0UL; int _disp1oldLength = 0; bool _bounseInputD1S = 0; bool _bounseInputD1O = 0; unsigned long _bounseInputD1P = 0UL; bool _bounseInputD3S = 0; bool _bounseInputD3O = 0; unsigned long _bounseInputD3P = 0UL; bool _tempVariable_bool; byte _tempVariable_byte; void setup() { pinMode(0, INPUT_PULLUP); pinMode(1, INPUT_PULLUP); pinMode(2, INPUT_PULLUP); pinMode(3, INPUT_PULLUP); pinMode(4, OUTPUT); digitalWrite(4, 0); pinMode(5, OUTPUT); digitalWrite(5, 0); pinMode(6, OUTPUT); digitalWrite(6, 0); pinMode(7, OUTPUT); digitalWrite(7, 0); pinMode(8, OUTPUT); digitalWrite(8, 0); pinMode(9, OUTPUT); digitalWrite(9, 0); pinMode(10, OUTPUT); digitalWrite(10, 0); pinMode(11, OUTPUT); digitalWrite(11, 0); pinMode(12, OUTPUT); digitalWrite(12, 0); pinMode(13, OUTPUT); digitalWrite(13, 0); Wire.begin(); delay(10); _lcd1.init(); _lcd1.backlight(); _bounseInputD0O = digitalRead(0); _bounseInputD3O = digitalRead(3); _bounseInputD1O = digitalRead(1); _bounseInputD2O = digitalRead(2); _MenuItems[0].startInArrayIndex = 0; _MenuItems[1].startInArrayIndex = 12; _MenuItems[2].startInArrayIndex = 24; _MenuItems[3].startInArrayIndex = 36; _MainMenus[0].startIndex = 1; _MainMenus[0].isSwitchMenuAroundRing = 1; _MainMenus[0].stopIndex = 4; _MainMenus[0].currentItem = _MenuItems[0]; } void loop() { if (_isNeedClearDisp1) { _lcd1.clear(); _isNeedClearDisp1= 0; } bool _bounceInputTmpD0 = (digitalRead (0)); if (_bounseInputD0S) { if (millis() >= (_bounseInputD0P + 40)) { _bounseInputD0O= _bounceInputTmpD0; _bounseInputD0S=0; } } else { if (_bounceInputTmpD0 != _bounseInputD0O) { _bounseInputD0S=1; _bounseInputD0P = millis(); } } bool _bounceInputTmpD3 = (digitalRead (3)); if (_bounseInputD3S) { if (millis() >= (_bounseInputD3P + 40)) { _bounseInputD3O= _bounceInputTmpD3; _bounseInputD3S=0; } } else { if (_bounceInputTmpD3 != _bounseInputD3O) { _bounseInputD3S=1; _bounseInputD3P = millis(); } } bool _bounceInputTmpD1 = (digitalRead (1)); if (_bounseInputD1S) { if (millis() >= (_bounseInputD1P + 40)) { _bounseInputD1O= _bounceInputTmpD1; _bounseInputD1S=0; } } else { if (_bounceInputTmpD1 != _bounseInputD1O) { _bounseInputD1S=1; _bounseInputD1P = millis(); } } bool _bounceInputTmpD2 = (digitalRead (2)); if (_bounseInputD2S) { if (millis() >= (_bounseInputD2P + 40)) { _bounseInputD2O= _bounceInputTmpD2; _bounseInputD2S=0; } } else { if (_bounceInputTmpD2 != _bounseInputD2O) { _bounseInputD2S=1; _bounseInputD2P = millis(); } } //Плата:1 digitalWrite(4, (_menuValueArray_bool[1])); digitalWrite(5, !((_menuValueArray_bool[0]))); digitalWrite(13, ((((_bounseInputD0O) || (_bounseInputD1O))) || (((_bounseInputD3O) || (_bounseInputD2O))))); if (1) { _tempVariable_bool = 1; if (! _MenuBlock_41244328_OEIS) { _MenuBlock_41244328_OEIS = 1; } _tempVariable_byte = pgm_read_byte(&_menuParametrsArray[((_MainMenus[0].currentItem).startInArrayIndex)+10]); _MenuBlock_41244328_MNO = _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[_tempVariable_byte - 1]))); _MenuBlock_41244328_VNO = _menuOutputValueString (0); } else { _tempVariable_bool = 0; if (_MenuBlock_41244328_OEIS) { _MenuBlock_41244328_OEIS = 0; } _MenuBlock_41244328_MNO = ""; _MenuBlock_41244328_VNO = ""; } if(_bounseInputD0O) { if (! _MenuBlock_41244328_OMUIS) { _MenuBlock_41244328_OMUIS = 1; if(_tempVariable_bool) { _menuUpEvents(0); } } } else { _MenuBlock_41244328_OMUIS = 0; } if(_bounseInputD1O) { if (! _MenuBlock_41244328_OMDIS) { _MenuBlock_41244328_OMDIS = 1; if(_tempVariable_bool) { _menuDownEvents(0); } } } else { _MenuBlock_41244328_OMDIS = 0; } if(_bounseInputD3O) { if (! _MenuBlock_41244328_OVUIS) { _MenuBlock_41244328_OVUIS = 1; if(_tempVariable_bool) { _valueUpEvents(0); } } } else { _MenuBlock_41244328_OVUIS = 0; } if(_bounseInputD2O) { if (! _MenuBlock_41244328_OVDIS) { _MenuBlock_41244328_OVDIS = 1; if(_tempVariable_bool) { _valueDownEvents(0); } } } else { _MenuBlock_41244328_OVDIS = 0; } if (1) { _dispTempLength1 = ((_MenuBlock_41244328_VNO)).length(); if (_disp2oldLength > _dispTempLength1) { _isNeedClearDisp1 = 1; } _disp2oldLength = _dispTempLength1; _lcd1.setCursor(0, 1); _lcd1.print((_MenuBlock_41244328_VNO)); } else { if (_disp2oldLength > 0) { _isNeedClearDisp1 = 1; _disp2oldLength = 0; } } if (1) { _dispTempLength1 = ((_MenuBlock_41244328_MNO)).length(); if (_disp1oldLength > _dispTempLength1) { _isNeedClearDisp1 = 1; } _disp1oldLength = _dispTempLength1; _lcd1.setCursor(0, 0); _lcd1.print((_MenuBlock_41244328_MNO)); } else { if (_disp1oldLength > 0) { _isNeedClearDisp1 = 1; _disp1oldLength = 0; } } digitalWrite(6, !((_menuValueArray_bool[2]))); digitalWrite(7, !(((String("0")).equals((String(0, DEC)))))); digitalWrite(8, !(((String("3")).equals((String(0, DEC)))))); digitalWrite(9, !(((String("6")).equals((String(0, DEC)))))); digitalWrite(10, !(((String("9")).equals((String(0, DEC)))))); digitalWrite(11, !(((String("12")).equals((String(0, DEC)))))); digitalWrite(12, !(((String("-3")).equals((String(0, DEC)))))); } String _readStringFromProgmem (char *string) { String result = String(""); while (pgm_read_byte(string)!='\0') { result=result+ char(pgm_read_byte(string)); string++; } return result; } void _menuUpEvents (byte menuIndex) { byte tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]); byte parIndex = pgm_read_byte(&_menuParametrsArray[ (((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+5]); byte parentStartIndex; byte parentStopIndex; if (parIndex == 0) { parentStartIndex = (_MainMenus[menuIndex]).startIndex; parentStopIndex =(_MainMenus[menuIndex]).stopIndex; } else { parentStartIndex = pgm_read_byte(&_menuParametrsArray[((_MenuItems[parIndex - 1]).startInArrayIndex)+3]); parentStopIndex = pgm_read_byte(&_menuParametrsArray[((_MenuItems[parIndex-1]).startInArrayIndex)+4]); } if (tempIndex == parentStartIndex) { if((_MainMenus[menuIndex]).isSwitchMenuAroundRing) { (_MainMenus[menuIndex]).currentItem = _MenuItems[parentStopIndex -1]; return; } else { return; } } (_MainMenus[menuIndex]).currentItem = _MenuItems[tempIndex - 2]; return; } void _menuDownEvents (byte menuIndex) { byte tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]); byte parIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+5]); byte parentStartIndex; byte parentStopIndex; if (parIndex == 0) { parentStartIndex = (_MainMenus[menuIndex]).startIndex; parentStopIndex =(_MainMenus[menuIndex]).stopIndex; } else { parentStartIndex = pgm_read_byte(&_menuParametrsArray[((_MenuItems[parIndex-1]).startInArrayIndex)+3]); parentStopIndex = pgm_read_byte(&_menuParametrsArray[((_MenuItems[parIndex-1]).startInArrayIndex)+4]); } if (tempIndex == parentStopIndex) { if((_MainMenus[menuIndex]).isSwitchMenuAroundRing) { (_MainMenus[menuIndex]).currentItem = _MenuItems[parentStartIndex -1]; return; } else { return; } } (_MainMenus[menuIndex]).currentItem = _MenuItems[tempIndex]; return; } void _valueUpEvents (byte menuIndex) { byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+2]); byte itemType = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+1]); byte indexMax = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+6]); byte indexStep = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+8]); if(itemType ==3) { _menuValueArray_bool[valIndex - 1 ] = 1; return; } if (itemType == 4) { if (! indexMax == 0) { if (! (int(pgm_read_word(&_menuConstantValuesArray_int[indexMax -1])) > int(_menuValueArray_int[valIndex -1]))) { return; } } _menuValueArray_int[valIndex -1] = _menuValueArray_int[valIndex -1] + (pgm_read_word(&_menuConstantValuesArray_int[indexStep -1])); } } void _valueDownEvents (byte menuIndex) { byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+2]); byte itemType = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+1]); byte indexMin = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+7]); byte indexStep = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+8]); if(itemType ==3) { _menuValueArray_bool[valIndex -1] = 0; return; } if (itemType == 4) { if (! indexMin == 0) { if (! ((int(pgm_read_word(&_menuConstantValuesArray_int[indexMin - 1]))) < int(_menuValueArray_int[valIndex - 1]))) { return; } } _menuValueArray_int[valIndex - 1] = _menuValueArray_int[valIndex - 1] - (pgm_read_word(&_menuConstantValuesArray_int[indexStep - 1])); } } String _menuOutputValueString (byte menuIndex) { byte itemType = pgm_read_byte(&_menuParametrsArray[ (((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+1]); byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+2]); byte indexMin = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+7]); byte indexMax = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+6]); if(valIndex == 0) { return ""; } byte convFormat = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+9]); if(itemType == 3) { return _convertBoolean(itemType, convFormat, valIndex, indexMax, indexMin); } if(itemType == 4) { return _convertNamber(itemType, convFormat, valIndex, indexMax, indexMin); } return ""; } String _convertNamber(byte itemType, byte convFormat, byte valIndex, byte indexMax, byte indexMin) { if (itemType== 4) { if (convFormat == 4) { return String((_menuValueArray_int[valIndex - 1 ]),DEC); } if (convFormat == 5) { return String((_menuValueArray_int[valIndex - 1]),HEX); } if (convFormat == 6) { return String((_menuValueArray_int[valIndex -1]),BIN); } } } String _convertBoolean(byte itemType, byte convFormat, byte valIndex, byte indexMax, byte indexMin) { if (convFormat == 1) { if(_menuValueArray_bool[valIndex -1]) { return "1"; } else { return "0"; } } if (convFormat == 2) { if(_menuValueArray_bool[valIndex -1]) { return "True"; } else { return "False"; } } if (convFormat == 3) { if(_menuValueArray_bool[valIndex -1 ]) { return "Да"; } else { return "Нет"; } } if(_menuValueArray_bool[valIndex -1]) { return _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[indexMax - 1]))); } else { return _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[indexMin - 1]))); } } пишу в flprog i2c сканер тоже молчит и не отправляет данные через порт
  4. Программа-счетчик ампер-часов В ней условие //=====Напряжение минимальное при разрядке аккумулятора============================ if (volt <= 1050) // Если напряжение меньше-равно 10.50 вольт { PORTD |= (1<<PD7); // Устанавливаем бит 7 порта D в 1 (светодиод горит) } else { // Иначе PORTD &= ~( 1 << PD7 );// Устанавливаем бит 7 порта D в 0 (светодиод не горит) } Как проще добавить несколько вариантов условий if (volt <= 1050) // Если напряжение меньше-равно 10.50 вольт для разных напряжений, чтобы при запуске программы можно было выбрать и задействовать нужное? Я ничего подобного раньше еще не делал, так что прошу отнестись соответственно.
  5. Здравствуйте. Прошу Вас оказать помощь в нахождении ошибки в коде. Ниже приведён код цель которого выдавать соответствующие события на дисплей. Но при комбинации 1 го и 6 сообщения на экран циклично выходит абракадабра. Также прилагаю ссылку на видео демонстрирующую данную проблему. На многих форумах просил помочь найти проблему но пока без результата. Прошу не проходите мимо, Залейте этот скетч в ардуино и подключите только LCD 1602 и по истечению 1 минуты увидите мою проблему. За ранее благодарю. https://youtu.be/lFPrrpiXIzY #include <LiquidCrystal_I2C.h> #include <Wire.h> LiquidCrystal_I2C lcd(0x27,16,2); // устанавливаем адрес 0x27, и дисплей 16 символов в 2 строки (16х2) #define BUTTON_PIN 2 #define RX_PIN 0 #define TX_PIN 1 #define BUZZER_PIN 9 #define BACKLIGHT_PIN 13 #define LCD_HEIGHT 2 #define LCD_WIDTH 16 #define MSG_COUNT 8 boolean needUpdateLCD = true; // флаг-признак необходимости одновить данные на дисплее String lcdBuffer[LCD_HEIGHT]; const unsigned int updateTime = 2000; // интервал смены надписей в нижней строке const unsigned int flashTime = 250; // интервал мигания цифр (при аварии) boolean msgFlag[MSG_COUNT] = {0, 0, 0, 0, 0, 0, 0, 0 }; // флаги текущих состояний UPS (1 - это авария) const String message[MSG_COUNT] = { // сообщения об авариях "U1 Inverter Off ", "U1 On Battery ", "U1 General Alarm", "U1 Inverter Off ", "U2 Inverter Off ", "U2 On Battery ", "U2 General Alarm", "U2 Inverter Off ", }; #define TIMEOUT(tm, lastTm) (millis() - lastTm > tm) // принять как аксиому :) /*-----( Import needed libraries )-----*/ // Set the pins on the I2C chip used for LCD connections: // addr, en,rw,rs,d4,d5,d6,d7,bl,blpol //LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address //LiquidCrystal_I2C lcd(0x27, BACKLIGHT_PIN, POSITIVE); // Set the LCD I2C address // Прототипы функций (чтобы компилятор не ругался) void displayData(); void dataManager(); void buzzer(byte pin); void readButtons(byte pin); void readSerial(byte rxPin); void sendData(byte txPin); void loop() { readButtons(BUTTON_PIN); // сканируем кнопку readSerial(RX_PIN); // слушаем Serial dataManager(); // обработка данных sendData(TX_PIN); // отправка данных displayData(); // отображение информации buzzer(BUZZER_PIN); // звуковые уведомления ledControl(); // моргание нужными LED } void dataManager() { // тут обработка каких-то данных // ... // эмуляция неисправности трех UPS через 1 мин после включения питания if (millis() > 5000) { msgFlag[0] = true; // авария на 1-м UPS //msgFlag[1] = true; // авария на 2-м UPS //msgFlag[2] = true; // авария на 3-м UPS //msgFlag[3] = true; // авария на 4-м UPS //msgFlag[4] = true; // авария на 5-м UPS msgFlag[5] = true; // авария на 6-м UPS //msgFlag[6] = true; // авария на 7-м UPS //msgFlag[7] = true; // авария на 8-м UPS } } void displayData() { // формирование первой строки для вывода на дисплей static unsigned long lastFlashTime; lcdBuffer[0] = "1 2 3 4 5 6 7 8"; // шаблон для первой строки if (TIMEOUT(flashTime, lastFlashTime)) // каждые 0,25 сек формируем первую строку { static boolean flashFlag = true; if (flashFlag) { // проверяем флаги на наличие ошибок for (byte ups = 1; ups <= MSG_COUNT; ups++) if (msgFlag[ups - 1]) lcdBuffer[0].replace(String(ups), "x"); // где ошибка - ставим хер } flashFlag = !flashFlag; lastFlashTime = millis(); needUpdateLCD = true; } // формирование второй строки для вывода на дисплей static unsigned long lastUpdateTime; if (TIMEOUT(updateTime, lastUpdateTime)) // каждые 2 сек формируем вторую строку { lcdBuffer[1] = " "; // 20 пробелов (у меня 20 знаков на дисплее) lastUpdateTime = millis(); //needUpdateLCD = true; // не нужно, т.к. первая строка все равно чаще обновляет ЖК byte ups = 0; while (!msgFlag[ups]) // проверяем флаги на наличие ошибок { ups++; if (ups >= MSG_COUNT) // если нет ни одной ошибки, то выходим { ups = 0; return; } } // сюда попадаем, если есть хоть одна ошибка static byte c = 0; while (!msgFlag[c]) c++; // пропускаем сообщения, к которым ошибка не относится lcdBuffer[1] = message[c]; // буферизуем сообщение c++; // чередуем все сообщения об ошибках if (c >= MSG_COUNT - 1) c = 0; } // обновление данных на дисплее if (needUpdateLCD) { lcd.setCursor(0, 0); lcd.print(lcdBuffer[0]); lcd.setCursor(0, 1); lcd.print(lcdBuffer[1]); needUpdateLCD = false; } // if } // displayData void ledControl() { } void buzzer(byte pin) { } void readButtons(byte pin) { } void readSerial(byte rxPin) { } void sendData(byte txPin) { } void setup() { lcd.init(); // инициализация LCD lcd.backlight(); // включаем подсветку pinMode ( BACKLIGHT_PIN, OUTPUT ); digitalWrite ( BACKLIGHT_PIN, HIGH ); lcd.begin(LCD_WIDTH, LCD_HEIGHT); lcd.backlight(); // finish with backlight on lcd.clear(); }
×
×
  • Create New...