Bonjour,
Je travail sur un programme qui permet de faire tourner un moteur pas à pas, le cycle fait tourné le moteur d'abord dans un sens de 180° puis dans l'autre de 540° (de mémoire). Mes premiers test ce sont bien passé bien que le moteur fasse un léger sifflement. Je cherchais à régler le temps entre deux pas, lorsque j'ai fait une fausse manipulation. J'ai accidentellement éteint l'alimentation de mon PCB alors que je téléversais mon programme avec sa nouvelle valeur de tempo dans l'Arduino micro.
L'Arduino en question ne marchait plus après ça. Je ne pouvais plus le voir depuis mon pc et il ne semble plus y avoir de programme dessus. Malgré tout la LED bleu de l'Arduino est allumé pour signaler qu'il est alimenté. Lorsque j'appuie sur le bouton reset de l'Arduino la LED jaune à coter du logo Arduino clignote et l'Arduino redevient visible depuis mon ordinateur durant quelque instant.
J'ai par la suite voulu remplacer l'Arduino par un nouveau, mais celui-ci finit immédiatement dans le même état que le premier. Après beaucoup de test du PCB, j'ai fini par me rendre compte que le problème apparaissait dès que je charge le programme depuis mon pc. (Il n'y a pas d'erreur de compilation et aucun message d'erreur lors du chargement)
Le cable que j'utilise à également été utiliser par une autre personne pour charger un programme différent depuis son ordi est ne semble pas avoir de problème. Je pense donc que le problème vient soit de la sauvegarde du programme, soit de mon application Arduino, mais je ne trouve aucune documentation sur un problème similaire.
Je suis sur la version 2.2.1 de l'IDE et mon programme est le suivant :
/*
This program make a motor makes an initial left rotation of 120°
it then rotates 480° and returns to its starting position. The complete turn ensures that the flex is in place.
*/
/* setting pin numbers: */
const int DIR = 3 ;
const int STEP = 4 ;
const int MS0 = 5 ; // MS1/2/3 allows you to change to hlaf step or less (see datasheet !!Differnet value for DRV8825 and A4988)
const int MS1 = 6 ;
const int MS2 = 7 ;
const int Commande = 2 ;
//const int ModeAuto = 3 ;
/* setting value for input*/
int CommandState = 0 ; // vairable for reading the commande status
int MemComState = 0 ; // Variable for rising edge use of button
//int ModeState = 0 ; // Variable for changing the mode state (manu or Auto)
/* setting value for time and step */
int TimeStep = 10 ; // This value influence the motor speed (ms)
int MicroStepRes = 1/2 ; // variable for the resolution of the microstep (1, 1/2, 1/4, 1/8...)
int FirstStep = 40/MicroStepRes ; // First step of the programme, the motor rotates left 120° (100 step)
int SecondStep = 140/MicroStepRes ; // Second step of the programm, the motor rotates right 120°+ 360° (100 step)
void setup() {
/*initialize input pin :*/
pinMode (Commande, INPUT_PULLUP);
//pinMode (ModeAuto, INPUT_PULLUP);
/* initialize output pin :*/
pinMode (DIR, OUTPUT) ;
pinMode (STEP, OUTPUT) ;
pinMode (MS0, OUTPUT) ;
pinMode (MS1, OUTPUT) ;
pinMode (MS2, OUTPUT) ;
/*Microstep Resolution !! The value may vary between the DRV8825 and A4988*/
digitalWrite(MS0, HIGH); // Actual Microstep résolution : 1 (for DRV8825 and A4988)
digitalWrite(MS1, LOW);
digitalWrite(MS2, LOW);
}
void loop() {
CommandState = digitalRead(Commande) ; // Read the state of the command value
if(CommandState == LOW & CommandState != MemComState){
/* Motor 120° movement loop */
for(int i = 0; i<FirstStep; i++){ // Loop of step make by the stepper (stop when the number is egal to the setpoint)
digitalWrite(DIR, HIGH) ; // Activate the direction of rotation reversal pin
digitalWrite(STEP, HIGH) ; // Start step command
delay(TimeStep) ; // Time for making the step (thid value influence the sped of the motor)
digitalWrite(STEP, LOW) ; // Stop step command
digitalWrite(DIR, LOW) ; // Disable the direction of rotation reversal pin
delay(TimeStep) ; // Time befor start next step
}
/* Motor 480° movement loop */
for(int i = 0; i<SecondStep; i++){ // Loop of step make by the stepper (stop when the number is egal to the setpoint)
digitalWrite(STEP, HIGH) ; // Start step command
delay(TimeStep) ; // Time for making the step (thid value influence the sped of the motor)
digitalWrite(STEP, LOW) ; // Stop step command
delay(TimeStep) ; // Time befor start next step
}
}
MemComState = CommandState ;
}
Auriez vous une idée de ce que je peux faire pour solutionner ce problème sans risquer de foutre en l'aire une nouvelle carte ? et peut être auriez vous une idée sur un moyen de sauver mes Arduino qui ne semble pas complétement KO ?