Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <LiquidCrystal_I2C.h>
- LiquidCrystal_I2C lcd(0x27, 16, 2);
- float r_speed, rev_time_1 , rev_time_2, difference ;
- volatile unsigned long lastflash1 ,lastflash2, flash_1, flash_2, lastshow ;
- float RPM;
- String spaces = " "; // 3 очищающх пробелов
- String spaces2 = " "; // 4 очищающх пробелов
- void setup()
- {
- attachInterrupt(PB9, sens, FALLING); // подключить прерывание на B9 пин по падающему фронту
- attachInterrupt(PB8, sens_two, FALLING); //подключить прерывание на B8 пин по падающему фронту
- //pinMode (PC13, OUTPUT) ;
- lcd.begin(); // инициализация дисплея
- lcd.backlight(); // включить подсветку
- }
- void sens()
- {
- flash_1 = micros() - lastflash1; // вычислить время оборота 1 колеса
- lastflash1 = micros();
- //digitalWrite(PC13, !digitalRead(PC13));
- }
- void sens_two()
- {
- flash_2 = micros() - lastflash2; // вычислить время оборота 2 колеса
- lastflash2 = micros(); // запомнить время оборота
- //digitalWrite(PC13, !digitalRead(PC13));
- }
- void loop()
- {
- if (micros() - lastflash1 > 2000000) // если сигнала нет больше N - секунд
- {
- rev_time_1 = 0; // считаем, что всё стоит и не крутится
- rev_time_2 = 0; // считаем, что всё стоит и не крутится
- difference = 0; // считаем, что всё стоит и не крутится
- r_speed = 0 ; // считаем, что всё стоит и не крутится
- }
- else
- {
- rev_time_1 = (double) flash_1 / 1000000; // время оборота 1 колеса в секундах
- rev_time_2 = (double) flash_2 / 1000000; // время оборота 2 колеса в секундах
- difference = (rev_time_1 - rev_time_2)*1000; // диференциальное значение времени в милисекундах
- r_speed = (162/rev_time_2)/100 ; // скорость метров/минуту (60*9*300/время импульса )/1000
- }
- if (micros() - lastshow > 200000) // каждые 80000 микросекунд
- {
- lcd.setCursor(0, 0); // курсор в начале слева на 1й строчке
- lcd.print("r1"); // слово revolve 1
- lcd.setCursor(3, 0); // курсор на 1й строчке, позиция 3
- lcd.print(rev_time_1,3); // выводим значение время оборота 1 колеса в секундах
- lcd.setCursor(8, 0); // курсор на 1й строчке, позиция 7
- lcd.print(spaces); // очищаем цифры с прошлого вывода
- lcd.setCursor(0, 1); // курсор в начале слева на 2й строчка
- lcd.print("r2"); // слово revolve 2
- lcd.setCursor(3, 1); // курсор на 2й строчке, позиция 3
- lcd.print(rev_time_2,3); // выводим значение время оборота 2 колеса в секундах
- lcd.setCursor(8, 1); // курсор на 2й строчке, позиция 7
- lcd.print(spaces2); // очищаем цифры с прошлого вывода
- lcd.setCursor(10, 0); //
- lcd.print("S="); //
- lcd.setCursor(12, 0); //
- lcd.print(r_speed,1); // выводим значение r_speed
- lcd.setCursor(12, 1); //
- lcd.print(difference,2); // выводим значение difference
- lastshow = micros(); // сброс таймера
- }
- }
Add Comment
Please, Sign In to add comment