Aller au contenu

Messages recommandés

Posté(e)
il y a une heure, Kachidoki a dit :

Tu t'es quand même vachement bien embêté la vie pour positionner la sonde. Normalement c'est buse contre le plateau et l'épaisseur approximative d'un rislan, comme ça :

Oui fidéle à ma réputation "pourquoi faire simple quand on peut faire compliqué" 🤣

Après je n'avais pas de rislan ni autre objet de 1.5mm de haut sous la main, en revanche j'avais ce comparateur et en vie de m'en servir 😁

il y a une heure, Kachidoki a dit :

Sinon good job. 👍 Tu as pratiquement tout ce qu'il faut pour transformer ton extruder en MK3S+. En gros t'es plus très loin de la MK2.5. 😆

Quitte à réimprimer toutes les pièces, tu devrais mettre une buse renforcée et les faire en PCCF. Une chaussette silicone serait pas mal non plus vu que tu travailles toujours à des températures élevées.

Oui c'est ce que je me disait aussi

Après le but c'était de faire une mise à jour pas chère, et aussi... "de ne pas toucher à ce qui fonctionne"

J'avais aussi une autre crainte : comme l'imprimante a 8 ans, et qu'elle a quand même fonctionné un certain temps dans une enceinte à 60°C, j'ai peur que certaines pièces soient devenues cassantes. Donc j'ai limité au maximum le démontage / remontage.

Et... il faut d'abord que je remette en route mon imprimante pour pouvoir réimprimer des pièces 😅

A voir si je refais l'extrudeur... les pièces que j'avais refaites en ABS ont bien résistées, et je maitrise l'impression de ce matériaux.

Je souhaite réutiliser les pièces que j'ai déjà, et si besoin, utiliser les pièces détachées du kit MMU1 (c'est pas que je sois radin, mais je n'aime pas le gâchis)

 

Pour le moment je vais m'amuser un peu avec l'IDE Arduino et le code source du firmware. Là, je sèche un peu sur les macro dans le code (je ne maitrise pas bien cet aspect du C++)

Je souhaite en profiter pour améliorer un point que je trouve très agaçant de l'interface : le réglage des températures

Qu'il s'agisse de la température du lit ou de la buse, il faut régler une valeur élevée (100°C pour le bed et 200°C à 260°C pour la buse) à partir de zéro, en tournant un bouton cranté dont chaque cran augmente la température de 1°C  

Le code concerné utilise des macros que je ne comprends pas bien.

Voici les lignes de codes qui sont appelées pour régler la température avec le fameux bouton :

  MENU_ITEM_EDIT(int3, MSG_NOZZLE, &target_temperature[0], 0, HEATER_0_MAXTEMP - 10);//3 
  MENU_ITEM_EDIT(int3, MSG_BED, &target_temperature_bed, 0, BED_MAXTEMP - 10);//4

Voici les macros que l'on trouve plus haut :

/* Helper macros for menus */
#define START_MENU() do { \
    if (encoderPosition > 0x8000) encoderPosition = 0; \
    if (encoderPosition / ENCODER_STEPS_PER_MENU_ITEM < currentMenuViewOffset) currentMenuViewOffset = encoderPosition / ENCODER_STEPS_PER_MENU_ITEM;\
    uint8_t _lineNr = currentMenuViewOffset, _menuItemNr; \
    bool wasClicked = LCD_CLICKED;\
    for(uint8_t _drawLineNr = 0; _drawLineNr < LCD_HEIGHT; _drawLineNr++, _lineNr++) { \
      _menuItemNr = 0;
 
#define MENU_ITEM(type, label, args...) do { \
    if (_menuItemNr == _lineNr) { \
      if (lcdDrawUpdate) { \
        const char* _label_pstr = (label); \
        if ((encoderPosition / ENCODER_STEPS_PER_MENU_ITEM) == _menuItemNr) { \
          lcd_implementation_drawmenu_ ## type ## _selected (_drawLineNr, _label_pstr , ## args ); \
        }else{\
          lcd_implementation_drawmenu_ ## type (_drawLineNr, _label_pstr , ## args ); \
        }\
      }\
      if (wasClicked && (encoderPosition / ENCODER_STEPS_PER_MENU_ITEM) == _menuItemNr) {\
        lcd_quick_feedback(); \
        menu_action_ ## type ( args ); \
        return;\
      }\
    }\
    _menuItemNr++;\
  } while(0)
 
#define MENU_ITEM_DUMMY() do { _menuItemNr++; } while(0)
#define MENU_ITEM_EDIT(type, label, args...) MENU_ITEM(setting_edit_ ## type, label, (label) , ## args )
#define MENU_ITEM_EDIT_CALLBACK(type, label, args...) MENU_ITEM(setting_edit_callback_ ## type, label, (label) , ## args )
#define END_MENU() \
  if (encoderPosition / ENCODER_STEPS_PER_MENU_ITEM >= _menuItemNr) encoderPosition = _menuItemNr * ENCODER_STEPS_PER_MENU_ITEM - 1; \
  if ((uint8_t)(encoderPosition / ENCODER_STEPS_PER_MENU_ITEM) >= currentMenuViewOffset + LCD_HEIGHT) { currentMenuViewOffset = (encoderPosition / ENCODER_STEPS_PER_MENU_ITEM) - LCD_HEIGHT + 1; lcdDrawUpdate = 1; _lineNr = currentMenuViewOffset - 1; _drawLineNr = -1; } \
  } } while(0)

Ce que je comprends, c'est que MENU_ITEM_EDIT est une macro qui permet de régler une valeur avec le bouton, avec une valeur maxi et une valeur mini.

Pour moi ce n'est pas très clair, je ne maitrise pas bien les macros en C++
Si j'avais écris ce code, j'aurais utilisé des fonctions à la place de ces macros.

Je voudrais changer le comportement pour le réglage de la température du lit (bed) et de la buze (nozzle) pour avoir des fonctions séparées, mais je ne sais pas comment réécrire ces fonctions séparément (donc sans macro) pour ensuite les modifier

Une fois ce travail de réécriture faite, ce sera facile de faire ce que je veux, à savoir :

Pour la température de la buse : quand elle est à zéro (démarrage de l'imprimante ou arrêt de l'impression), que dès le premier clic de rotation du bouton dans le sens des aguilles d'une montre je passe directement à 180°C - et inversement, si je tourne le bouton dans le sens anti-horaire, que ça passe à zéro juste après 180°

Pour la température du lit : avoir des pas de 5°C jusque 95°C et ensuite avoir des pas de 1°C

Et bien sûr, ajouter un menu pour régler la température de l'enceinte (mais il faudra aussi que je permette au GCODE de préciser la température de l'enceinte, ce qui implique également de créer un nouveau profil d'imprimante dans Prusa Slicer)

Je pense également changer l'agencement des menus et sous-menus, les fonctions que j'utilise souvent sont dans des menus différents c'est casse-pied.
Il s'agit aussi de préserver la durée de vie du fameux bouton rotatif.

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...