#1 Re: Програмування Arduino » 4 Разрядный индикатор мигает » 2017-11-12 19:53:21

Не понял причем тут извне и изнутри. Можете просто засунуть мне это в код, и показать (//) что конкретно выполняет, и в какой последовательности? Я боюсь того что отправка IR кода слишком долгая и мерцания останутся

#2 Re: Програмування Arduino » 4 Разрядный индикатор мигает » 2017-11-12 15:40:52

Ну примерно я понял, но ведь функции attachInterrupt нужно указать LOW, CHANGE и тд. Я не понимаю как это реализовать. Для прерывания у меня есть 2 свободный пин(0 int). Можете показать мне на примере моего скетча? Какой режим указать? (LOW CHANGE RISING FALLING)

#3 Re: Програмування Arduino » 4 Разрядный индикатор мигает » 2017-11-04 13:02:36

void loop пише:

Динамическую индикацию надо делать в прерывании, тогда мерцания символов/сегментов не будет. Или взять модуль на ТМ1637.

Попытался, не получилось? Можете показать и объяснить как это работает на примере моего скетча?

#4 Програмування Arduino » 4 Разрядный индикатор мигает » 2017-10-29 14:35:58

starter
відповідей: 8

Устройство задумано так-
Отправляет ИК сигналы при нажатия на кнопки и параллельно(если так можно сказать) выводит текущее время на 4 разрядный индикатор. И вроде все работает, но вот проблема. При нажатие на кнопку(или кнопки), сигналы отправляются, а индикатор со временем мигает, точнее мигают первые три разряда, а четвертый становится более ярким. Выглядит некрасиво, в чем проблема? Можно это исправить?
Код:

#include "IRremote.h"
#include <iarduino_RTC.h>


IRsend irsend;
decode_results results;
iarduino_RTC time(RTC_DS3231);

int button1 = A0;
int button2 = A1;
int button3 = A2;
int button4 = A7;
int buttonChannelPlus = 0;
int buttonChannelMinus = 0;
int buttonVolPlus = 0;
int buttonVolMinus = 0;

int indOne = 5;
int indTwo = 6;
int indThree = 9;
int indFour = 10;
int a = 12;
int b = 13;
int c = 4;
int d = 11;
int e = 7;
int f = 2;
int g = A3;
int h = 8;

int digit = 0;

void setup() {
  time.begin();
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);
  pinMode(button3, INPUT);
  pinMode(button4, INPUT);
  pinMode(indOne, OUTPUT);
  pinMode(indTwo, OUTPUT);
  pinMode(indThree, OUTPUT);
  pinMode(indFour, OUTPUT);
  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);
  pinMode(h, OUTPUT);
}

void loop() {
  buttonChannelPlus = digitalRead(button1);
  if (buttonChannelPlus == HIGH) {
    buttonChannelMinus = digitalRead(button2);
    if (buttonChannelMinus == HIGH) {
      irsend.sendNEC(0x807F807F, 32);
    }
    else {
      irsend.sendNEC(0x807FE817, 32);
    }
  }
  buttonChannelMinus = digitalRead(button2);
  if (buttonChannelMinus == HIGH) {
    buttonChannelPlus = digitalRead(button1);
    if (buttonChannelPlus == HIGH) {
      irsend.sendNEC(0x807F807F, 32);
    }
    else {
      irsend.sendNEC(0x807F58A7, 32);
    }
  }
  buttonVolPlus = digitalRead(button3);
  if (buttonVolPlus == HIGH) {
    irsend.sendNEC(0x807F827D, 32);
  }
  buttonVolMinus = analogRead(button4);
  if (buttonVolMinus > 500) {
    irsend.sendNEC(0x807F42BD, 32);
  }
  showTime();
}

void showTime() {
  time.gettime();
  uint8_t valHours = time.Hours;
  uint8_t valMinutes = time.minutes;
  int valTimeOne = valHours / 10;
  int valTimeTwo = valHours % 10;
  int valTimeThree = valMinutes / 10;
  int valTimeFour = valMinutes % 10;
  digit = 1;
  if (valTimeOne == 0) {
    printNought();
  }
  else if (valTimeOne == 1) {
    printOne();
  }
  else if (valTimeOne == 2) {
    printTwo();
  }
  else if (valTimeOne == 3) {
    printThree();
  }
  else if (valTimeOne == 4) {
    printFour();
  }
  else if (valTimeOne == 5) {
    printFive();
  }
  else if (valTimeOne == 6) {
    printSix();
  }
  else if (valTimeOne == 7) {
    printSeven();
  }
  else if (valTimeOne == 8) {
    printEight();
  }
  else if (valTimeOne == 9) {
    printNine();
  }
  delay(2);
  digit = 2;
  if (valTimeTwo == 0) {
    printNought();
  }
  else if (valTimeTwo == 1) {
    printOne();
  }
  else if (valTimeTwo == 2) {
    printTwo();
  }
  else if (valTimeTwo == 3) {
    printThree();
  }
  else if (valTimeTwo == 4) {
    printFour();
  }
  else if (valTimeTwo == 5) {
    printFive();
  }
  else if (valTimeTwo == 6) {
    printSix();
  }
  else if (valTimeTwo == 7) {
    printSeven();
  }
  else if (valTimeTwo == 8) {
    printEight();
  }
  else if (valTimeTwo == 9) {
    printNine();
  }
  delay(2);
  digit = 3;
  if (valTimeThree == 0) {
    printNought();
  }
  else if (valTimeThree == 1) {
    printOne();
  }
  else if (valTimeThree == 2) {
    printTwo();
  }
  else if (valTimeThree == 3) {
    printThree();
  }
  else if (valTimeThree == 4) {
    printFour();
  }
  else if (valTimeThree == 5) {
    printFive();
  }
  else if (valTimeThree == 6) {
    printSix();
  }
  else if (valTimeThree == 7) {
    printSeven();
  }
  else if (valTimeThree == 8) {
    printEight();
  }
  else if (valTimeThree == 9) {
    printNine();
  }
  delay(2);
  digit = 4;
    if (valTimeFour == 0) {
    printNought();
  }
  else if (valTimeFour == 1) {
    printOne();
  }
  else if (valTimeFour == 2) {
    printTwo();
  }
  else if (valTimeFour == 3) {
    printThree();
  }
  else if (valTimeFour == 4) {
    printFour();
  }
  else if (valTimeFour == 5) {
    printFive();
  }
  else if (valTimeFour == 6) {
    printSix();
  }
  else if (valTimeFour == 7) {
    printSeven();
  }
  else if (valTimeFour == 8) {
    printEight();
  }
  else if (valTimeFour == 9) {
    printNine();
  }
  delay(2);
}

И если нужно вот функции вывода цифр:

void printOne() {
  if (digit == 1) {
    digitalWrite(indOne, LOW);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, LOW);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, LOW);
    digitalWrite(h, LOW);
  }
  else if (digit == 2) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, LOW);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, LOW);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, LOW);
    digitalWrite(h, HIGH);
  }
  else if (digit == 3) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, LOW);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, LOW);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, LOW);
    digitalWrite(h, LOW);
  }
  else if (digit == 4) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, LOW);
    digitalWrite(a, LOW);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, LOW);
    digitalWrite(h, LOW);
  }
}

void printTwo() {
  if (digit == 1) {
    digitalWrite(indOne, LOW);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, LOW);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, LOW);
    digitalWrite(g, HIGH);
    digitalWrite(h, LOW);
  }
  else if (digit == 2) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, LOW);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, LOW);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, LOW);
    digitalWrite(g, HIGH);
    digitalWrite(h, HIGH);
  }
  else if (digit == 3) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, LOW);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, LOW);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, LOW);
    digitalWrite(g, HIGH);
    digitalWrite(h, LOW);
  }
  else if (digit == 4) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, LOW);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, LOW);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, LOW);
    digitalWrite(g, HIGH);
    digitalWrite(h, LOW);
  }
}

void printThree() {
  if (digit == 1) {
    digitalWrite(indOne, LOW);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, HIGH);
    digitalWrite(h, LOW);
  }
  else if (digit == 2) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, LOW);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, HIGH);
    digitalWrite(h, HIGH);
  }
  else if (digit == 3) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, LOW);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, HIGH);
    digitalWrite(h, LOW);
  }
  else if (digit == 4) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, LOW);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, HIGH);
    digitalWrite(h, LOW);
  }
}

void printFour() {
  if (digit == 1) {
    digitalWrite(indOne, LOW);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, LOW);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(h, LOW);
  }
  else if (digit == 2) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, LOW);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, LOW);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(h, HIGH);
  }
  else if (digit == 3) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, LOW);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, LOW);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(h, LOW);
  }
  else if (digit == 4) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, LOW);
    digitalWrite(a, LOW);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(h, LOW);
  }
}

void printFive() {
  if (digit == 1) {
    digitalWrite(indOne, LOW);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, LOW);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(h, LOW);
  }
  else if (digit == 2) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, LOW);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, LOW);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(h, HIGH);
  }
  else if (digit == 3) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, LOW);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, LOW);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(h, LOW);
  }
  else if (digit == 4) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, LOW);
    digitalWrite(a, HIGH);
    digitalWrite(b, LOW);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(h, LOW);
  }
}

void printSix() {
  if (digit == 1) {
    digitalWrite(indOne, LOW);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, LOW);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(h, LOW);
  }
  else if (digit == 2) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, LOW);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, LOW);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(h, HIGH);
  }
  else if (digit == 3) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, LOW);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, LOW);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(h, LOW);
  }
  else if (digit == 4) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, LOW);
    digitalWrite(a, HIGH);
    digitalWrite(b, LOW);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(h, LOW);
  }
}

void printSeven() {
  if (digit == 1) {
    digitalWrite(indOne, LOW);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, LOW);
    digitalWrite(h, LOW);
  }
  else if (digit == 2) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, LOW);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, LOW);
    digitalWrite(h, HIGH);
  }
  else if (digit == 3) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, LOW);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, LOW);
    digitalWrite(h, LOW);
  }
  else if (digit == 4) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, LOW);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, LOW);
    digitalWrite(h, LOW);
  }
}

void printEight() {
  if (digit == 1) {
    digitalWrite(indOne, LOW);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(h, LOW);
  }
  else if (digit == 2) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, LOW);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(h, HIGH);
  }
  else if (digit == 3) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, LOW);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(h, LOW);
  }
  else if (digit == 4) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, LOW);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(h, LOW);
  }
}

void printNine() {
  if (digit == 1) {
    digitalWrite(indOne, LOW);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(h, LOW);
  }
  else if (digit == 2) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, LOW);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(h, HIGH);
  }
  else if (digit == 3) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, LOW);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(h, LOW);
  }
  else if (digit == 4) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, LOW);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    digitalWrite(h, LOW);
  }
}

void printNought() {
  if (digit == 1) {
    digitalWrite(indOne, LOW);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, LOW);
    digitalWrite(h, LOW);
  }
  else if (digit == 2) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, LOW);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, LOW);
    digitalWrite(h, HIGH);
  }
  else if (digit == 3) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, LOW);
    digitalWrite(indFour, HIGH);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, LOW);
    digitalWrite(h, LOW);
  }
  else if (digit == 4) {
    digitalWrite(indOne, HIGH);
    digitalWrite(indTwo, HIGH);
    digitalWrite(indThree, HIGH);
    digitalWrite(indFour, LOW);
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, LOW);
    digitalWrite(h, LOW);
  }
}

Выводы индикатора указаны в начале.
indOne/Two/Three/Four - разряды
a/b/c/d/e/f/g/h - сектора
Переменная "digit" указывает разряд, то есть если digit = 1;, и после этого printOne(); то в первом разряде будет цифра 1, digit = 2; - второй разряд и т.д.
Индикатор подключен по схеме(Нашел схему по модели в интернете):4x7-segm_SMA420364_pinout.jpg(
Без нажатия кнопок все работает стабильно и правильно, но при нажатии. Можно это исправить?
P.S. Arduino Pro Mini 5V

#5 Програмування Arduino » Время в переменную и библиотека для индикатора » 2017-10-26 20:27:08

starter
відповідей: 2

Всем привет! Прошу помощи
1)
Не могу записать время с DS3231, после преобразования показывает не те числа, если изменить тип переменной, то и число измениться, но сколько не подбирал, нужного не нашел. Возможно вы найдете. Код:

#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS3231);

void setup() {
    Serial.begin(9600);
    time.begin();
}
void loop(){
  int a = time.gettime("Hi");
  Serial.println(a);
  Serial.println(time.gettime("Hi"));
  delay(1000);
}

ПО монитору порта можно увидеть, что данные с переменной, и с часов разные, хотя a = time.gettime("Hi"). Я хочу чтобы мне в переменную записывалось время, т.е. если сейчас 18:00, то в переменную записывалось 1800. Позже я из массива a[5] буду выводить на 4 разрядный 7 сегментный индикатор(по одной цифре), тут и вторая проблема.
2) Есть ли какая-то библиотека для работы с индикатором? Модель индикатора SMA420364, но думаю заменю на более крупный. Нет ли такой библиотеки? Указал выходы разрядов и индикаторов, пишешь функцию, и он выводит? Допустим что-то типа: indicator.write(a), или indicator.write(1, a[0]) (функция выводит на 1 разряд цифру из массива a(функцию придумал сам, надеюсь понятно))
Заранее спасибо

p.s. Я чайник

Підвал форуму