Ecran Nextion Info

J-M-L : OK , le Code du coup change si je passe mais paramètre en global. Ce que je devrais faire puisque je vais les utiliser pour changer la vitesse du moteur, ou la vitesse de l'étiquette, ou le retard de l’étiquette . mais je ne connait pas le code pour faire cela.

vous mettez

#include "NexButton.h"
#include "NexText.h"
#include "NexSlider.h"
#include <Nextion.h>
#include <Arduino.h>
#include <Stepper.h>
#include <AccelStepper.h>
#include <SoftwareSerial.h>

//Pin des cellules etiquete
const int ETIQON = 7;
const int ETIQOFF = 5;

// déclaration variables globales
uint32_t numberRE; 
...

tout en haut du code, en dehors des fonctions, par exemple après avoir importé les bibliothèques

et quand vous voulez l’utiliser vous faites juste h0.getValue (&numberRE);

Donc j’ai essayé comme vous m’avais marqué dans votre dernier post .

voici le code :

#include "NexButton.h"
#include "NexText.h"
#include "NexSlider.h"
#include <Nextion.h>
#include <Arduino.h>
#include <Stepper.h>
#include <AccelStepper.h>
#include <SoftwareSerial.h>

//Pin des cellules etiquete
const int ETIQON = 7;
const int ETIQOFF = 5;

//etat des cellules
int CelulleOn= LOW;
int CelulleOFF = LOW;

//pin etiqueteuse ON/OFF
#define Etiq 12

//patie Nextion
#define nexSerial Serial
uint32_t numberRE;

//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
Stepper stepper(NombPas,8,9);

//gestion du temps
unsigned long TimerEtiq = millis();

//declaration des elements nextion - exemple :( page ID = 0, element ID= 1, name = "b0")

//----PAGE 1----
NexButton onet = NexButton(1, 2, "onet"); //on
NexButton offet = NexButton(1, 3, "offet"); //off

NexText t5 = NexText(1,8, "t5"); //valeur retard etiquette
NexSlider retet = NexSlider(1,5, "retet"); //slider valeur

NexText t6 = NexText(1,9, "t6"); //valeur retard stop
NexSlider retoffet = NexSlider(1,7, "retoffet"); //slider valeur

NexText t3 = NexText(1,11, "t3"); //valeur vitesse etiquete
NexSlider vitet = NexSlider(1,12, "vitet"); //slider valeur

//----PAGE 2----
NexButton ontapis = NexButton(2, 2, "ontapis"); //on
NexButton offtapis = NexButton(2, 3, "offtapis"); //off

NexText t11 = NexText(2,6, "t11"); //valeur
NexSlider vittapis = NexSlider(2,5, "vittapis"); //slider valeur

//registre des boutons
NexTouch *nex_listen_list[]={
  &onet,
  &offet,
  &retet,
  &retoffet,
  &vitet,
  &ontapis,
  &offtapis,
  &vittapis,
  NULL  
};

//MARCHE ARRET ETIQUETEUSE
//B0
//changement etat du bouton ON etiqueteuse
void onetPushCallback (void *ptr){
  onet.setText("-ON-");
  //digitalWrite(Etiq, HIGH);
}
//B1
//changement etat du bouton OFF etiqueteuse
void offetPushCallback (void *ptr){
  offet.setText("-OFF-");
  //digitalWrite(Etiq, LOW);
}

//H0
//changement du texte du slider retard etiq
void retetPopCallback (void *ptr) {
  uint32_t numberRE = 0;
  char temp[5] = {0};
  retet.getValue (&numberRE);
  //utoa(numberRE, temp, 0);
  //analogWrite(2, numberRE); 
}

////H1
////changement du texte du slider stop etiq
//void h1PopCallback (void *ptr) {
//  uint32_t numberSTE = 0;
//  char temp[1] = {0};
//  h1.getValue (&numberSTE);
//  utoa(numberSTE, temp, 0);
//  //analogWrite(2, numberSTE); 
//}

void setup(void) {
 
  Serial.begin(9600);

  // Nexion
  nexInit();

  //etiqueteuse info - Nextion  
onet.attachPush(onetPushCallback, &onet); //bouton On Nexion
offet.attachPush(offetPushCallback, &offet); //bouton Off Nexion
retet.attachPop(retetPopCallback, &retet); //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);  //entrer
  pinMode(ETIQOFF, INPUT); //entrer
  
  // declaration des pins moteur
  pinMode(dirPin, OUTPUT); // Sortie
  pinMode(stepPin, OUTPUT); // Sortie  
}

void loop() {
 
  CelulleOn = digitalRead(ETIQON); 

 if (CelulleOn == HIGH){
  do{     
    Serial.println("Detection d'un flacon");
    // Faites tourner le moteur pas à pas d'un tour:
    Serial.println(retet.getValue (&numberRE));
    for (int i=1; i<=NombPas; i++){ // sens horaire
      delay(&numberRE);
      digitalWrite(dirPin, HIGH);
      stepper.step(1);  // (1) nombre de tour du moteur PAP
      CelulleOFF = digitalRead(ETIQOFF); // lit l'etat de la cellule off
      nexLoop (nex_listen_list);
    }
  }
  while (CelulleOFF == LOW); //arret moteur quand cellule off detecte un creux d'etiquette .
 }      
//Serial.println("---ATTENTE---");
//Serial.println(&numberRE);
//Serial.println(retet.getValue (&numberRE));
}

voici ce que j’ai dans la console :

recvRetCommandFinished ok
recvRetCommandFinished ok  // initialisation de l'ecran
Detection d'un flacon // quand je passe ma main devant la cellule
recvRetNumber :100 //la valeur de mon Slider
1  // ??
Detection d'un flacon // quand je passe ma main devant la cellule
recvRetNumber :0 //la valeur de mon Slider
1 //?

quand mon moteur tourne , il n’y a pas de retard , celui qui devrait être prit en compte avec “&numberRE”. aucune différence entre 100 et 0

vous l’avez bien maintenant en variable globale mais vous l’avez aussi re-déclaré en variable locale dans la fonction

void retetPopCallback (void *ptr) {
  uint32_t numberRE = 0; // <=== REDECLARATION

donc dans la fonction il prend peut-être la bonne valeur, mais dès qu’on sort de la fonction c’est à nouveau la variable globale qui est disponible et elle n’a pas été modifiée…

==> virez le de la fonction.

lisez des trucs sur la portée des variables (scope)

Bonjour , désoler de ne pas avoir donné de nouvelle depuis , j’étais en chomage partiel/vacance. je suit revenue au boulot.
JML je vais regardé et essayé , merci

PS : au passage : Bonne année :slight_smile:

Bonne année !

Bonjour , je revient sur mon post , je suit revenue au boulot j’étais en chômage partielle.

donc je suit arrivé a récupérer ma valeur pour le Slider.

voici mon code final:

#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;
}

du coup j’ai put avancé sur mon projet et je tombe sur un nouveau problème.

j’ai une cellule de “départ étiquette” et une cellule qui “détecte le creux de l’étiquette” qui arrête normalement le moteur , et ces la mon problème.
le moteur PAP fais son tour complet et s’arrête peut importe la longueur de l’étiquette, donc je ne peut pas géré la longueur de l’étiquette .
j’ai lue que la méthode “Stepper” et une méthode bloquante, mais je ne parvient pas à trouvé comment faire autrement .
Merci

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.