Bonjour,
1) tout d'abord, ce code :
n = currentAngle - angle;
if( angle == 0){
n =currentAngle;
}
seul la première ligne est utile, les trois suivantes ne servent à rien, vu qu'elles donnent la même valeur pour n.
2) tout à la fin, tu débloque l'axe (tu mets enPin à HIGH), mais nullepart tu le re-active : je pense qu'il faut que tu mettes digitalWrite( enPin, Low ); au début du code
3) ru ne m'as toujours pas dit pourquoi tu ne veux plus utiliser la bibliothèque Steppers.h?
4) la boucle qui fait avancer le moteur :
for(int x = 0; x < numstep; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin,LOW);
delayMicroseconds(1000);
}
ne peut que faire avancer le moteur, pas le faire reculer (raison de plus d'utiliser la bibiliothèque steppers que tu utilisais avant
5) pour l'enregistrement dans l'EEPROM, le fait de diviser par 2 est risqué : si ton angle est impaire, en divisant par 2 à l'enregistrement puis en le multipliant par 2 en le réucupérant, tu vas perdre 1°. Si régulièrement tu avance d'un nombre impair de degrés, ta position finira complètement fausse. Du coup, je vois deux solutions :
a) imposer que l'angle soit toujours pair, en remplaçant "angle=alfa_1;" par "angle=(alfa_1/2)*2;" (nb : garde la formule telle quelle, d'autres écritures qui mathématiquement seraient les mêmes (par exemple alfa_1*2/2) donnent pas le même résultat quand on travaille avec des entiers. Dans cette solution, on arrondira tous les angles à l'angle pair inférieur : on n'aura donc une résolution que de 2°, mais au moins on sauvergarde la vrai position
enregistrer la vrai valeur de l'angle en utilisant 2 octets : dans ce cas tu peux utiliser EEPROM.put(adresse, variable) et EEPROM.get(adresse, variable) où variable est une variable du type que tu veux (par exemple int) qui sera stoqué sur le nombre d'octets nécessaires (2 pour un int). A noter qu'il ne faut alors pas utiliser l'adresse juste après pour stoqué autre chose, car elle est déjà utilisée.
Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...
Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.