Advertisement
Al_Ninyo

Ultratimer Sht

May 5th, 2016
335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.58 KB | None | 0 0
  1. /************************
  2.  * Ultratimer Short-track
  3.  * Authors:
  4.  * Lugovcov Gleb
  5.  * Pahomov Daniil
  6.  * Kolpakov Vladimir
  7.  * http://ut60.ru
  8.  * 30.04.2016
  9.  ************************/
  10.  
  11. #include <Wire.h>
  12. #include <LiquidCrystal_I2C.h>
  13. #include <Ultrasonic.h>
  14.  
  15. Ultrasonic ultrasonic(9,8); // (Trig PIN,Echo PIN)
  16. LiquidCrystal_I2C lcd(0x3f,16,2);
  17. // Если ваш экран не работает, возможно у него другой адрес
  18. // Попробуйте вместо lcd(0x3f,16,2) написать lcd(0x27,16,2)
  19.  
  20. int start = 0;
  21. long startTime = 0;
  22. long endTime1, endTime2, fullTime;
  23.  
  24. void setup(){
  25.   lcd.init();
  26.   lcd.backlight();
  27.   lcd.setCursor(1,0);
  28.   lcd.print("UltraTimer ShT");
  29.   lcd.setCursor(4,1);
  30.   lcd.print("ver. 2.0");
  31.   delay(3000);
  32.   lcd.clear();
  33.   lcd.setCursor(5,0);
  34.   lcd.print("Ready!");
  35. }
  36.  
  37. void loop(){
  38.   if (ultrasonic.Ranging(CM) < 20) {  //на каком расстоянии датчик
  39.                                      //будет видеть робота
  40.     switch (start) {
  41.       case 0:
  42.         startTime = millis();
  43.         lcd.clear();
  44.         lcd.setCursor(5,0);
  45.         lcd.print("Start!");
  46.         start = start+1;
  47.         delay(3000);  //чтобы робот успел уехать от датчика
  48.       break;
  49.  
  50.       case 1:
  51.         endTime1 = millis() - startTime;  //начинаем отсчёт
  52.         lcd.setCursor(0,0);
  53.         lcd.print("Lap1: ");
  54.         //разбиваем время (считаемое в мс) для вывода в виде "3.345 с"
  55.         lcd.print(endTime1/1000);  //выводим кол-во секунд 1 круга
  56.         lcd.print(".");
  57.         lcd.print(endTime1%1000);  //выводим количество мс 1 круга
  58.         lcd.print(" s");
  59.         start = start+1;
  60.         delay(3000);
  61.       break;
  62.  
  63.       case 2:
  64.         lcd.clear();
  65.         endTime2 = (millis() - startTime - endTime1);
  66.         lcd.setCursor(0,0);
  67.         //разбиваем время (считаемое в мс) для вывода в виде "3.345 с"
  68.         lcd.print(endTime1/1000);  //выводим кол-во секунд 1 круга
  69.         lcd.print(".");
  70.         lcd.print(endTime1%1000);  //выводим количество мс 1 круга
  71.         lcd.print(" / ");
  72.         lcd.print(endTime2/1000);  //выводим кол-во секунд 2 круга
  73.         lcd.print(".");
  74.         lcd.print(endTime2%1000);  //выводим количество мс 2 круга
  75.         fullTime = endTime1+endTime2; //общее время двух кругов
  76.         lcd.setCursor(0,1);
  77.         lcd.print("Time: ");
  78.         //разбиваем время (считаемое в мс) для вывода в виде "3.345 с"
  79.         lcd.print(fullTime/1000);
  80.         lcd.print(".");
  81.         lcd.print(fullTime%1000);
  82.         lcd.print(" s");
  83.         start = 0;
  84.         startTime = 0;
  85.         fullTime = 0;
  86.         endTime1 = 0;
  87.         endTime2 = 0;
  88.         delay(5000);
  89.         lcd.setCursor(15,0);
  90.         lcd.print("*"); //сигнализируем о готовности к новому отсчёту
  91.       break;
  92.     }
  93.   }
  94.     else if (ultrasonic.Ranging(CM) > 20 && start > 0){
  95.       //если таймер запущен, выводим на экран время попытки
  96.       //чтобы примерно можно было отслеживать время
  97.       lcd.setCursor(0,1);
  98.       lcd.print((millis()-startTime)/1000);
  99.       lcd.print(".");
  100.       lcd.print((millis()-startTime)%1000);
  101.       lcd.print(" s");
  102.   }
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement