Спасибо за подробное описание, я бы и сам не смог так изложить суть задачи.
Народ делает электронные гитары и электронные линейки на основе энкодеров от принтеров. Есть готовые решения и написанные скетчи под Ардуино, но надо знать количество линий на энкодерах, чтоб внести изменения в готовый скетч. Каждый делает исходя из того что попалось из принтеров вытащить, вот получается разное числи линий, сигнал синусоида или меандр да и длина разная та же диаметр. Вот для этого понадобилось прилада на которой можно это определить и выбрать то что лучше подходит.
Токарник собрал себе что то проточить, подогнать, обрезать, точность меня устраивает. Теперь хочу улучшить его функционал, поставить энкодер на вал, на продольной подаче предусмотрен шаговый двигатель и будет мне резьба. Ну и в дальнейшем поставить на продольную и поперечную подачу электронные линейки, а поперечкой тоже управлять шаговиком. Штанген меня не устраивает, мне надо на продольной и поперечной подаче 300 мм рабочего хода.
До весны хочу подготовить электронную часть, летом установить. Станочком пользуюсь на даче в летний период, там его и делал, там он и стоит.
Как пример выложу вариант электронной линейки svoll на металлическом форуме.
#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>
#include <Wire.h>
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0);
boolean A;
boolean B;
int P;
float M;
void setup() {
// put your setup code here, to run once:
pinMode(12,INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
//pinMode(2, INPUT);
//pinMode(3, INPUT);
attachInterrupt(0,blinkl,CHANGE);
attachInterrupt(1,blik,CHANGE);
u8g2.begin();
P=0;
M=0;
Serial.begin(115200);
}
void loop() {
if (digitalRead(12) == LOW)
{
P=0;
}
M=(P/28.25); // 28,25 - рассчетный коэффециент отношения длины к количеству импульсов с енкодера на этой длине.
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_logisoso28_tr);
u8g2.setCursor(0,30);
Serial.println(M);
u8g2.print(M);
// u8g2.print(P/2);
u8g2.sendBuffer();
}
void blinkl()
{
A=digitalRead(2);
B=digitalRead(3);
if (B==A) P=P+1;
else P=P-1;
}
void blik()
{
A=digitalRead(2);
B=digitalRead(3);
if (B!=A) P=P+1;
else P=P-1;
}
Я не программист, пока пытаюсь понять что к чему.
Из этого скетча хотелось получить возможность считывать линии вперед и назад, наверно он должен быть попроще. Электроника у меня есть, в том числе и шаговые двигатели на продольную и поперечную подачу.