ArtemTechnologies

ATWatch - Arduino совместимая носимая платформа для обучения робототехнике и программированию на языке C++
  1. #include <SPI.h>
  2. #include <Adafruit_GFX.h>
  3. #include <Adafruit_SSD1306.h>
  4. #include "GyverButton.h"
  5.  
  6. #define OLED_DC    26
  7. #define OLED_CS    31
  8. #define OLED_RESET 24
  9. #define BTN1       2
  10. #define BTN2       12
  11. #define BuzzerPin  15
  12.  
  13.  
  14. Adafruit_SSD1306 display(OLED_DC, OLED_RESET, OLED_CS);
  15. GButton butt1(BTN1, LOW_PULL, NORM_OPEN);
  16. GButton butt2(BTN2, LOW_PULL, NORM_OPEN);
  17. unsigned long stopwatchtimer = 0;
  18. unsigned long stopwatchdeltatime = 0;
  19. bool stopwatch_pause = false;
  20.  
  21. // Функция обработки действия кнопок
  22. void buttons();
  23.  
  24.  
  25. void setup()
  26. {
  27.   display.begin(SSD1306_SWITCHCAPVCC);
  28.   display.setTextSize(1);
  29.   display.setTextColor(WHITE);
  30.   display.setCursor(0, 0);
  31.  
  32. }
  33. void buttons()
  34. {
  35.   // Обновляем состояние кнопок
  36.   butt1.tick();
  37.   butt2.tick();
  38.  
  39.   // Сбрасываем время
  40.   if (butt1.isClick())
  41.   {
  42.     stopwatchtimer = millis();
  43.     stopwatch_pause = true;
  44.     tone(BuzzerPin, 4000, 200);
  45.   }
  46.   // Ставим на паузу
  47.   if (butt2.isClick())
  48.   {
  49.     stopwatch_pause = !stopwatch_pause;
  50.     // Снимаем с паузы и пересчитываем время
  51.     if (stopwatch_pause)
  52.     {
  53.       stopwatchtimer += (((millis() - stopwatchtimer) / 1000) - (stopwatchdeltatime)) * 1000;
  54.     }
  55.     tone(BuzzerPin, 2000, 200);
  56.   }
  57. }
  58.  
  59. void loop()
  60. {
  61.   buttons();
  62.  
  63.   display.clearDisplay();
  64.   display.setTextSize(2);
  65.   display.setCursor(0, 0);
  66.   display.println F("Stopwatch");
  67.   // Если пауза не стоит, выводим время
  68.   if (stopwatch_pause)
  69.   {
  70.     stopwatchdeltatime = (millis() - stopwatchtimer) / 1000;
  71.   }
  72.   // Дописываем нолик часам
  73.   if (stopwatchdeltatime / 60 / 60 < 10)
  74.   {
  75.     display.print F("0");
  76.   }
  77.   // Выводим часы
  78.   display.print (stopwatchdeltatime / 60 / 60);
  79.   display.print F(":");
  80.   // Дописываем нолик минутам
  81.   if (stopwatchdeltatime / 60 % 60 < 10)
  82.   {
  83.     display.print F("0");
  84.   }
  85.   // Выводим минуты
  86.   display.print ((stopwatchdeltatime / 60) % 60);
  87.   display.print F(":");
  88.   // Дописываем нолик секундам
  89.   if (stopwatchdeltatime % 60 < 10)
  90.   {
  91.     display.print F("0");
  92.   }
  93.   // Выводим секунды
  94.   display.println (stopwatchdeltatime % 60);
  95.   // Выводим статус паузы
  96.   if (!stopwatch_pause)
  97.   {
  98.     display.println F("Pause");
  99.   }
  100.  
  101.   // Отрисовываем кадр
  102.   display.display();
  103. }

Вы должны авторизоваться для того, чтобы оставить комментарий.