Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Измерение длинны с двух инкрементальых энкодеров, измерение без учета направления только по одному
- //сигналу энкодера. Энкодер PIB3806-360-G5-24C, на 360 импулсов на оборот, длина окружности измерительного колеса 200мм
- #include <Wire.h>
- #include <LiquidCrystal_I2C.h>
- LiquidCrystal_I2C lcd(0x27,16,2);
- volatile long P; // количество счетчика прерываний с енкодера
- volatile long P1; // количество счетчика прерываний с фотометки
- float E; // длина по енкодеру
- float F; //
- float M; //
- float M1; //
- bool mSel=0; // флаг фотометки
- void setup() {
- pinMode(6, INPUT); // кнопка reset
- pinMode(2, INPUT_PULLUP); // вход сигнала А с энкодера
- pinMode(3, INPUT); // вход сигнала с фотометки
- attachInterrupt(0,blink1, CHANGE); // 1 прерывание с энкодера
- attachInterrupt(1,blink2, RISING); // 2 прерывание с фотометки
- lcd.begin(); // инициализация экрана
- lcd.backlight(); // вкл. подсветки
- }
- void loop() // обработка вывода на екран и длины с энкодера
- {
- if (digitalRead(6)) P=0; // если нажата кнопка reset, то Р сбрасываем в ноль
- lcd.setCursor(0,0); // устанавливаем курсор, 1 позиция 0 строка
- lcd.print("E="); // пишем Enkoder=
- E=P*0,1388; // расчет длины количество импульсов *0,13888 коефициент, коефициент= длина окружности колесика на
- // енкодере / на импульсов на оборот (1440: 360 impusow s enkodera x4 w kwadraturon rezymie)
- lcd.print(E); // выводим значение E (ето значение по сути выводить и не надо, это кусок кода с измерителя длины
- lcd.print("mm "); // пишем mm, и остальное затираем
- lcd.setCursor(0,1); // устанавливаем курсор, 0 позиция 1 строка
- lcd.print("F="); // пишем F=
- if (M1>=M);
- {
- lcd.print((M1-M)*0,1388);
- }
- // по енкодеру, но думаю это можно использовать)
- //lcd.print("mm"); // пишем mm, и остальное затираем
- }
- void blink1(){ // обработчик прерывания c энкодера
- P=P+1; // инкремент счетчика импульсов энкодера
- }
- void blink2(){ // обработчик прерывания c фотометки (тут надо на основании длины с енкодера и импульса
- // фотометки расчитать длину между фотометками )
- if (mSel=0);
- {
- M=P; // длина до первого импульса с фотометки ?
- mSel=1;
- }
- M1=P; // длина до второго импульса с фотометки ?
- mSel=0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement