Bonjour à tous !
Nouveau projet pour moi qui est de créer une machine pour recycler les plastiques en Fil pour imprimante 3D !
Le fichier code est en OPEN SOURCE et j'ai déjà modifié pas mal d'erreurs dans le code ( surtout le LCD) mais je bloque sur un problème au niveau de l'encodeur rotatif.
J'ai essayé toutes les combinaisons possibles pour "mes connaissances" (code arduino/branchements/changer les valeurs PINS etc etc..) mais lorsque que je compile et Upload ( tout va bien jusque là) le bouton rotatif éteint l'écran LCD lorsque que je tourne la molette ou appui sur le bouton.
Le système est composé d'une RAMPS 1,5 et arduino MEGA 2560.
à savoir que si j'essaye un code (MARLIN Firware) tout fonctionne parfaitement.
J'ai essayé pas mal de combinaisons des paramètres du fichier .ino, surtout les adresses/MASK des PINS et "interrupt service" sans résultat.
Auriez vous une idée?
Merci
Merci de ta pertinence;)
Juste ce sont des tests que j'ai fait sans le mode interrupt car les pin 2 et 3 (PIN A et PINB dans le code pour l'ATmega2560 sont différents suivant les schèmas "officiels" .. ) bien qu'ils restent INT0 et INT1, même constat sur les autres INT de dispo ( 18,19,20,21).
Tout ces tests car le système fonctionne entièrement avec l'encodeur branché sur les PIN 31(enc1) 32(enc2) et 33 (btnenc) sur la RAMPS et MARLIN qui ne sont pas du tout des PIN d'interruption du MEGA !
Et c'est la où mes compétences s'arrêtent pour transposer entre les 2 systèmes de codage .
A la fin je pense que les connexions réagissent avec l'encoder, seulement chaque clic rotatif éteint l'écran puis le rallume et idem pour le bouton donc cela proviendrait du code.. mais bon je vais revérifier tout ça..
désolé je ne comprends rien à ce que vous dites...
si les fonctions PinA() et PinB() ne sont pas appelées, aucun code ne traite l'encodeur rotatif
au niveau de l'encodeur rotatif vous avez ce code là:
//________________________________________________________________________________
//Rotary encoder interrupt service routine for one encoder pins
//#ifdef __AVR_ATmega2560__
#define PIN PINE
#define ABMASK 0b00110000
#define AMASK 0b00010000
#define BMASK 0b00100000
PINE sur un arduino MEGA c'est un registre du PORT E (pin 2 à 9) et tels que les masques sont définis on dirait que c'est câblé pour les pins D6 et D7, soit INT4 et INT5 au niveau des interruptions mais les pins de l'encodeur sont définies comme cela on dirait
static int pinA = 31; //interrupt pins for scrollable navigation
static int pinB = 33;
bref, je ne comprends rien à ce que vous bidouillez ou ce que vous attendez...
Je pense ne pas avoir été assez clair pardon et vous pas assez au fait de la possibilité de mettre une carte de gestion type RAMPS/MARLIN sur les arduino MEGA voilà peut être pourquoi vous ne comprenez rien ?
la question en plus claire :
pourquoi lorsque je clique sur l'encoder c'est l'écran qui s'éteint au lieu de faire défiler le menu sur le LCD peut importe les PIN d'interruption utilisés?
Je mets le fichier Original sans modifications ce sera mieux pour ne pas vous faire tourner en rond encore mille excuses
L'encodeur est un type EC11(cf photo) avec 5 "pattes" branchées sur les PIN 2(PinA),3(PinB) et 14(buttonpin switch) de la RAMPS et les 2 GROUNDs correspondants normalement aux PIN de l'arduino MEGA fixé dessus (récupéré du DATASHEET RAMPS et arduino MEGA officiels)
Comme dit dans mon 1er message ce sont les clics en tournant ET le Bouton qui font s'éteindre l'écran LCD.
Encore une fois aucun problème matériel car la config fonctionne en uploadant un autre sketch mais avec cet encoder branché sur d'autres Pins (31,33 et 35) d'où les incohérences remarquées sur le code pour mes tests.
De mémoire les pins 2 et 3 servent de limit switch sur un ramps (X_MIN_PIN et X_MAX_PIN) qui sont reprises sur un bornier. Vous n’avez pas de cavaliers qui traînent à l’endroit des end stops ?
dfgh:
hello
nous en sommes au post #8 et je n'ai toujours pascompris e que tu veux.
j'ai telehargé ton code "original" que tu donnes en post #4. il ne compile pas ca il manque la fonction screenUpdate(state, currentTemp);
tu ferais mieux en donnant le lien.
tu veux adapter un encodeur, mais sur le code original, on voit que c'est déjà prévu et qu'il est raccordé à INT0 et INT1
c'est un investissement en temps et c'est très chiant de tomber sur un code incomplet.
Décidément je suis pas habitué à poster et ça se voit!
En fait j'ai récupéré ce code et la liste du matériel nécessaire au projet ( daté de 2018 ) qui est censé déjà être fonctionnel, seulement ce n'est pas le cas. j'ai déjà du modifié la partie LCD et maintenant qu'il fonctionne c'est l'encoder qui me pose problème.
Pour le coup chez moi il compile bien et téléverse.
Je comprends que vous avez d'autres priorité je ferais avec
merci en tous les cas d'avoir essayer
la version de code que tu donne ne compile pas car il manque une fonction traitant l'affichage.
ce n'est pas important, on peux virer les 4 appels à cette fonctions et e code compilera..
je viens de le faire et ça compile.
je viens de télécharger le code source en suivant ton lien en #12. il y manque aussi la fonction d'affichage
je vous promets que chez moi le fichier dans le lien en #12 justement compile très bien tel quel ,alors le pb doit venir d'ailleurs j'ai l'impression..
la version de code que tu donne ne compile pas car il manque une fonction traitant l'affichage.
ce n'est pas important, on peux virer les 4 appels à cette fonctions et e code compilera..
je viens de le faire et ça compile.
je viens de télécharger le code source en suivant ton lien en #12. il y manque aussi la fonction d'affichage
en fait la fonction d'affichage est gérée par LIQUIDCRYSTAL et elle est présente dans le sketch.. qu'est ce que je n'ai pas compris du coup ?