Как на 4-разрядному семисегментному индикатору выводить не только по 4 цифры, типа 0.0.0.0. а 1.2.3.4

FyzeR
Offline
Зарегистрирован: 24.03.2021

Как на 4-разрядному семисегментному индикатору выводить не только по 4 цифры, типа 0.0.0.0. а 1.2.3.4

хочу сделать clickCounter

b707
Offline
Зарегистрирован: 26.05.2017

а как вы выводите 0.0.0.0 ? - покажите код

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

b707 пишет:

а как вы выводите 0.0.0.0 ? - покажите код

Ну, как - как ... статические при подключении под динамическую индикацию. Вот они у него все одинаковые и рисуются.

FyzeR пишет:

Как на 4-разрядному семисегментному индикатору

Обращаю Ваше внимание, что это русскоязычный форум.

FyzeR
Offline
Зарегистрирован: 24.03.2021
// тут если что был текст на украинском языке
#define d1 A1
#define d2 A2
#define d3 A3
#define d4 A4

// тут если что был текст на украинском языке
#define g 2
#define c 3
#define d 4
#define e 5
#define b 6
#define f 7
#define a 8

void setup() {
 pinMode(d1, OUTPUT);
 pinMode(d2, OUTPUT);
 pinMode(d3, OUTPUT);
 pinMode(d4, OUTPUT);
  
 pinMode(g, OUTPUT);
 pinMode(c, OUTPUT);
 pinMode(d, OUTPUT);
 pinMode(e, OUTPUT);
 pinMode(b, OUTPUT);
 pinMode(f, OUTPUT);
 pinMode(a, OUTPUT);

}

int countTime = 1000;
void zero() {
  digitalWrite(g, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(b, LOW);
  digitalWrite(f, LOW);
  digitalWrite(a, LOW);
}

void one() {
  digitalWrite(g, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(a, HIGH);
}

void two() {
  digitalWrite(g, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(b, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(a, LOW);
}

void three() {
  digitalWrite(g, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(a, LOW);
}

void four() {
  digitalWrite(g, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(f, LOW);
  digitalWrite(a, HIGH);
}

void five() {
  digitalWrite(g, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(f, LOW);
  digitalWrite(a, LOW);
}

void six() {
  digitalWrite(g, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(f, LOW);
  digitalWrite(a, LOW);
}

void sev() {
  digitalWrite(g, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(a, LOW);
}

void eight() {
  digitalWrite(g, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(b, LOW);
  digitalWrite(f, LOW);
  digitalWrite(a, LOW);
}

void nine() {
  digitalWrite(g, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(f, LOW);
  digitalWrite(a, LOW);
}

void loop() {
  zero();
  delay(countTime);
  one();
  delay(countTime);
  two();
  delay(countTime);
  three();
  delay(countTime);
  four();
  delay(countTime);
  five();
  delay(countTime);
  six();
  delay(countTime);
  sev();
  delay(countTime);
  eight();
  delay(countTime);
  nine();
  delay(countTime);
}

Вот код который выводит 0.0.0.0

1.1.1.1

2.2.2.2.

и так далее 

каждую секунду а для 0.0.0.0 просто з void loop убираете всё кроме 

zero();

delay(countTime);

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020
 pinMode(d1, OUTPUT);
 pinMode(d2, OUTPUT);
 pinMode(d3, OUTPUT);
 pinMode(d4, OUTPUT);

Вот здесь определены разряды индикатора. У вас в коде эти значения не меняются, поэтому цифры выводятся сразу во все разряды. Нужно вывести в конкретный разряд - отключайте остальные

FyzeR
Offline
Зарегистрирован: 24.03.2021

я так пробовал, не работает но сейчас могу повторить возле меня лежит ардуино

только что попробовал, нет не работает

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Что не работает? Код где, как пробовали?

FyzeR
Offline
Зарегистрирован: 24.03.2021

пробовал писать:

digitalWrite(d1, LOW);

digitalWrite(d2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, HIGH);

 

 

ничего не работает

FyzeR
Offline
Зарегистрирован: 24.03.2021

крч я походу понял

 

я в #define неправильно пины розрядов указал

 

сейчас исправлю

FyzeR
Offline
Зарегистрирован: 24.03.2021

да, всё работает

но только если я отключил d3 d2 d1 а включил d4 как мне выводить цифру 10 например

я понимаю ты сейчас скажеш что просто включи d3, но на нем будет то самое число как и на d4

то как управлять каждым разрядом отдельно 

в голову кроме digitalWrite ничего не приходит но как там указать какой именно розряд мне нужен или же какой сегмент мне нужен?

сорри за ошибки :>

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Динамическая индикация. Вот вам урок от Аленки - https://www.youtube.com/watch?v=_CgRU2WeczM

FyzeR
Offline
Зарегистрирован: 24.03.2021

спс, сейчас посмотрю если что потом уже могу что-то отписать здесь

b707
Offline
Зарегистрирован: 26.05.2017

FyzeR пишет:

если что потом уже могу что-то отписать здесь

лучше не надо

FyzeR
Offline
Зарегистрирован: 24.03.2021

крч не обращайте внимание на те сообщения которые зверху

а от этого видео толку нет от-туда даже код не работает

 

 

сорри за ошибки:>

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Но принцип-то понятен? 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Добавьте еще подпрограммы first(), second(), third() и fourth()

FyzeR
Offline
Зарегистрирован: 24.03.2021

v258 пишет:

Но принцип-то понятен? 

понятно только что это и как работает, но как реализовать это?

FyzeR
Offline
Зарегистрирован: 24.03.2021

mykaida пишет:

Добавьте еще подпрограммы first(), second(), third() и fourth()

для чего и где это использовать?

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

FyzeR пишет:

v258 пишет:

Но принцип-то понятен? 

понятно только что это и как работает, но как реализовать это?

Для вывода числа 10: включить первый разряд и вывести 0, выключить первый и включить второй разряд и вывести 1. И так по кругу, при переключении с достаточно большой частотой мерцание будет незаметно

 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

FyzeR пишет:

mykaida пишет:

Добавьте еще подпрограммы first(), second(), third() и fourth()

для чего и где это использовать?

Для вывода цифр в соответствующих разрядах индикатора

FyzeR
Offline
Зарегистрирован: 24.03.2021

v258 пишет:

FyzeR пишет:

v258 пишет:

Но принцип-то понятен? 

понятно только что это и как работает, но как реализовать это?

Для вывода числа 10: включить первый разряд и вывести 0, выключить первый и включить второй разряд и вывести 1. И так по кругу, при переключении с достаточно большой частотой мерцание будет незаметно

 

 

да, я это понял ну как я сказал ранше я хочу сделать clickCounter я же не буду писать это 9999 раз?

 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Дык, в чем проблема? 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

FyzeR пишет:

да, я это понял ну как я сказал ранше я хочу сделать clickCounter я же не буду писать это 9999 раз?

Почитайте про циклические операции типа for и while. И вообще - почитайте про си - полезно.

FyzeR
Offline
Зарегистрирован: 24.03.2021

то я же говорю с помощью динамической индикации мне придетсья писть это 9999 раз.

А если использовать массивы и переменные отдельно сложно

FyzeR
Offline
Зарегистрирован: 24.03.2021

mykaida пишет:

FyzeR пишет:

да, я это понял ну как я сказал ранше я хочу сделать clickCounter я же не буду писать это 9999 раз?

Почитайте про циклические операции типа for и while. И вообще - почитайте про си - полезно.

 

ок

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

FyzeR пишет:

то я же говорю с помощью динамической индикации мне придетсья писть это 9999 раз.

Все, что записано в loop(), выполняется в бесконечном цикле, т.е. достаточно написать один раз вывод числа, и оно будет отображаться, пока не отключите питание. Или пока не выведете другое число

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

v258 пишет:

Все, что записано в loop(), выполняется в бесконечном цикле

Так loop() и есть while(1), если писать не в IDE

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020
void writeNumber(word num){
// а здесь организовываете вывод числа num - раскидываете по цифрам и 
// выводите цифры  в соответствующие разряды индикатора
}

void loop(){
  if (/* здесь проверка срабатывания счетчика */){
    clickCounter++; // и его увеличение
  }
  writeNumber(clickCounter);
}

Примерно так

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

mykaida пишет:

v258 пишет:

Все, что записано в loop(), выполняется в бесконечном цикле

Так loop() и есть while(1), если писать не в IDE

Я знаю, я это ТС писал ))

FyzeR
Offline
Зарегистрирован: 24.03.2021

а как сделать так чтобы ардуино сам разкидывал число на разряды?

FyzeR
Offline
Зарегистрирован: 24.03.2021

и я где-то видел что люди делали так чтобы то, что находиться в переменной например, выводилось на семисегментный индикатор.

Не знаете как это можно сделать?

b707
Offline
Зарегистрирован: 26.05.2017

Никак ардуино это "сам" не сделает, это должны написать вы.
Короче, хватит сопли жевать, если вы не умеете программировать, обращайтесь в раздел "ищу исполнителя"

FyzeR
Offline
Зарегистрирован: 24.03.2021

FyzeR
Offline
Зарегистрирован: 24.03.2021

Смотрите что нашёл:

FyzeR
Offline
Зарегистрирован: 24.03.2021

походу это и есть решения

b707
Offline
Зарегистрирован: 26.05.2017

Жадность творит чудеса. Стоило намекнуть, что надо деньги платить - сразу решение нашлось

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

FyzeR пишет:

то я же говорю с помощью динамической индикации мне придетсья писть это 9999 раз.

А если использовать массивы и переменные отдельно сложно

Ну, если сложно, то "пистьте" - бумага всё стерпит.