Alexcnc

ABS printing machine

Jun 2nd, 2020 (edited)
341
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <LiquidCrystal_I2C.h>
  2. LiquidCrystal_I2C lcd(0x27, 16, 2);
  3.  
  4. float r_speed, rev_time_1 , rev_time_2, difference ;
  5. volatile unsigned long lastflash1 ,lastflash2, flash_1, flash_2, lastshow ;
  6. float RPM;
  7. String spaces =  "   ";  // 3 очищающх пробелов
  8. String spaces2 = "    ";  // 4 очищающх пробелов
  9.  
  10. void setup()
  11. {
  12.   attachInterrupt(PB9, sens, FALLING);      // подключить прерывание на B9 пин по падающему фронту
  13.   attachInterrupt(PB8, sens_two, FALLING);  //подключить прерывание на B8 пин по падающему фронту
  14.   //pinMode  (PC13, OUTPUT) ;
  15.    
  16.   lcd.begin();              // инициализация дисплея
  17.   lcd.backlight();          // включить подсветку
  18. }
  19.  
  20.  
  21. void sens()
  22. {
  23.   flash_1 = micros() - lastflash1;   // вычислить время оборота 1 колеса
  24.   lastflash1 = micros();
  25.   //digitalWrite(PC13,   !digitalRead(PC13));
  26. }
  27.  
  28.  void sens_two()
  29. {
  30.   flash_2 = micros() - lastflash2;   // вычислить время оборота 2 колеса
  31.   lastflash2 = micros();             // запомнить время оборота
  32.   //digitalWrite(PC13,   !digitalRead(PC13));
  33. }
  34.  
  35.  
  36. void loop()
  37. {
  38.   if (micros() - lastflash1 > 2000000)   // если сигнала нет больше N - секунд
  39.   {
  40.     rev_time_1 = 0;        // считаем, что всё стоит и не крутится
  41.     rev_time_2 = 0;        // считаем, что всё стоит и не крутится
  42.     difference = 0;        // считаем, что всё стоит и не крутится
  43.     r_speed = 0 ;           // считаем, что всё стоит и не крутится
  44.   }
  45.  
  46.   else
  47.   {
  48.     rev_time_1 = (double) flash_1 / 1000000;             // время  оборота 1 колеса в секундах
  49.     rev_time_2 = (double) flash_2 / 1000000;             // время  оборота 2 колеса в секундах
  50.     difference = (rev_time_1 - rev_time_2)*1000;                // диференциальное значение времени в милисекундах
  51.     r_speed = (162/rev_time_2)/100 ;   //  скорость метров/минуту (60*9*300/время импульса )/1000
  52.   }
  53.  
  54.   if (micros() - lastshow > 200000)    // каждые 80000 микросекунд
  55.   {                                
  56.     lcd.setCursor(0, 0);        // курсор в начале слева на 1й строчке
  57.     lcd.print("r1");            // слово revolve 1
  58.     lcd.setCursor(3, 0);        // курсор на 1й строчке, позиция 3
  59.     lcd.print(rev_time_1,3);      // выводим значение время  оборота 1 колеса в секундах
  60.     lcd.setCursor(8, 0);        // курсор на 1й строчке, позиция 7
  61.     lcd.print(spaces);          // очищаем цифры с прошлого вывода
  62.    
  63.  
  64.    
  65.     lcd.setCursor(0, 1);        // курсор в начале слева на 2й строчка
  66.     lcd.print("r2");            // слово revolve 2        
  67.     lcd.setCursor(3, 1);        // курсор на 2й строчке, позиция 3
  68.     lcd.print(rev_time_2,3);      // выводим значение время  оборота 2 колеса в секундах
  69.     lcd.setCursor(8, 1);        // курсор на 2й строчке, позиция 7
  70.     lcd.print(spaces2);          // очищаем цифры с прошлого вывода
  71.    
  72.  
  73.     lcd.setCursor(10, 0);        //
  74.     lcd.print("S=");             //
  75.     lcd.setCursor(12, 0);        //
  76.     lcd.print(r_speed,1);         // выводим значение r_speed
  77.     lcd.setCursor(12, 1);        //
  78.     lcd.print(difference,2);       // выводим значение difference
  79.  
  80.        
  81.     lastshow = micros();         // сброс таймера
  82.   }
  83. }
RAW Paste Data Copied