Advertisement
Guest User

Untitled

a guest
Sep 19th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const byte digit_pins[2] = {5,6}; // пины для переключения индикатора
  2. const byte indication_pins[7] = { 100, 101, 102, 103, 104, 105, 106, 107 }; // пины куда прицеплены индикаторы
  3.  
  4. unsigned long tm, next_flick, secs;
  5. const unsigned int to_flick = 1; // как часто переключать индикацию
  6. const unsigned int change_every_sec = 1; // как часто увеличивать счетчик
  7.  
  8. byte digit = 0;
  9. unsigned int counter = 1; // старт счетчика
  10. const unsigned int max_counter = 100; // максимальное значение счетчика
  11.  
  12. // какие пины надо выставлять в высокий уровень
  13. // чтобы получилась нужная цифра
  14. const byte digits[10] = {
  15.     B11101110,
  16.     B10000010,
  17.     B11011100,
  18.     B11010110,
  19.     B10110010,
  20.     B01110110,
  21.     B01111110,
  22.     B11000010,
  23.     B11111110,
  24.     B11110110
  25. };
  26.  
  27. // выставляем цифру на индикаторе
  28. void fill( byte d ){
  29.     for(char i=0; i<8; i++){
  30.         digitalWrite(indication_pins[i], digits[d] & (1<<i));
  31.     }
  32. }
  33.  
  34. // выставляем число на индикаторах
  35. void setDigit( byte digit, unsigned int counter ){
  36.     byte d = 0;
  37.     switch ( digit ){
  38.         case 0:
  39.             digitalWrite(digit_pins[1], LOW);
  40.             d = counter % 10;
  41.             fill(d);
  42.             digitalWrite(digit_pins[0], HIGH);
  43.             break;
  44.         case 1:
  45.             digitalWrite(digit_pins[0], LOW);
  46.             d = (counter % 100) / 10;
  47.             fill(d);
  48.             digitalWrite(digit_pins[1], HIGH);
  49.             break;
  50.  
  51.         // эта часть не нужна, если у тебя 2 индикатора
  52.         //case 2:
  53.         //    digitalWrite(digit_pins[1], LOW);
  54.         //    d = ( counter % 1000 ) / 100;
  55.         //    fill(d);
  56.         //    digitalWrite(digit_pins[2], HIGH);
  57.         //    break;
  58.     }
  59. }
  60.  
  61. void setup() {
  62.     for(int i=0; i<2; i++)
  63.     {
  64.         pinMode(digit_pins[i], OUTPUT);
  65.     }
  66.  
  67.     for (int i = 0; i < 8; i++)
  68.     {
  69.         pinMode(indication_pins[i], OUTPUT);
  70.     }
  71.  
  72.     pinMode(13, OUTPUT);
  73. }
  74.  
  75. void loop() {
  76.     tm = millis();
  77.     if (tm > secs)
  78.     {
  79.         secs = tm + change_every_sec;
  80.         counter++;
  81.  
  82.         if (counter >= max_counter)
  83.             counter = 1;
  84.     }
  85.  
  86.     if( tm > next_flick ){
  87.         next_flick = tm + to_flick;
  88.         digit++;
  89.         if( digit == 2 )
  90.             digit = 0;
  91.  
  92.         setDigit( digit, counter );
  93.     }
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement