Есть arduino nano v.3 есть дисплей TM1637
качаю и ставлю библиотеку GyverTM1637
заливаю demo скетч из библиотеки. Все отлично работает если запитан от usb компа, но стоит подключить внешнее питание на uin 12v так дисплей начинает странно себя вести и глючить, некоторые разряды могут не отображаться или только один разряд из 4х. Может после подачи питания вообще долго не загораться. Дисплей запитан от выхода 5v arduino.
Подскажите в чем может быть проблема? Заранее спасибо)
Очевидно, в питании.
Зелёный провод неправильно присоединён и в строке №23 скетча ошибка.
А вообще, раз уж Вы
так и задавайте вопросы на https://community.alexgyver.ru/ Или с какой целью Вы это делали?
ясно, что в питании. что можно и как продиагностировать?
очевидно проблема не в скече и библиотеке, а в питании
Так я и сказал про зелёный провод.
А в скетче проблема тоже есть, просто Вы её пока не заметили.
Евгений, не темните. Подскажите чайнику, где проблема?
Проблема в том, что Вы задаёте вопрос, связанный с электроникой и программированием БЕЗ СХЕМЫ устройства и БЕЗ ТЕКСТА программы. Также, крайне желательно фото сборки, т.к. практика показывает, что схема не всегда соответствует тому, что реально собрано.
Откуда нам знать, что там у Вас и как? Вот я и намекаю про “зелёный провод”, про номер строки кода, а до Вас всё никак не дойдёт, что никто не может Вам помочь, пока не увидит что Вы там наворотили.
Ну, а то, что в коде есть проблема, так это очевидно - и не одна. Вы же GyverTM1637 используете.
/*
Пример вывода на дисплей с регистром TM1637
показывает все возможности библиотеки GyverTM1637
AlexGyver Technologies http://alexgyver.ru/
*/
#define CLK 2
#define DIO 3
#include "GyverTM1637.h"
GyverTM1637 disp(CLK, DIO);
uint32_t Now, clocktimer;
boolean flag;
void setup() {
Serial.begin(9600);
disp.clear();
disp.brightness(7); // яркость, 0 - 7 (минимум - максимум)
}
void loop() {
runningText();
scrolls();
scrollClock();
twists();
twistClock();
ints();
bytes();
fadeBlink();
normClock();
}
void twists() {
// скручивание массив ЦИФР
byte digs[4] = {3, 5, 7, 1};
disp.twist(digs, 50); // скорость прокрутки 100
delay(1000);
// скручивание прицельно (ячейка, БАЙТ, скорость)
disp.twistByte(0, _1, 50);
delay(1000);
// скручивание прицельно (ячейка, ЦИФРА, скорость)
disp.twist(0, 8, 70);
delay(1000);
disp.clear();
delay(200);
for (byte i = 0; i < 10; i++) {
disp.twist(3, i, 20);
delay(200);
}
// скручивание массива БАЙТ
byte troll[4] = {_t, _r, _o, _l};
disp.twistByte(troll, 50);
delay(1000);
// прицельное скручивание БАЙТА (ячейка, байт, скорость)
disp.twistByte(2, _G, 50);
delay(1000);
}
void twistClock() {
byte hrs = 21, mins = 55;
uint32_t tmr;
Now = millis();
while (millis () - Now < 10000) { // каждые 10 секунд
if (millis() - tmr > 500) { // каждые полсекунды
tmr = millis();
flag = !flag;
disp.point(flag); // выкл/выкл точки
if (flag) {
// ***** часы! ****
mins ++;
if (mins > 59) {
mins = 0;
hrs++;
if (hrs > 24) hrs = 0;
}
// ***** часы! ****
disp.displayClockTwist(hrs, mins, 35); // выводим время
}
}
}
disp.point(0); // выкл точки
}
void scrolls() {
// прокрутка массив ЦИФР
byte digs[4] = {3, 5, 7, 1};
disp.scroll(digs, 100); // скорость прокрутки 100
delay(1000);
// прокрутка прицельно (ячейка, ЦИФРА, скорость)
disp.scroll(0, 8, 200);
delay(1000);
disp.clear();
delay(1000);
for (byte i = 0; i < 10; i++) {
disp.scroll(3, i, 50);
delay(400);
}
// прокрутка массива БАЙТ
byte troll[4] = {_t, _r, _o, _l};
disp.scrollByte(troll, 100);
delay(1000);
// прицельная прокрутка БАЙТА (ячейка, байт, скорость)
disp.scrollByte(2, _G, 50);
delay(1000);
}
void bytes() {
// выводим байты из массива
byte troll[4] = {_t, _r, _o, _l};
disp.displayByte(troll);
delay(1000);
// выводим байты напрямую (4 в скобках)
disp.displayByte(_L, _O, _L, _empty);
delay(1000);
// выводим байты "прицельно"
disp.displayByte(3, _O); // 3 ячейка, буква О
delay(1000);
// выводим цифры из массива
byte hell[4] = {6, 6, 6, 6};
disp.display(hell);
delay(1000);
// выводим цифры напрямую (4 в скобках)
disp.display(1, 2, 3, 4);
delay(1000);
// выводим цифры "прицельно"
disp.display(0, 9); // 0 ячейка, цифра 9
delay(1000);
}
void fadeBlink() {
// пишем HELL
disp.displayByte(_H, _E, _L, _L);
Now = millis();
while (millis () - Now < 3000) { // 3 секунды
for (int i = 7; i > 0; i--) {
disp.brightness(i); // меняем яркость
delay(40);
}
for (int i = 0; i < 8; i++) {
disp.brightness(i); // меняем яркость
delay(40);
}
}
}
void scrollClock() {
byte hrs = 15, mins = 0;
uint32_t tmr;
Now = millis();
while (millis () - Now < 10000) { // каждые 10 секунд
if (millis() - tmr > 500) { // каждые полсекунды
tmr = millis();
flag = !flag;
disp.point(flag); // выкл/выкл точки
if (flag) {
// ***** часы! ****
mins ++;
if (mins > 59) {
mins = 0;
hrs++;
if (hrs > 24) hrs = 0;
}
// ***** часы! ****
disp.displayClockScroll(hrs, mins, 70); // выводим время
}
}
}
disp.point(0); // выкл точки
}
void normClock() {
byte hrs = 15, mins = 0;
uint32_t tmr;
Now = millis();
while (millis () - Now < 10000) { // каждые 10 секунд
if (millis() - tmr > 500) { // каждые полсекунды
tmr = millis();
flag = !flag;
disp.point(flag); // выкл/выкл точки
// ***** часы! ****
mins ++;
if (mins > 59) {
mins = 0;
hrs++;
if (hrs > 24) hrs = 0;
}
// ***** часы! ****
disp.displayClock(hrs, mins); // выводим время функцией часов
}
}
disp.point(0); // выкл точки
}
void ints() {
// тупо отправляем цифры
disp.displayInt(-999);
delay(500);
disp.displayInt(-99);
delay(500);
disp.displayInt(-9);
delay(500);
disp.displayInt(0);
delay(500);
disp.displayInt(6);
delay(500);
disp.displayInt(66);
delay(500);
disp.displayInt(666);
delay(500);
disp.displayInt(6666);
delay(500);
}
void runningText() {
byte welcome_banner[] = {_H, _E, _L, _L, _O, _empty, _empty,
_e, _n, _j, _o, _y, _empty, _empty,
_1, _6, _3, _7, _empty, _d, _i, _S, _P, _l, _a, _y
};
disp.runningString(welcome_banner, sizeof(welcome_banner), 200); // 200 это время в миллисекундах!
}
добавил схему подключения и код
А какую библиотеку посоветуете для работы с TM1637?
Практически любая без букв “Gyver” в названии в большинстве случаев лучше
Не “тянет” линейный стаб на ардуино. Попробуйте добавить конденсатор прим. 470 мкф 16В на 5В питания ТМ1637.
Или питайте от другого источника
Вот, емае. А мне в ниточках на рисунке привиделось, что от 12В запитан ТМ.
Художника обидеть всякий может)))
Не нужно ничего запитывать от стабилизатора Нано. Поставьте отдельный стабилизатор на дисплей.
Вы имеете ввиду поставить отдельны понижающий преобразователь 12v->5v?
такой Конденсатор 470 мкФ 16 В (электролитический) ChongX VEHT купить в СПб за 8 руб. | SMDX.RU | SmartModules.ru подойдёт?
еще раз извиняюсь, но я чайник. объясните на пальцах как его подключить?