Advertisement
Alexcnc

tacho 1.6

Mar 31st, 2020
139
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. byte n = 1;      // число лопастей
  2. int L = 757;   //  okruznost wala w mm
  3. #include <LiquidCrystal_I2C.h>
  4. LiquidCrystal_I2C lcd(0x27, 16, 2);
  5.  
  6. float r_speed, rev_time;
  7. volatile unsigned long lastflash, flash, lastshow, czas;
  8. float RPM;
  9. //String spaces = "";
  10.  
  11. void setup()
  12. {
  13.   //Serial.begin(9600);                   // открыть порт
  14.   attachInterrupt(PB9, sens, FALLING);    // подключить прерывание на 2 пин при ponizenii сигнала
  15.   lcd.begin();              // инициализация дисплея
  16.   lcd.backlight();          // включить подсветку
  17.   lcd.setCursor(0, 0);      // курсор слева 1 строчка
  18.   lcd.print("rpm ");        // слово Обороты
  19.   lcd.setCursor(0, 1);      // курсор слева 2 строчка
  20.   lcd.print("speed  ");     // слово Скорость
  21. }
  22. void sens()
  23. {
  24.   flash = micros() - lastflash;   // вычислить время между оборотами
  25.   lastflash = micros();           // запомнить время последнего оборота
  26. }
  27.  
  28. void loop()
  29. {
  30.   czas = millis() / 1000 / 60;
  31.   if (micros() - lastflash > 5000000)   // если сигнала нет больше N - секунд
  32.   {
  33.     RPM = 0;                            // считаем, что всё стоит и не крутится
  34.     r_speed = 0;
  35.  
  36.   }
  37.  
  38.   else
  39.   {
  40.     rev_time = (double) flash / 1000000 ;    // время одного оборота в секундах
  41.     RPM = (double) 60 / rev_time;            // обороты в минуту
  42.     r_speed = (double) L * RPM / 1000;   // скорость точки на радиусе, m/min
  43.   }
  44.  
  45.   if (millis() - lastshow > 500) {          // каждые 1000 миллисекунд
  46.      lcd.clear();
  47.     lcd.setCursor(0, 0);        // курсор слева 1 строчка
  48.     lcd.print("rpm ");          // слово RPM
  49.  
  50.     lcd.setCursor(6, 0);        // курсор 6 слева 1 строчка
  51.     lcd.print(RPM, 2);          // выводим RPM
  52.  
  53.     lcd.setCursor(0, 1);        // курсор слева 2 строчка
  54.     lcd.print("speed  ");       // слово Скорость
  55.  
  56.     lcd.setCursor(6, 1);        // курсор 10 слева 2 строчка
  57.     lcd.print(r_speed, 2);      // выводим скорость
  58.  
  59.   //  lcd.setCursor(12, 0);       // курсор 12 слева 1 строка
  60.   //  lcd.print("min");           // выводим /min
  61.  
  62.     lcd.setCursor(13, 1);       // курсор 14 слева 2 строка
  63.     lcd.print(czas);            // выводим czas działania
  64.  
  65.     lastshow = millis();        // сброс таймера
  66.   }
  67. }
Advertisement
RAW Paste Data Copied
Advertisement