Металл2024 Реклама
Метобр2024 Реклама

Как написать свою функцию для марлина ? (звучит глупо)

onvoid
Идет загрузка
Загрузка
06.07.2019
656
11
Вопросы и ответы
Задача:

1)Установка на дельта принтер нестандартного (треугольного или шестиугольного) стола,

2)Запрограммировать функцию в марлине так, что бы, принтер всегда знал границы стола, и не выходил за их пределы

Моё виденье выполнения:

Границы стола можно описать прямыми отрезками, составить 'этакий' многоугольник.

В файле Configuration.h

прописываем два массива координат X и Y, эти координаты где отрезки соединяются.

(в марлине 2.0 от 2019 года)

в файле motion.h

есть функция проверки 'находятся ли текущие координаты в области печати &rx и &ry', и если ДА то выдаёт TRUE, если нет то FALSE

в этой функции идёт сравнение по переменной DELTA_PRINTABLE_RADIUS (т.е. радиус печатной области круглого стола)

выглядит это так:

// Return true if the given point is within the printable area

inline bool position_is_reachable(const float &rx, const float &ry, const float inset=0) {

#if ENABLED(DELTA)

return HYPOT2(rx, ry) <= sq(DELTA_PRINTABLE_RADIUS - inset);

#endif

#elif IS_SCARA

......

дальше идёт для кинематики SCARA она уже не важна.

для проверки я менял значение DELTA_PRINTABLE_RADIUS именно в этой функции и ещё в одной функции для меню принтера, там тоже делает упор на значение DELTA_PRINTABLE_RADIUS, и отключат все программные ЭНДСТОПЫ

результат: из меню принтера можно двигать эффектор за пределы границ стола(если механика тяг позволяет)

ДАЛЕЕ

в этом файле прописываем свою функцию проверки 'находится ли каоординаты печати в области границы НАШЕГО МНОГО-УГОЛЬНОГО стола'

Что уже сделал:

в файле Configuration.h

прописал

#define ArrayBedXY

#if ENABLED(ArrayBedXY)

#define arrayBedX {100, 100, 20, -20, -100, -100};//координаты для примера

#define arrayBedY {100, -20, -100, -100, -20, 100};//координаты для примера

#endif

в файле motion.h

хотел прописать свою функцию расчёта

inline bool position_is_reachable(const float &rx, const float &ry, const float inset=0) {

#if ENABLED(DELTA)

#if ENABLED(ArrayBedXY)

///////////////////////////////

//Здесь должен быть код проверки, это заголовочный файл

// простое логическое true/false (правда/ложь)

//т.е. в данном месте необходимо сделать функцию проверки текущих координат $rx и $ry, с функцией вычисляющей гарницы печатного стола

// результат сравнения либо true(правда ,точка находится в области печати), либо false(лож, точка не находится в области печати)

///////////////////////////////

return HYPOT2(rx, ry) <= sq(DELTA_PRINTABLE_RADIUS - inset);//данное выражение оставил только для того что бы неругалось при компилировании

#else

return HYPOT2(rx, ry) <= sq(DELTA_PRINTABLE_RADIUS - inset);

#endif

#elif IS_SCARA

-------------------------------------------------------

из того что не получилось

хотел прописать массивы в Configuration.h

int arrayBedX[] = {100, 100, 20, -20, -100, -100}

int arrayBedY[] = {100, 100, 20, -20, -100, -100}

компилятор ругается

--------------------------------------------------

Раньше умел немного программировать в матлабе, создавал свои М-функции, делал графики

А в Си подобном немогу разобраться, почему есть файлы с расширением .h и .cpp

Просто подскажите почему не получается использовать работу смассивом

#define arrayBedX {100, 100, 20, -20, -100, -100} из Configuration.h

в функции в файле motion.h

Логику сравнения ещё не придумал, сначала хочу разобраться с тем , где и что прописывать.
Ответы на вопросы
Кремень КБ Реклама
Кремень КМ Реклама