Часы с 7 сегментными индикаторами на ардуино

Alex_Lean
Offline
Зарегистрирован: 07.04.2018

Здравствуйте, я новичок в мире ардуино, помогите пожалуйста с настройкой часов на подобии 00:00 (часы:минуты) без rtc модуля с двиговым регистром 74HC595.

vvadim
Offline
Зарегистрирован: 23.05.2012

показывайте свою схему и свой код и вам , может быть, помогут.

Alex_Lean
Offline
Зарегистрирован: 07.04.2018
Вот сам код вместе со схемой
#include <Wire.h>


#define data_pin 13
#define latch_pin 12
#define clock_pin 11


#define d1_pin 1
#define d2_pin 2
#define d3_pin 3
#define d4_pin 4
#define dot_pin 7
#define btn_pin 9

#define mux_delay 3 // set delay between switching display of digits


byte segments[10] = {
  0b00000001, // 0
  0b01100111, // 1
  0b00010010, // 2
  0b01000010, // 3
  0b01100100, // 4
  0b01001000, // 5
  0b00001000, // 6
  0b01100011, // 7
  0b00000000, // 8
  0b01000000  // 9
};

byte segments_off = 0b01111111;


void clearDisplay() {
  digitalWrite(d1_pin, LOW);
  digitalWrite(d2_pin, LOW);
  digitalWrite(d3_pin, LOW);
  digitalWrite(d4_pin, LOW);
}


void displayDigit(int digit_pin, int number) {

  digitalWrite(latch_pin, LOW);
  shiftOut(data_pin, clock_pin, LSBFIRST, segments[number]);
  digitalWrite(latch_pin, HIGH);

  clearDisplay();

  digitalWrite(digit_pin, HIGH); 
}


void displayTime(int hours, int minutes) {
  int h1, h2, m1, m2;
  h2 = hours % 10;
  h1 = ((hours % 100) - h1) / 10;
  m2 = minutes % 10;
  m1 = ((minutes % 100) - m1) / 10;
  
  if (h1==0) {
    clearDisplay(); 
  }
  else
  {
    displayDigit(d1_pin, h1);
  }
  delay(mux_delay);
  displayDigit(d2_pin, h2);
  delay(mux_delay);
  displayDigit(d3_pin, m1);
  delay(mux_delay);
  displayDigit(d4_pin, m2);
  delay(mux_delay);
}


void blinkDot(int seconds) {
  if ( (seconds % 2) == 0 ) {
    clearDisplay();
    digitalWrite(latch_pin, LOW);
    shiftOut(data_pin, clock_pin, LSBFIRST, segments_off);
    digitalWrite(latch_pin, HIGH);
    digitalWrite(d2_pin, HIGH);    
    digitalWrite(dot_pin, LOW);
  } else {
    clearDisplay();
    digitalWrite(dot_pin, HIGH);
  }
  delay(mux_delay);
}


void displayDate(int days, int months) {
  int d1, d2, m1, m2;
  d2 = days % 10;
  d1 = ((days % 100) - d1) / 10;
  m2 = months % 10;
  m1 = ((months % 100) - m1) / 10;
  if (d1 == 0) {
    clearDisplay(); 
  } else {
    displayDigit(d1_pin, d1);
  }
  delay(mux_delay);
  displayDigit(d2_pin, d2);
  digitalWrite(dot_pin, LOW);
  delay(mux_delay);
  digitalWrite(dot_pin, HIGH);
  displayDigit(d3_pin, m1);
  delay(mux_delay);
  displayDigit(d4_pin, m2);
  delay(mux_delay);
}




void setup() {


  pinMode(data_pin, OUTPUT);
  pinMode(latch_pin, OUTPUT);
  pinMode(clock_pin, OUTPUT);
  pinMode(d1_pin, OUTPUT);
  pinMode(d2_pin, OUTPUT);
  pinMode(d3_pin, OUTPUT);
  pinMode(d4_pin, OUTPUT);
  pinMode(dot_pin, OUTPUT);
  pinMode(btn_pin, INPUT_PULLUP); 
  

  Wire.begin();

}

void loop() {
  


  if ( digitalRead(btn_pin) == LOW) {

  } else {

  }
  
}

 

}
bwn
Offline
Зарегистрирован: 25.08.2014

Эт не схема, эт макраме какое то. Физику окончательно на закон божий заменили?

Alex_Lean
Offline
Зарегистрирован: 07.04.2018

Схема из тинкеркада, за оформление извеняйте

bwn
Offline
Зарегистрирован: 25.08.2014

Наберите в гугле "схема электрическая принципиальная", зайдите в википедию и найдите миллион отличий. А насчет уроков физики, я похоже угадал.(((((

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

А этот скетч рабочий? Вы его сами то запускали? Или надеетесь что за вас напишут? Проще готовые примеры сразу возьмите рабочие.

В loop код где? Delay на каждом шагу - зачем? Shiftout с большой вероятностью мерцает.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Alex_Lean пишет:

Схема из тинкеркада, за оформление извеняйте

Причём тут тинкеркад? Это он Вас заставил общие вывод индикаторов напряму на ардуину заводить?

Посмотрите как подключается семисегментный индикатор, например, вот здесь на стр. 9 Как Вы думаете, для чего там транзисторы?

 

bizzon
Offline
Зарегистрирован: 29.03.2016

Ну согласно соединениям на етой "схеме" (непонятно, где аноды и запятые)- либо контроллер сгорит нах, либо любуемся одинаковыми цифрами на всех индикаторах.

Аффтар! пиши исчо! Нужны подробности.

Аружан
Offline
Зарегистрирован: 14.04.2021

как можно найти

Аружан
Offline
Зарегистрирован: 14.04.2021

мне нужна эта схема