View difference between Paste ID: vCpytuEC and 31rHiN19
SHOW: | | - or go back to the newest paste.
1
#define SEGMENT_ON HIGH
2
#define SEGMENT_OFF LOW
3
#define DIGIT_ON 0
4
#define DIGIT_OFF 255
5
6
//výstupy připojených číslic
7
byte digit[4] = {10,11,9,3};
8
byte bright_on = DIGIT_ON;
9
byte bright_off = DIGIT_OFF;
10
11
//výstupy segmentů čísle A-G a DP
12
byte seg[8] = {12,7,5,13,2,8,6,4};
13
14
//mapa číslic  segment A B C D E F G
15-
byte number[10][7] = {{1,1,1,1,1,1,0},   //0
15+
byte number[11][7] = {{1,1,1,1,1,1,0},   //0
16
                      {0,1,1,0,0,0,0},   //1
17
                      {1,1,0,1,1,0,1},   //2
18
                      {1,1,1,1,0,0,1},   //3
19
                      {0,1,1,0,0,1,1},   //4
20
                      {1,0,1,1,0,1,1},   //5
21
                      {1,0,1,1,1,1,1},   //6
22
                      {1,1,1,0,0,0,0},   //7
23
                      {1,1,1,1,1,1,1},   //8
24-
                      {1,1,1,1,0,1,1}};  //9
24+
                      {1,1,1,1,0,1,1},   //9
25
                      {0,0,0,0,0,0,0}};  //nic
26
27
//jednotlivé číslice
28
byte value[4] = {7,1,5,3};           // číslice k zobrazení
29
byte dot = 1;                        // pozice desetiné tečky, >4 vypnuto
30
31
//funkce pro výpis číslic z pole value[]
32
void show() {
33
  byte l;
34
  for (int v=0;v < 4;v++) {                 // číslice 1 až 4
35
    analogWrite(digit[v],bright_on);        //zapne číslici
36
    for ( int s=0;s < 7; s++) {             //jeden segment za druhým
37
      if (number[value[v]][s] == 1) l = SEGMENT_ON;    //řádek number dle hodnoty v value[v]
38
      else l = SEGMENT_OFF;
39
      digitalWrite(seg[s], l);             //zapne segment
40
    }
41
    if (dot == v) digitalWrite(seg[7], SEGMENT_ON);     //zapne desetinou tečku
42
    delay(1);                               // svíti milisekundu v cyklu
43
    analogWrite(digit[v],bright_off);       //vypne číslici
44
    for ( int s=0;s < 7; s++) {             //vynulovat segment
45
      digitalWrite(seg[s], SEGMENT_OFF);              
46
    }
47
    digitalWrite(seg[7], SEGMENT_OFF);      //vypne tečku
48-
  for (int i=0;i < 10;i++) {
48+
  }  
49
}
50-
      if (number[i][s] == 1) l = SEGMENT_ON;
50+
51
//funkce nastavení výstupu a vypnutí všech LED
52-
      digitalWrite(seg[s], l);     //zapne segment
52+
53
  for (int d=0; d < 4; d++) {
54-
    delay(1000);
54+
55-
  }   
55+
56
  }
57-
57+
58
  for (int s=0; s < 8; s++) {
59
    pinMode(seg[s], OUTPUT);
60
    digitalWrite(seg[s], SEGMENT_OFF);
61
  }
62
}
63
64
void setup() {
65
  reset7();            //nastavení vývodu
66
  for (int d=0; d<4; d++){              //vnořený cyklus, jedna číslice za druhou
67
    analogWrite(digit[d],bright_on);     //zapne číslici 
68
  }
69
}
70
71
void loop() {
72
  show();
73
  //delay(10); 
74
}