Arduino Uno и семисегментный индикатор с общим анодом
Помогите новичку. Есть Arduino Uno и семисегментный индикатор с общим анодом (то есть общий +, если ошибся с наименованием). На плате 6 аналоговых выводов, на которые могу подать потенциал земли чтобы светились светодиоды. А вот седьмой светодиод остается незадействованным. Можно ли подать потенциал земли на остальные выводы?
Знаю о выводах GND, но мне нужно или подавать землю, или убирать его для отображения различных цифр, а здесь земля постоянная. |
это не совсем аналоговые выводы, это входы АЦП, подключайся на цифровые.
гугл в помощь: "arduino uno подключение семисегментного индикатора" |
Цитата:
|
Вложений: 1
Цитата:
Вложение 241847 Цитата:
|
Сам столкнулся с такой проблемой, думал сначала использовать транзисторы как ключи и ими включать светодиоды в семисегментнике, искал на просторах интернета решение сией проблемы, толком ничего и не нашел, варианты были через сдвиговый регистр, таким сам не располагаю пока, все решилось куда проще.
Вот программа секундомера для С.И. с общим КАТОДОМ (-) #define FIRST_SEGMENT_PIN 2 #define SEGMENT_COUNT 7 byte numberSegments[10] = { 0b00111111, 0b00001010, 0b01011101, 0b01011110, 0b01101010, 0b01110110, 0b01110111, 0b00011010, 0b01111111, 0b01111110, }; void setup() { for (int i = 0; i < SEGMENT_COUNT; ++i) pinMode(i + FIRST_SEGMENT_PIN, OUTPUT); } void loop() { int number = (millis() / 1000) % 10; int mask = numberSegments[number]; for (int i = 0; i < SEGMENT_COUNT; ++i) { boolean enableSegment = bitRead(mask, i); digitalWrite(i + FIRST_SEGMENT_PIN, enableSegment); } } в случае когда С.И. с общим анодом, все следует подключать аналогичным образом, но подсоединяем не к земле общий анод, а к 13му пину, к примеру, в программе прописываем #define LED_PIN 13 3й строчкой, в void setup () добавляем pinMode(LED_PIN, OUTPUT); и в void loop() digitalWrite(13, HIGH); и самое главное теперь, меняем цифры в комбинациях сегментов на противоположные значения, получилось так { 0b01000000, 0b01110101, 0b00100010, 0b00100001, 0b00010101, 0b00001001, 0b00001000, 0b01100101, 0b00000000, 0b00000001,} в итоге программа выглядит так: #define FIRST_SEGMENT_PIN 2 #define SEGMENT_COUNT 7 #define LED_PIN 13 byte numberSegments[10] = { 0b01000000, 0b01110101, 0b00100010, 0b00100001, 0b00010101, 0b00001001, 0b00001000, 0b01100101, 0b00000000, 0b00000001, }; void setup() { for (int i = 0; i < SEGMENT_COUNT; ++i) pinMode(i + FIRST_SEGMENT_PIN, OUTPUT); pinMode(LED_PIN, OUTPUT); } void loop() { digitalWrite(13, HIGH); int number = (millis() / 1000) % 10; int mask = numberSegments[number]; for (int i = 0; i < SEGMENT_COUNT; ++i) { boolean enableSegment = bitRead(mask, i); digitalWrite(i + FIRST_SEGMENT_PIN, enableSegment); } } |
могу ли сюда писать? :cebur:
|
С.И. с общим анодом (ELD-436GWB\S411) + arduino uno.
Вложений: 3
Здравствуйте! Попался под руки семисегментный индикатор(ELD-436GWB\S411) от стиралки, с общим анодом. Подключил его одну секцию к портам arduino uno через резистор 330 Ом:
A-2; B-3; C-4; D-5; E-6; F-7; G-8; Общ.Анод-13. И по совету Висмута написал код (перебирает числа) Задержка delay задаёт интервал перебора. Код громоздкий, но для понимания, думаю, самое то... И ещё, в моём случае при такой конфигурации максимальный ток потребляет около 35 мА, что не совсем полезно ардуине, так что расчеты производите по своим данным. Код:
#define Aa 2 Вложение 434091 Вложение 434092 Вложение 434093 |
Datasheet ELD-436GWB\S411
Вложений: 1
|
Часовой пояс GMT +4, время: 22:11. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.