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 boolean A, B;
- volatile long P; //число прерываний
- volatile long P1;
- float M; //длина
- float M2;
- void setup() {
- pinMode(6, INPUT); // кнопка reser
- pinMode(2, INPUT_PULLUP); // вход сигнала А с 1 энкодера
- pinMode(3, INPUT_PULLUP); // вход сигнала А с 2 энкодера
- attachInterrupt(0,blink1, CHANGE); // первое прерывание с 1 энкодера
- attachInterrupt(1,blink2, CHANGE); // второе прерывание с 2 энкодера
- lcd.begin(); // инициализация экрана
- lcd.backlight(); // вкл. подсветки
- }
- void loop() // обработка вывода на екран и длины с 1 энкодера
- {
- if (digitalRead(6)) P=0; // если нажата кнопка reset, то Р сбрасываем в ноль
- lcd.setCursor(0,0); // устанавливаем курсор, 1 позиция 0 строка
- lcd.print("Top="); // пишем Top=
- M=(P/3.6)/10; // расчет коэфицыента для 1 энкодера и длины M1 (360*2),720/200=3,6
- lcd.print(M); // выводим значение M
- lcd.print("cm "); // пишем cm, и остальное затираем
- // обработка вывода на екран и длины с 2 энкодера
- if (digitalRead(6)) P1=0; // если нажата кнопка reset, то Р1 сбрасываем в ноль
- lcd.setCursor(0,1); // устанавливаем курсор, нолевая позиция первая строка
- lcd.print("Bot.="); // пишем Bottom=
- M2=(P1/3.6)/10 ; // расчет коэфицыента 2 энкодера и длины M2 (360*2),720/200=3,6
- lcd.print(M2); // выводим значение М2
- lcd.print("cm "); // пишем cm, и остальное затираем
- }
- void blink1()
- { // обработчик 1 прерывания
- P=P+1; // инкремент импульса
- //A=digitalRead(2); // считываем состояние pin2
- //B=digitalRead(3); // считываем состояние pin3
- //if (B==A) //
- //else P=P-1; //
- }
- void blink2(){ // обработчик 2 прерывания
- P1=P1+1; // инкремент импульса
- //A=digitalRead(2); // считываем состояние pin2
- //B=digitalRead(3); // считываем состояние pin3
- //if (B!=A); //
- //else P1=P1-1; //
- }
RAW Paste Data
Copied