Відповісти

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

Назад

Огляд теми (нові повідомленні вгорі)

Seryoga
2019-10-19 17:53:43
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);
 
}
Kaka
2019-10-19 14:49:27

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

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

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

Seryoga
2019-10-19 14:02:08
Kaka пише:

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

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

Kaka
2019-10-19 12:56:23

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

Seryoga
2019-10-19 11:26:03
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); // Сняли напряжение с анода, чтобы переключение катодов не вызывали мерцание
  
}
Kaka
2019-10-18 23:36:02

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

Seryoga
2019-10-18 23:05:46
Kaka пише:

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

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

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

Kaka
2019-10-18 22:29:07

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

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

Seryoga
2019-10-18 22:24:35
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
только как водить число с разными елементами

Kaka
2019-10-18 22:15:01

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

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

Seryoga
2019-10-18 22:09:03
Kaka пише:

В строке

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

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

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

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

Kaka
2019-10-18 21:55:05

В строке

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

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

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

Seryoga
2019-10-18 19:48:59

на данный момент скетч выводит на индикатор 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);
  }
}

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