Определение макроса с переменными

c++

Я работаю над программой Marlin 3D. Я сделал некоторые изменения для xyz prop, и я не делаю определение как #define PRB_GCODE_END "G92 X-" XOFF "Y"XOFF "Z"ZOFF " \ n", чтобы отправить окончательные координаты xyz как gcode в конце процедуры обнародования. Это необходимо. Если у кого-то есть идеи, как использовать переменные типа float во время определения макроса, пожалуйста, помогите.

void _user_gcode_exe(const char * const cmd) {
  lcd_return_to_status();
  enqueue_and_echo_commands_P(cmd);
}
 
void user_gcode_exe_1() { 
  float XOFF = (25.00 + PRB_XOFFSET + (TOOL_DIA / 2.00));
  float YOFF = (25.00 - (PRB_YOFFSET + (TOOL_DIA / 2.00)));
  float ZOFF = (10.00 + PRB_ZOFFSET);
  
#define PRB_GCODE_END "G92 X-" XOFF " Y" XOFF " Z" ZOFF "\n"
    
#define PRB_GCODE "M117 Z-XY Probing now..\nG38.2 F120 Z-20.00\nG92 X0.00 Y.00 Z0.00\nG0 Z5.00 F1200\nG0 X-20.00 F1200\nG0 Z-5.00 F1200\nG38.2 F120 X25.00\nG92 X0.00\nG0 X-5.00 Y-25.00 F1200\nG0 X15.00 F1200\nG38.2 F120 Y25.00\nG92 Y0.00\nG0 Y-5.00 F1200\nG0 Z10.00 F1200\nG0 X-25.00 Y25.00 F1200\n"
  
#define MSG__OK "M117 Z-XY Probing done..\n"   
  _user_gcode_exe(PSTR(PRB_GCODE PRB_GCODE_END MSG__OK)); 
}

При определении PRB_GCODE_ENDубедитесь, что переменные типа float включены в это определение. Например: Учитывая, что переменные XOFF, YOFF и ZOFF вычисляются как 12.85, 11.25 и 10.50 соответственно. PRB_GCODE_END должен происходить следующим образом: G92 X-12.85 Y 11.25 Z10.50 \n

, 👍0

Обсуждение

почему вы задаете вопрос о программировании на c ++ на сайте arduino? ... как ваш вопрос связан с arduino?, @jsotola

эта программа работает на arduino mega, @fatihcem


1 ответ


3

Ты не можешь. Переменные и макросы - это совершенно разные понятия, которые обрабатываются совершенно разными частями цепочки инструментов компилятора.

Вместо этого вам нужно будет построить свою строку в массив char (или любой другой формат, который принимает функция _user_gcode_exec()) с помощью sprintf .

,