#1 2019-10-18 19:48:59

Seryoga
Учасник
Зареєстрований: 2019-09-28
Повідомлень: 14

4 разрядный 7 сегментный индикатор

на данный момент скетч выводит на индикатор 1111 помогите исправить та чтобы выводил 12.21

int anodPins[] = {A1, A2, A3, A4};
int segmentsPins[] = {5, 6, 7, 8, 9, 10, 11, 12};

void setup() {
  for (int i = 0; i < 4; i++) {
    pinMode(anodPins[i], OUTPUT);
  }
  for (int i = 0; i < 8; i++) {
    pinMode(segmentsPins[i], OUTPUT);
  }
}

int seg[] = {0, 1, 1, 0, 0, 0, 0, 0}; 

void loop() {
  
  for (int i = 0; i < 4; i++) {
    for (int b = 0; b < 8; b++) {
      digitalWrite(segmentsPins[b], ((seg[b] == 1) ? LOW : HIGH));
    }
    digitalWrite(anodPins[i], HIGH);
    delay(1);
    digitalWrite(anodPins[i], LOW);
  }
}

Неактивний

#2 2019-10-18 21:55:05

Kaka
Учасник
Зареєстрований: 2018-03-21
Повідомлень: 396

Re: 4 разрядный 7 сегментный индикатор

В строке

int seg[] = {0, 1, 1, 0, 0, 0, 0, 0};

Меняй 0 на 1 и смотри, что получается. Когда тебе покажется, что понял, попробуй вывести 2222, потом 3333. Когда это сделаешь, дальше легче пойдёт.

Меняй только эту строку. Разберись с нею досконально!

Неактивний

#3 2019-10-18 22:09:03

Seryoga
Учасник
Зареєстрований: 2019-09-28
Повідомлень: 14

Re: 4 разрядный 7 сегментный индикатор

Kaka пише:

В строке

int seg[] = {0, 1, 1, 0, 0, 0, 0, 0};

Меняй 0 на 1 и смотри, что получается. Когда тебе покажется, что понял, попробуй вывести 2222, потом 3333. Когда это сделаешь, дальше легче пойдёт.

Меняй только эту строку. Разберись с нею досконально!

это я понял мне как вести чтобы числа были разные к примеру 1234 или 9321

Неактивний

#4 2019-10-18 22:15:01

Kaka
Учасник
Зареєстрований: 2018-03-21
Повідомлень: 396

Re: 4 разрядный 7 сегментный индикатор

Ты сделал, что я сказал?  Сделай, покажи мне как ты выводишь 2222, тогда поговорим. Просто покаж вывод.

Пока ты этого не сделаешь, даже не думай, что ты что-то понял. Ничего ты не понял.

Остання редакція Kaka (2019-10-18 22:15:17)

Неактивний

#5 2019-10-18 22:24:35

Seryoga
Учасник
Зареєстрований: 2019-09-28
Повідомлень: 14

Re: 4 разрядный 7 сегментный индикатор

Kaka пише:

Ты сделал, что я сказал?  Сделай, покажи мне как ты выводишь 2222, тогда поговорим. Просто покаж вывод.

Пока ты этого не сделаешь, даже не думай, что ты что-то понял. Ничего ты не понял.

я понял ка это
     A, B, C, D, E, F, G,DP - распиновка сегментов
  {1, 1, 1, 1, 1, 1, 0, 0} //Цифра 0
  {0, 1, 1, 0, 0, 0, 0, 0}, //Цифра 1
  {1, 1, 0, 1, 1, 0, 1, 0}, //Цифра 2
  {1, 1, 1, 1, 0, 0, 1, 0}, //Цифра 3
  {0, 1, 1, 0, 0, 1, 1, 0}, //Цифра 4
  {1, 0, 1, 1, 0, 1, 1, 0}, //Цифра 5
  {1, 0, 1, 1, 1, 1, 1, 0}, //Цифра 6
  {1, 1, 1, 0, 0, 0, 0, 0}, //Цифра 7
  {1, 1, 1, 1, 1, 1, 1, 0}, //Цифра 8
  {1, 1, 1, 1, 0, 1, 1, 0}  //Цифра 9
только как водить число с разными елементами

Остання редакція Seryoga (2019-10-18 22:30:47)

Неактивний

#6 2019-10-18 22:29:07

Kaka
Учасник
Зареєстрований: 2018-03-21
Повідомлень: 396

Re: 4 разрядный 7 сегментный индикатор

Ну, если понял, то что тебе мешает выводить разные числа? Убирай нахрен цикл вывода одного и того же в 4 разряда (строку for (int i = 0; i < 4; i++) { и соответствующую закрывающую скобку) и выводи сначала одну цифру. потом также вторую, потом также третью. Что мешает?

И да, кстати, во всех твоих примерах последним идёт 0. Надеюсь, ты пробовал делать его 1 и знаешь что при этом получается.

Остання редакція Kaka (2019-10-18 22:29:57)

Неактивний

#7 2019-10-18 23:05:46

Seryoga
Учасник
Зареєстрований: 2019-09-28
Повідомлень: 14

Re: 4 разрядный 7 сегментный индикатор

Kaka пише:

Ну, если понял, то что тебе мешает выводить разные числа? Убирай нахрен цикл вывода одного и того же в 4 разряда (строку for (int i = 0; i < 4; i++) { и соответствующую закрывающую скобку) и выводи сначала одну цифру. потом также вторую, потом также третью. Что мешает?

И да, кстати, во всех твоих примерах последним идёт 0. Надеюсь, ты пробовал делать его 1 и знаешь что при этом получается.

блин не выходит либо я дибил либо не так собрал

Неактивний

#8 2019-10-18 23:36:02

Kaka
Учасник
Зареєстрований: 2018-03-21
Повідомлень: 396

Re: 4 разрядный 7 сегментный индикатор

Хорошо, не выводи пока. Просто убери цикл. Вывелась только одна первая цифра? Если да, попробуй вывести вторую.

Неактивний

#9 2019-10-19 11:26:03

Seryoga
Учасник
Зареєстрований: 2019-09-28
Повідомлень: 14

Re: 4 разрядный 7 сегментный индикатор

Kaka пише:

Хорошо, не выводи пока. Просто убери цикл. Вывелась только одна первая цифра? Если да, попробуй вывести вторую.

Немного понял теперь могу вывести только одну цифру теперь буду думать как несколько вывисти

int anodPins[] = {A1, A2, A3, A4};
int segmentsPins[] = {5, 6, 7, 8, 9, 10, 11, 12};

void setup() {
  for (int i = 0; i < 4; i++) {
    pinMode(anodPins[i], OUTPUT);
  }
  for (int i = 0; i < 8; i++) {
    pinMode(segmentsPins[i], OUTPUT);
  }
}

int seg0[] = {1, 1, 1, 1, 1, 1, 0, 0};
int seg1[] = {0, 1, 1, 0, 0, 0, 0, 0}; //Цифра 1
int seg2[] = {1, 1, 0, 1, 1, 0, 1, 0}; //Цифра 2
int seg3[] = {1, 1, 1, 1, 0, 0, 1, 0}; //Цифра 3
int seg4[] = {0, 1, 1, 0, 0, 1, 1, 0}; //Цифра 4
int seg5[] = {1, 0, 1, 1, 0, 1, 1, 0}; //Цифра 5
int seg6[] = {1, 0, 1, 1, 1, 1, 1, 0}; //Цифра 6
int seg7[] = {1, 1, 1, 0, 0, 0, 0, 0}; //Цифра 7
int seg8[] = {1, 1, 1, 1, 1, 1, 1, 0}; //Цифра 8
int seg9[] = {1, 1, 1, 1, 0, 1, 1, 0}; //Цифра 9

void loop() {
  
  int i = 0;

    for (int k = 0; k < 8; k++) {
      digitalWrite(segmentsPins[k], ((seg1[k] == 1) ? LOW : HIGH));
    }
    digitalWrite(anodPins[i], HIGH); // Подали напряжение на анод - все индикаторы загорелись
    delay(1); // Дали паузу глазу воспринять 
    digitalWrite(anodPins[i], LOW); // Сняли напряжение с анода, чтобы переключение катодов не вызывали мерцание
  
}

Неактивний

#10 2019-10-19 12:56:23

Kaka
Учасник
Зареєстрований: 2018-03-21
Повідомлень: 396

Re: 4 разрядный 7 сегментный индикатор

Попробуй сделать i (в int i = 0;) единицей или двойкой, посмотри, что будет

Неактивний

#11 2019-10-19 14:02:08

Seryoga
Учасник
Зареєстрований: 2019-09-28
Повідомлень: 14

Re: 4 разрядный 7 сегментный индикатор

Kaka пише:

Попробуй сделать i (в int i = 0;) единицей или двойкой, посмотри, что будет

уже 0=равен первой цифре 1=второй 2=третий 3=четвертой

Неактивний

#12 2019-10-19 14:49:27

Kaka
Учасник
Зареєстрований: 2018-03-21
Повідомлень: 396

Re: 4 разрядный 7 сегментный индикатор

Ну, так и вперёд!

Ты смысл-то динамической индикации понимаешь? Как она вообще работает? Если да, то всё, что нужно ты уже умеешь, теперь делай.

Как сделаешь, я могу рассказать тебе как это делается правильно на самом деле.

Неактивний

#13 2019-10-19 17:53:43

Seryoga
Учасник
Зареєстрований: 2019-09-28
Повідомлень: 14

Re: 4 разрядный 7 сегментный индикатор

Kaka пише:

Ну, так и вперёд!

Ты смысл-то динамической индикации понимаешь? Как она вообще работает? Если да, то всё, что нужно ты уже умеешь, теперь делай.

Как сделаешь, я могу рассказать тебе как это делается правильно на самом деле.

Намудри так намудрил теперь попробую оптимизирувать спасибо за помощь

int anodPins[] = {A1, A2, A3, A4};
int segmentsPins[] = {5, 6, 7, 8, 9, 10, 11, 12};

void setup() {
  for (int i = 0; i < 4; i++) {
    pinMode(anodPins[i], OUTPUT);
  }
  for (int i = 0; i < 8; i++) {
    pinMode(segmentsPins[i], OUTPUT);
  }
}

int seg0[] = {1, 1, 1, 1, 1, 1, 0, 0};
int seg1[] = {0, 1, 1, 0, 0, 0, 0, 0}; //Цифра 1
int seg2[] = {1, 1, 0, 1, 1, 0, 1, 0}; //Цифра 2
int seg3[] = {1, 1, 1, 1, 0, 0, 1, 0}; //Цифра 3
int seg4[] = {0, 1, 1, 0, 0, 1, 1, 0}; //Цифра 4
int seg5[] = {1, 0, 1, 1, 0, 1, 1, 0}; //Цифра 5
int seg6[] = {1, 0, 1, 1, 1, 1, 1, 0}; //Цифра 6
int seg7[] = {1, 1, 1, 0, 0, 0, 0, 0}; //Цифра 7
int seg8[] = {1, 1, 1, 1, 1, 1, 1, 0}; //Цифра 8
int seg9[] = {1, 1, 1, 1, 0, 1, 1, 0}; //Цифра 9

void loop() {
  
  int i = 0;
  

    for (int k = 0; k < 8; k++) {
      digitalWrite(segmentsPins[k], ((seg1[k] == 1) ? LOW : HIGH));  
    }
     
    digitalWrite(anodPins[i], HIGH); // Подали напряжение на анод - все индикаторы загорелись
    delay(1); // Дали паузу глазу воспринять 
    digitalWrite(anodPins[i], LOW); // Сняли напряжение с анода, чтобы переключение катодов не вызывали мерцание

int a = 1;
  

    for (int k = 0; k < 8; k++) {
      digitalWrite(segmentsPins[k], ((seg2[k] == 1) ? LOW : HIGH));  
    }
     
    digitalWrite(anodPins[a], HIGH); // Подали напряжение на анод - все индикаторы загорелись
    delay(1); // Дали паузу глазу воспринять 
    digitalWrite(anodPins[a], LOW);

    int c = 2;
  

    for (int k = 0; k < 8; k++) {
      digitalWrite(segmentsPins[k], ((seg3[k] == 1) ? LOW : HIGH));  
    }
     
    digitalWrite(anodPins[c], HIGH); // Подали напряжение на анод - все индикаторы загорелись
    delay(1); // Дали паузу глазу воспринять 
    digitalWrite(anodPins[c], LOW);

    int x = 3;
  

    for (int k = 0; k < 8; k++) {
      digitalWrite(segmentsPins[k], ((seg4[k] == 1) ? LOW : HIGH));  
    }
     
    digitalWrite(anodPins[x], HIGH); // Подали напряжение на анод - все индикаторы загорелись
    delay(1); // Дали паузу глазу воспринять 
    digitalWrite(anodPins[x], LOW);
 
}

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

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