Содержание

Эксперимент 15. Счетчик

Используя схему предыдущего эксперимента можно сделать еще одно устройство - Счетчик нажатий на кнопку.

Схема эксперимента

Рисунок 1. Электрическая принципиальная схема эксперимента

Рисунок 2. Монтажная схема эксперимента

Программный код эксперимента

Exp15
  1. int a = 8;
  2. int b = 9;
  3. int c = 11;
  4. int d = 5;
  5. int e = 4;
  6. int f = 7;
  7. int g = 6;
  8. int h = 10;
  9. int keyPin = 12;
  10. int data [11][8] = {{1,1,1,1,1,1,0,1},
  11. {0,1,1,0,0,0,0,1},
  12. {1,1,0,1,1,0,1,1},
  13. {1,1,1,1,0,0,1,1},
  14. {0,1,1,0,0,1,1,1},
  15. {1,0,1,1,0,1,1,1},
  16. {1,0,1,1,1,1,1,1},
  17. {1,1,1,0,0,0,0,1},
  18. {1,1,1,1,1,1,1,1},
  19. {1,1,1,1,0,1,1,1},
  20. {0,0,0,0,0,0,0,0}};
  21.  
  22. void displ (int);
  23.  
  24. void setup() {
  25. for(int i=4;i<=11;i++)
  26. pinMode(i,OUTPUT);
  27. pinMode(keyPin,INPUT);
  28. displ(11);
  29. }
  30.  
  31. int x = -1;
  32. int button_old = 1;
  33. void loop() {
  34. if((digitalRead(keyPin) == LOW)&&(button_old == 1)) {
  35. x = x + 1;
  36. }
  37. displ(11);
  38. displ(x);
  39. if (x > 9) {x = 0;}
  40.  
  41. button_old = digitalRead(keyPin);
  42. delay(20);
  43. }
  44.  
  45. void displ (int num) {
  46. int j = 0;
  47. digitalWrite(a, data[num][j]); j = j + 1;
  48. digitalWrite(b, data[num][j]); j = j + 1;
  49. digitalWrite(c, data[num][j]); j = j + 1;
  50. digitalWrite(d, data[num][j]); j = j + 1;
  51. digitalWrite(e, data[num][j]); j = j + 1;
  52. digitalWrite(f, data[num][j]); j = j + 1;
  53. digitalWrite(g, data[num][j]); j = j + 1;
  54. digitalWrite(h, data[num][j]); j = j + 1;
  55. }
  56. }

В основном цикле программы мы обрабатываем нажатие кнопки и считаем количество нажатий, при чем счетчик нажатий увеличивается при условии что кнопка уже отпущена (с пина считывается сигнал «LOW»), но была нажата (в переменную button_old записана 1, что соответствует сигналу «HIGH» считанному с пина кнопки).
Для отображения символа используется пользовательская функция displ(), которая в качестве аргумента принимает номер зашифрованного в массиве символа (0..9), где «1» означает, что будет подаваться сигнал «HIGH», а «0» означает, что будет подаваться сигнал «LOW»

Дополнительное задание

Добавь к цифрам 0..9 еще буквы A, b, C d E F, чтобы секундомер переключал символы от 0 до F