Alexcnc

foto marker dystans

Oct 6th, 2022 (edited)
1,063
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.49 KB | None | 0 0
  1. //Измерение длинны посредством инкрементального энкодера и фотометки.
  2. //Энкодер PIB3806-360-G5-24C, на 360 импулсов на оборот, длина окружности измерительного колеса 200мм
  3.  
  4. #include <Wire.h>
  5. #include <LiquidCrystal_I2C.h>
  6.  
  7. LiquidCrystal_I2C lcd(0x27,16,2);
  8.  
  9. volatile long P;                   // количество счетчика прерываний с енкодера
  10. //volatile long P1;                  // количество счетчика прерываний с фотометки
  11. float E;                           // длина по енкодеру
  12. float F;                           //  
  13. float M;                           //
  14. float M1;                          //
  15. volatile bool intFlag = false;     // флаг фотометки
  16.  
  17. void setup() {
  18. pinMode(6, INPUT);                  // кнопка reset
  19. pinMode(2, INPUT_PULLUP);           // вход сигнала А с энкодера
  20. pinMode(3, INPUT);                  // вход сигнала с фотометки
  21. attachInterrupt(0,blink1, RISING);  // 1 прерывание с энкодера
  22. attachInterrupt(1,blink2, RISING);  // 2 прерывание с фотометки
  23. lcd.begin();                        // инициализация экрана
  24. lcd.backlight();                    // вкл. подсветки
  25. }
  26.  
  27. void loop()                     // обработка вывода на екран и длины с энкодера
  28. {
  29. if (digitalRead(6)) P=0;            // если нажата кнопка reset, то Р сбрасываем в ноль
  30. if (digitalRead(6)) M=0;
  31. lcd.setCursor(0,0);                 // устанавливаем курсор, 1 позиция 0 строка  
  32. lcd.print("Enk.L=");               // пишем Enk.L=
  33. E=P*0.277777;                   // расчет длины с енкодера, коефициент= длина окружности колесика на
  34.                                     // енкодере деленое на импульсов на оборо, 720импульсов, 200/720=0,277777
  35. lcd.print(E,3);                     // выводим значение E , просто общая длина с енкодера
  36. lcd.print("mm.        ");           // пишем mm, и остальное затираем
  37. lcd.setCursor(0,1);                 // устанавливаем курсор, 0 позиция 1 строка
  38. lcd.print("F.=");                   // пишем F.=
  39. if (M1>=M);
  40. {
  41.  lcd.print((M1-M)*0.277777);    // расчет длины с фотометки
  42.  }                                                                      
  43. lcd.print("mm       ");             // пишем mm, и остальное затираем
  44. }
  45.  
  46.  
  47. void blink1(){                  // обработчик прерывания c энкодера
  48. P=P+1;                               // инкремент счетчика импульсов энкодера
  49. }
  50.  
  51.  
  52. void blink2(){                       // обработчик прерывания c фотометки                                  
  53. if (intFlag=false);
  54.  
  55.   M=P;                               // длина до первого импульса с фотометки ?
  56.   intFlag = true;            
  57.                
  58.   //M1=P;                              // длина до второго импульса с фотометки ?
  59.   //intFlag =false;
  60.  
  61. }
Advertisement
Add Comment
Please, Sign In to add comment