int i = 0; //nombre de pas pour faire un tour long num = 0; //variable permettant de choisisr le moteur aléatoirement avec la fonction "random" long old_num = 0; //variable permettant d'enregistrer quel moteur a été activé et ne pas réutiser le même int Capteur = A2; //Capteur photoélectrique bool Capt; // variable permettant d'enregistrer si une pièce a été détectée bool directionSignal = 8; //besoin que d'un seul pin direction grâçe au multiplexage sur le hardware int moveSignal1 = 3; //seulement certains pins peuvent êtres utilisés pour la commande du moteur (PWM) int moveSignal2 = 5; int moveSignal3 = 6; bool enableSignal1 = 10; //permet d'activer la voie du moteur 1 bool enableSignal2 = 11; //permet d'activer la voie du moteur 2 bool enableSignal3 = 12; //permet d'activer la voie du moteur 3 int tempo = 2; // Cette valeur détermine la vitesse du moteur, 1 = rapide, 100 = lent unsigned long previousMillis = 0; // enregistre le temps de fonctionnement de la carte unsigned long currentMillis = 0; const long interval = 5000; void setup() { //setup code Serial.begin(9600); pinMode(Capteur, INPUT); //Définition du pin en entrée pinMode(moveSignal1, OUTPUT); //Définition des pins en sortie pinMode(moveSignal2, OUTPUT); pinMode(moveSignal3, OUTPUT); pinMode(directionSignal, OUTPUT); pinMode(enableSignal1, OUTPUT); pinMode(enableSignal2, OUTPUT); pinMode(enableSignal3, OUTPUT); pinMode(LED_BUILTIN, OUTPUT); //permet de voir l'avancement du programme } void loop() { digitalWrite(directionSignal, LOW); //permet de choisir la direction (une seule direction dans notre cas) Capt = 0; //Initialisation de la valeur du capteur de pièce while (num == old_num) { num = random(1,4); //fonction "random": min inclusif et max exclusif } old_num = num; //enregistrement de quel moteur est sélectionné while (Capt == 0) { digitalWrite(LED_BUILTIN, HIGH); //allume la LED if (num == 1) //moteur 1 activation { digitalWrite(enableSignal1, HIGH); //permet d'activer le driver du moteur 1 digitalWrite(moveSignal1, LOW); //logique négative pour lancer le mouvement delay(tempo); //temps entre deux pas digitalWrite(moveSignal1, HIGH); digitalWrite(enableSignal1, LOW); //permet de désactiver le driver du moteur 1 } if (num == 2) //moteur 2 activation { digitalWrite(enableSignal2, HIGH); //permet d'activer le driver du moteur 2 digitalWrite(moveSignal2, LOW); delay(tempo); digitalWrite(moveSignal2, HIGH); digitalWrite(enableSignal2, LOW); //permet de désactiver le driver du moteur 2 } if(num == 3) //moteur 3 activation { digitalWrite(enableSignal3, HIGH); //permet d'activer le driver du moteur 3 digitalWrite(moveSignal3, LOW); delay(tempo); digitalWrite(moveSignal3, HIGH); digitalWrite(enableSignal3, LOW); //permet de désactiver le driver du moteur 3 } currentMillis = millis(); //enregistre le temps auquel un moteur a été activé if ((analogRead(Capteur) < 500) or (currentMillis - previousMillis >= interval)) { previousMillis = currentMillis; //sauvegarde le temps de la précédente activation d'un moteur Capt = 1; //pièce détectée digitalWrite(moveSignal1, HIGH); // arrêt du moteur delay(1000); } else { Capt = 0; //pièce non détectée } } digitalWrite(LED_BUILTIN, LOW); delay(2000); ... (4 lignes restantes)