Bonjour , je ne parvient pas à faire fonctionné mon moteur comme je le souhaite.
voici mon projet (professionnel) :
j'ai une étiqueteuse tombé en panne, j'ai changer toute la mécanique et installé un Arduino Méga avec le moteur PAP et un driver "R86 mini". ce moteur est piloter par 2 cellules avec relais.
1- première cellule détecte le produit
2- le moteur démarre et distribue l’étiquette
3- la deuxième cellule détecte le creux étiquette et arrête le moteur.
donc mon code fonctionne comme il faut , sauf pour la partie "Arrêt moteur".
celui-ci fait son tour complet avant qu'il s'arrête , peut importe si la deuxième cellule détecte le creux étiquette, du coup je ne parvient pas à réglé la longueur de mon étiquette.
Voici mon Code complet:
#include <Arduino.h>
#include <Nextion.h>
#include <Stepper.h>
#include <AccelStepper.h>
//Pin des cellules etiquete
const int ETIQON = 7;
const int ETIQOFF = 5;
//Gestion anti-rebond
bool etiqOnStatus = false;
bool etiqOnStatusOld = false;
unsigned long DebutTimer = 0;
unsigned long TimerDelais = 50;
//etat des cellules
int CelulleOn = LOW;
int CelulleOFF = LOW;
//variable utilisé pour le NEXTION
uint32_t numberRE = 0;
//definie les pin moteur et le setp pour le moteur
const int dirPin = 9; //DIR+
const int stepPin = 8; //PULL+
const int NombPas = 6400; //pas moteur - switch parametrer sur le driver sur 1600 STEPS ON/OFF/ON/ON (defaut=6400)
Stepper stepper(NombPas, 8, 9);
//declaration des elements nextion - exemple :( page ID = 0, element ID= 1, name = "b0")
//----SetupEtiquette----
NexText t5 = NexText(1, 8, "t5"); //Resultat valeur retard etiquette
NexSlider retet = NexSlider(1, 5, "retet"); //slider valeur
//registre des boutons
NexTouch *nex_listen_list[] = {
&retet, NULL
};
//RETET
//Slider retard etiq
void retetPopCallback (void *ptr) {
char temp[3] = {0};
retet.getValue(&numberRE);
utoa(numberRE, temp, 0);
}
void setup(void) {
Serial.begin(9600);
Serial2.begin(9600);
// Nexion
nexInit();
retet.attachPop(retetPopCallback, &retet); //slide retard etiquette
//retet.attachPop(retetPopCallback); //slide retard etiquette
//vitesse moteur
stepper.setSpeed(150); // vitesse du moteur en Dur
//stepper.setSpeed(variant du bouton dans nexion); // vitesse moteur regler via Nexion
// declaration des pins etiqueteuse
pinMode(ETIQON, INPUT_PULLUP); //entrer
pinMode(ETIQOFF, INPUT); //entrer
//Serial.println("Cellule initialisé");
// declaration des pins moteur
pinMode(dirPin, OUTPUT); // Sortie
pinMode(stepPin, OUTPUT); // Sortie
}
void loop() {
CelulleOn = digitalRead(ETIQON);
nexLoop (nex_listen_list);
DistribEtiq();
//Antirebond();
//Serial.println(&numberRE);
// Serial.println(retet.getValue (&numberRE));
}
void DistribEtiq () {
if (CelulleOn == HIGH) {
do {
delay (numberRE);
CelulleOFF = digitalRead(ETIQOFF); // lit l'etat de la cellule off
//Serial.println("Detection d'un flacon");
// Faites tourner le moteur pas à pas d'un tour:
for (int i = 1; i <= NombPas; i++) { // sens horaire
digitalWrite(dirPin, HIGH);
stepper.step(1); // (1) nombre de tour du moteur PAP
//CelulleOFF = digitalRead(ETIQOFF); // lit l'etat de la cellule off
}
}
while (CelulleOFF == LOW); //arret moteur quand cellule off detecte un creux d'etiquette .
}
}
void Antirebond(){
int reading = digitalRead(ETIQON);
if (reading != etiqOnStatusOld){
DebutTimer = millis();
}
if ((millis() - DebutTimer)>= TimerDelais) {
if (reading != etiqOnStatus){
etiqOnStatus = reading;
}
}
etiqOnStatusOld = reading;
}
Merci pour votre aide