Advertisement
Alexcnc

tacho 1.4

Feb 26th, 2020
150
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. byte n = 1;      // число лопастей
  2. float D = 6.38;   //  диаметр тела в сантиметрах
  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.   //Serial.begin(9600);                   // открыть порт
  13.   attachInterrupt(0, sens, FALLING);    // подключить прерывание на 2 пин при ponizenii сигнала
  14.   lcd.begin();              // инициализация дисплея
  15.   lcd.backlight();          // включить подсветку
  16.   lcd.setCursor(0, 0);      // курсор слева 1 строчка
  17.   lcd.print("rpm ");        // слово Обороты
  18.   lcd.setCursor(0, 1);      // курсор слева 2 строчка
  19.   lcd.print("speed  ");     // слово Скорость
  20. }
  21. void sens()
  22. {
  23.   flash = micros() - lastflash;   // вычислить время между двумя оборотами
  24.   lastflash = micros();           // запомнить время последнего оборота
  25. }
  26.  
  27. void loop()
  28. {
  29.     czas = millis()/1000/60;
  30.    // Serial.println (czas);
  31.   if (micros() - lastflash > 4000000)   // если сигнала нет больше N - секунд
  32.   {
  33.     RPM = 0;                            // считаем, что всё стоит и не крутится
  34.     r_speed = 0;
  35.    
  36.   }
  37.   else
  38.   {
  39.     rev_time = (double) flash / 1000000 * 1;             // время одного оборота в секундах, с учётом числа лопастей
  40.     //Serial.println (rev_time);                           // пишем в порт время одного оборота
  41.     RPM = (double) 60 / rev_time;                        // обороты в минуту
  42.     r_speed = (double) 3.14159265358979323846 * D*60 / rev_time /100;      // скорость точки на радиусе, m/min
  43.   }
  44.   if (millis() - lastshow > 1000) {  // каждые 1000 миллисекунд
  45.     lcd.clear();
  46.     lcd.setCursor(0, 0);        // курсор слева 1 строчка
  47.     lcd.print("rpm ");          // слово RPM
  48.    
  49.     lcd.setCursor(0, 1);        // курсор слева 2 строчка
  50.     lcd.print("speed  ");       // слово Скорость
  51.    
  52.     lcd.setCursor(6, 0);        // курсор 4 слева 1 строчка
  53.     lcd.print(RPM, 1);             // выводим RPM
  54.    
  55.     lcd.setCursor(12, 0);       // курсор 12 слева 1 строка
  56.     lcd.print("min");          // выводим /min
  57.    
  58.     lcd.setCursor(6, 1);        // курсор 10 слева 2 строчка
  59.     lcd.print(r_speed, 1);         // выводим скорость
  60.  
  61.     lcd.setCursor(13, 1);       // курсор 14 слева 2 строка
  62.     lcd.print(czas);          // выводим czas działania
  63.    
  64.     lastshow = millis();        // сброс таймера
  65.   }
  66. }
Advertisement
RAW Paste Data Copied
Advertisement