[Programmation] Projet étiqueteuse de sacs
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 46

Projet étiqueteuse de sacs



  1. #1
    Rorodu12

    Projet étiqueteuse de sacs


    ------

    Bonjour, je poste juste cette discussion pour savoir si mon programme Arduino est correct et adapté a ce que je souhaite faire.

    Explication du projet*: (voir en pièce jointe)

    Le projet est une étiqueteuse de sac. Le système vient en butée contre le sac et «*lèche*» le sac tout en déroulant l'étiquette ce qui la colle.

    Le système c'est un axe linéaire motorise horizontal et un axe linéaire motorise vertical qui se trouve dessus permettant un déplacement horizontal et vertical.
    La tête d'étiqueteuse est fixé sur la plateforme verticale et permet de tirer les étiquettes tout en enroulant les étiquettes vides.

    Explication de mon programme*: il y a 3 possibilités. Soit on*:

    1- Appuie sur le bouton poussoir vert*:

    Lancement du cycle d'étiquetage.

    Etape 1*: Le système descend jusqu'à arriver en butée contre le sac à l'aide du moteur vertical et du capteur de courant.

    Etape 2*: Mise en route du moteur horizontal et du moteur deroulement pour la pose tant que le capteur gauche n'est pas atteind (distance correspondant à une étiquette).

    Etape 3: Remonté du système pendant 3 sec ou tant que le capteur haut n'est pas atteind.

    Etape 4*: Retour en position initiale.


    2- Appuie sur l'interrupteur*:

    Fonction permettant de dérouler le rouleau d'étiquette vide


    3- Appuie sur le bouton poussoir rouge*:

    Cycle permettant de remettre en position initiale le système, utilisé dans le cas où la pile de sacs est finie et donc que le système se retrouve bloqué en bas.


    Merci de votre aide.

    Voici mon programme Arduino:



    Code:
    int VMV=6; // vitesse moteur vertical
    int SMV=5; // sens moteur vertical
    
    int VMH=10; // vitesse moteur horizontal
    int SMH=9; // sens moteur horizontal
    
    int VME=11; // vitesse moteur etiquette 
    int SME=12; // sens moteur etiquette
    
    int DCY=0; // bouton poussoir cycle
    int BPC=2; // broche bouton poussoir cycle
    int DCY2=0; // bouton poussoir position initiale
    int BPPI=3; // broche bouton poussoir position initiale
    int DCY3=0; // bouton derouleur (interrupteur)
    int BD=; // broche bouton deroulement (interrupteur)
    
    int sensorPin=A0; // broche capteur de  courant
    int CI=0; // capteur de courant
    
    int CaptGauche=8; // broche capteur gauche 
    int EtatGauche=0; // capteur gauche 
    int CaptDroit=7; // broche capteur droit
    int EtatDroit=0; // capteur droit
    int CaptHaut=4; // broche capteur haut 
    int EtatHaut=0; // capteur haut
    
    
    void setup()
    {
    
    pinMode(SMV,OUTPUT);
    pinMode(SMH,OUTPUT);
    pinMode(SME,OUTPUT);
    
    pinMode(BPC,INPUT);
    pinMode(BPPI,INPUT);
    
    pinMode(CaptGauche,INPUT);
    pinMode(CaptDroit,INPUT);
    pinMode(CaptHaut,INPUT);
    
    }
    
    
    void loop()
    {
    DCY=digitalRead(BPC);// lire bouton poussoir cycle
    if(DCY==HIGH)
    {
     analogWrite(VMV,220);// moteur verticale qui descend
     digitalWrite(SMV,HIGH);
     delay(500);
     do
     {
      CI=analogRead(sensorPin); // tant que valeur du capteur <160
     }while(CI<160);
     
     do
     {
      analogWrite(VMH,220);// moteur horizontale etiquette
      digitalWrite(SMH,HIGH);
      analogWrite(VME,220);// moteur etiquette enroule
      digitalWrite(SME,HIGH);
      EtatGauche=digitalRead(CaptGauche);
     }while(EtatGauche != HIGH); // tant que capteur pas atteind
    
     do
     {
      analogWrite(VMV,220);// moteur verticale qui remonte
      digitalWrite(SMV,LOW);
      EtatHaut=digitalRead(CaptHaut);
     }while(delay<3000 or EtatHaut != HIGH ); // tant que temps ou capteur pas atteind 
    
     do
     {
      analogWrite(VMH,220);// moteur horizontale position initiale
      digitalWrite(SMH,LOW);
      EtatDroit=digitalRead(CaptDroit);
     }while(EtatDroit != HIGH); // tant que capteur pas atteind
    }
    
      else // si le bouton poussoir cycle n'est pas presse 
      {
      DCY2 = digitalRead(BPPI); 
      if(DCY2 == HIGH) // appuie sur bouton poussoir position initiale
      { 
         
        do
        {
          analogWrite(VMV,220);
          digitalWrite(SMV,LOW); // moteur verticale monte
          EtatHaut=digitalRead(CaptHaut);
        }while(EtatHaut != HIGH); // tant que capteur pas atteind 
      }
      else // si bouton poussoir cycle et position initiale pas presse
        {
        DCY3 = digitalRead(BD); // appuie sur bouton poussoir derouleur
        if (DCY3 == HIGH)
        {
          do{
          analogWrite(VME,220);
          digitalWrite(SME,LOW);
          DCY3 = digitalRead(BD);
          } while(DCY3 != LOW);
        }
        else // si aucun bouton poussoir n'est presse
         {
         analogWrite(VMV,0);
         digitalWrite(SMV,HIGH);
         analogWrite(VMH,0);
         digitalWrite(SMH,HIGH);
         analogWrite(VME,0);
         digitalWrite(SME,HIGH);
         }
        } 
      }
    }
    excusez moi si je n'ai pas réussi à indenter mon code

    -----
    Images attachées Images attachées  
    Dernière modification par gienas ; 26/04/2019 à 19h16. Motif: Corrigé les balises code

  2. #2
    Rorodu12

    Re : Projet etiqueteuse de sacs

    Ca n'intéresse personne ? ^^

    J'ai rajouté une photo de la tête d'étiqueteuse pour mieux voir.
    Images attachées Images attachées  

  3. #3
    invite03481543

    Re : Projet etiqueteuse de sacs

    Bonjour,
    Il n'y a pas vraiment de question dans votre sujet.
    L'avez-vous testé ce code?
    Si oui qu'est-ce que ça donne?
    Dans le principe cette façon d'écrire avec tout ces do...wile est indigeste et surtout bloquant, ce n'est pas ainsi qu'il faut écrire du code.
    Vous êtes en quelle classe?
    Dernière modification par HULK28 ; 30/04/2019 à 07h24.

  4. #4
    Seb.26

    Re : Projet etiqueteuse de sacs

    Pourquoi mettre les analogWrite() et les digitalWrite() à l'intérieur des while() ?!

    Le code est effectivement bien moche mais il devrait pouvoir fonctionner tout de même ... ça sent la traduction de Grafcet par quelqu'un qui débute en C, mais ça devrait marcher.
    Pour quelques chose de plus "beau", voir ceci par exemple : https://fr.wikipedia.org/wiki/Automa...:_un_portillon

    Dans ton programme il faut prévoir des timeout pour gérer les futures erreurs, dans l'état le système se bloque et reste bloqué "ad vitam æternam"... c'est le mal

    En principe il faudrait traiter TOUT ce qui peut aller de travers ...

    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  5. A voir en vidéo sur Futura
  6. #5
    Rorodu12

    Re : Projet etiqueteuse de sacs

    HULK28,

    Celui-ci même je l'ai pas testé. C'est pour ça qu'en attendant, je demande s'il n'y a de maladresses sur mon programme Arduino.
    J'ai pu essayé avec un seul moteur et la boucle capteur de courant, ça marchait.
    Mais je sais pas si le changement de moteur va fonctionner (le passage du moteur vertical à celui horizontal).

    Pour la boucle do/while .. Elle peut se remplacer par quoi ?

    En TSSI


    Merci

  7. #6
    Rorodu12

    Re : Projet etiqueteuse de sacs

    Seb.26

    Depuis le début, j'ai fais avec analogwrite et digitalwrite, comment j'appelle les moteurs dans ce cas là si je n'utilise pas analog et digital ?


    Je n'ai pas appris à gérer les timeout et pour gérer les erreurs. Je connaissais pas


    Je regarde votre lien.


    Merci de l'aide

  8. #7
    Seb.26

    Re : Projet etiqueteuse de sacs

    Citation Envoyé par Rorodu12 Voir le message
    Depuis le début, j'ai fais avec analogwrite et digitalwrite, comment j'appelle les moteurs dans ce cas là si je n'utilise pas analog et digital ?
    C'est ce qu'il faut faire, mais c'est inutil de me faire en boucle (dans le while)
    ça peut même être contre-productif car analogwrite va paramétrer les registres qui gèrent les PWM et écrire en boucle dans ces registres pourrait empêcher le bon fonctionnement du timer, et donc du PWM.

    PS: pour le n° de pin, en général on utilise plutôt des #define (en majuscule !) ou des const pour que ce soit plus clair et ça évite d'utiliser de la RAM pour rien.
    Dernière modification par Seb.26 ; 30/04/2019 à 09h21.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  9. #8
    Rorodu12

    Re : Projet etiqueteuse de sacs

    Seb.26,

    Ok je savais pas, je mettais analogwrite et digitalwrite dans la boucle car sinon je comprennais pas comment le moteur allait s'arrêter si je ne mettait pas les fonctions dans le while.

    D'accord j'utiliserai alors les define si ca à la même fonction et qu'en plus ça n'utilise pas de RAM

  10. #9
    Seb.26

    Re : Projet etiqueteuse de sacs

    D'ailleurs, si tu veux rendre ton code plus lisible, tu peux utiliser les #define pour cela :

    En début de programme :
    #define MOTEUR_ETIQ_ON() analogWrite(VMH,220)
    #define MOTEUR_ETIQ_OFF() analogWrite(VMH,0)
    #define CAPTEUR_BAS() analogRead(sensorPin)
    puis dans le programme :
    ...
    MOTEUR_ETIQ_ON();
    while( CAPTEUR_BAS() < 160 );
    MOTEUR_ETIQ_OFF();
    ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  11. #10
    Rorodu12

    Re : Projet etiqueteuse de sacs

    Mais au début du programme il faut quand même mettre la broche non ? et aussi le digitalwrite pour le sens

    Mais au pire pour la lisibilité c'est un détail, je veux surtout que ca fonctionne ^^


    Et du coup on doit dire de stopper le moteur après le tant que ? (comme vous l'avez fait ?)
    C'était pour ca que je rentrais analog et digital dans le boucle pour qu'ils s'arrêtent sans avoir à le faire juste après.


    Je comprends pas tout en programmation … ^^

  12. #11
    Seb.26

    Re : Projet etiqueteuse de sacs

    Citation Envoyé par Rorodu12 Voir le message
    Je comprends pas tout en programmation … ^^
    Je vois ça ... mais ça viendra ! ... c'est en se mouchant qu'on devient moucheron ...

    Citation Envoyé par Rorodu12 Voir le message
    Mais au début du programme il faut quand même mettre la broche non ? et aussi le digitalwrite pour le sens
    Oui, c'était juste un exemple de mise en forme, je ne sais pa sce que dois faire votre code, je n'ai ni cahier des charges, ni schéma, ni ...etc...

    Citation Envoyé par Rorodu12 Voir le message
    Mais au pire pour la lisibilité c'est un détail, je veux surtout que ca fonctionne ^^
    D'expérience : c'est une erreur, prendre un peu de temps pour avoir un code lisible et clair c'est énormément de temps gagné sur le débogage et les évolutions futures, mais ça aussi le temps et l’expérience vous en convaincront (ce n'est pas du tout péjoratif/agressif, ne le prenez pas mal )

    Citation Envoyé par Rorodu12 Voir le message
    Et du coup on doit dire de stopper le moteur après le tant que ? (comme vous l'avez fait ?)
    C'était pour ca que je rentrais analog et digital dans le boucle pour qu'ils s'arrêtent sans avoir à le faire juste après.
    Oui, car là vous lui dites de démarrer, mais jamais d’arrêter : digitalWrite() positionne une broche à 1 (ou à 0), mais arrêter de faire digitalWrite() à 1 ne veut pas dire que la broche repasse à 0, la broche restera dans l'état tant qu'on lui dit pas de se mettre dans un autre état.

    Donc il faut faire digitalWrite() pour passer à 1, puis digitalWrite() pour mettre 0 ... c'est pour ça que ça sert à rien de le faire en boucle.
    idem pour analogwrite()
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  13. #12
    Rorodu12

    Re : Projet etiqueteuse de sacs

    Ah ouai donc je comprends pourquoi il vaut mieux utiliser #define, comme ça on appelle juste ce qu'on a définit et ça évite de chaque fois écrire analog et digital.


    Ca donnerai :


    Dans le programme :

    Code:
    …
    MOTEUR_ETIQ_ON(); 
    
    do
     {
      CI=analogRead(sensorPin); 
     }while(CI<160);
    
    MOTEUR_ETIQ_OFF();
    …
    Mais je comprends pas juste ce qu'il faut mettre entre parenthèse ?

    Et au début du programme, pour définir la vitesse et le sens, ça marcherait comme ça : ???

    Code:
    #define VME = 11;
    #define SME = 12;
    #define MOTEUR_ETIQ_ON() analogWrite(VME, 200) digitalWrite(SME, HIGH);
    #define MOTEUR_ETIQ_OFF() analogWrite(VME,0) digitalWrite(SME, HIGH);
    Dernière modification par Rorodu12 ; 30/04/2019 à 11h13.

  14. #13
    Seb.26

    Re : Projet etiqueteuse de sacs

    Oui, mais je ne sais pas à quoi correspondent tes pin, donc dur de te dire si c'est bon ou pas ...

    Par contre, il faut garder en tête qu'un #define c'est juste un "raccourci", donc si tu écris :
    #define MOTEUR_ETIQ_ON() analogWrite(VME, 200) digitalWrite(SME, HIGH);
    il va manquer un ; entre les deux.

    il faut écrire :
    #define MOTEUR_ETIQ_ON() analogWrite(VME, 200); digitalWrite(SME, HIGH)
    Et l'utiliser comme ceci :
    MOTEUR_ETIQ_ON();
    de cette façon, le préprocesseur va remplacer MOTEUR_ETIQ_ON() par analogWrite(VME, 200); digitalWrite(SME, HIGH)

    et donc MOTEUR_ETIQ_ON(); devriendra analogWrite(VME, 200); digitalWrite(SME, HIGH);

    Tu peux aussi donner un paramètre dans ton define :

    #define MOTEUR_ETIQ_ON(VIT) analogWrite(VME, VIT); digitalWrite(SME, HIGH)
    MOTEUR_ETIQ_ON(200);
    Dernière modification par Seb.26 ; 30/04/2019 à 15h25.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  15. #14
    Seb.26

    Re : Projet etiqueteuse de sacs

    Code:
    do
     {
      CI=analogRead(sensorPin); 
     }while(CI<160);
    Tu peux écrire :

    Code:
    while( analogRead(sensorPin) < 160 );
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  16. #15
    Rorodu12

    Re : Projet etiqueteuse de sacs

    AH ben ca y est j'ai compris. Dans ce cas là, si ça marche c'est sur mieux!! Un bon raccourci

    Voilà c'est ce que je me demandais à quoi ça servait les parenthèses, c'est super ^^

  17. #16
    Rorodu12

    Re : Projet etiqueteuse de sacs

    ok je ne savais pas non plus pour la boucle do while
    Et j'ai fais pareil pour les autres boucles du coup

    Parfait pour raccourcir le code


    Ca donne ça :

    Et du coup j'utilise const au lieu de int pour les broches.


    Code:
    const VMV=6; // vitesse moteur vertical
    const SMV=5; // sens moteur vertical
    #define MOTEUR_VERT_ON_1(VIT)analogWrite(VMV, VIT);digitalWrite(SMV, HIGH);
    #define MOTEUR_VERT_ON_2(VIT)analogWrite(VMV, VIT);digitalWrite(SMV, LOW);
    #define MOTEUR_VERT_OFF()analogWrite(VMV, VIT);digitalWrite(SMV, HIGH);
    
    const VMH=10; // vitesse moteur horizontal
    const SMH=9; // sens moteur horizontal
    #define MOTEUR_HORI_ON_1(VIT)analogWrite(VMH, VIT);digitalWrite(SMH, HIGH);
    #define MOTEUR_HORI_ON_2(VIT)analogWrite(VMH, VIT);digitalWrite(SMH, LOW);
    #define MOTEUR_HORI_OFF()analogWrite(VMH, VIT);digitalWrite(SMH, HIGH);
    
    const VME=11; // vitesse moteur etiquette 
    const SME=12; // sens moteur etiquette
    #define MOTEUR_ETIQ_ON_1(VIT)analogWrite(VME, VIT);digitalWrite(SME, HIGH);
    #define MOTEUR_ETIQ_ON_2(VIT)analogWrite(VME, VIT);digitalWrite(SME, LOW);
    #define MOTEUR_ETIQ_OFF(VIT)analogWrite(VME, 0);digitalWrite(SME, HIGH);
    
    
    const BPC=2; // broche bouton poussoir cycle
    const BPPI=3; // broche bouton poussoir position initiale
    const BD=; // broche bouton deroulement (interrupteur)
    
    const sensorPin=A0; // broche capteur de  courant
    
    const CaptGauche=8; // broche capteur gauche  
    const CaptDroit=7; // broche capteur droit
    const CaptHaut=4; // broche capteur haut 
    
    
    void setup()
    {
    
    pinMode(SMV,OUTPUT);
    pinMode(SMH,OUTPUT);
    pinMode(SME,OUTPUT);
    
    pinMode(BPC,INPUT);
    pinMode(BPPI,INPUT);
    
    pinMode(CaptGauche,INPUT);
    pinMode(CaptDroit,INPUT);
    pinMode(CaptHaut,INPUT);
    
    }
    
    
    void loop()
    {
      
    if(digitalRead(BPC)==HIGH)// lire bouton poussoir cycle
    {
     MOTEUR_VERT_ON_1(220); // moteur verticale descend
     delay(500);
     while(analogRead(sensorPin)<160);// tant que valeur du capteur <160
     MOTEUR_VERT_OFF();
    
    
     MOTEUR_HORI_ON_1(220); // moteur horizontal et étiquette 
     MOTEUR_ETIQ_ON_1(220);
     while( digitalRead(CaptGauche)!= HIGH); // tant que capteur pas atteind
    
    
     MOTEUR_VERT_ON_2(220); // moteur verticale qui remonte
     while(delay<3000 or digitalRead(CaptHaut) != HIGH ); // tant que temps ou capteur pas atteind 
    
    
     MOTEUR_HORI_ON_2(220);// moteur horizontale position initiale
     while(digitalRead(CaptDroit) != HIGH); // tant que capteur pas atteind
    }
    
      else // si le bouton poussoir cycle n'est pas presse 
      {
       
      if(digitalRead(BPPI) == HIGH) // appuie sur bouton poussoir position initiale
      { 
        
        MOTEUR_VERT_ON_2(220);
        while(digitalRead(CaptHaut) != HIGH); // tant que capteur pas atteind 
        
      }
      else // si bouton poussoir cycle et position initiale pas presse
        {
          
        if (digitalRead(BD) == HIGH)
        {
    
          MOTEUR_ETIQ_ON_2(220);
          while(digitalRead(BD) != LOW);
          
        }
        else // si aucun bouton poussoir n'est presse
         {
         MOTEUR_VERT_OFF();
         MOTEUR_HORI_OFF();
         MOTEUR_ETIQ_OFF();
         }
        } 
      }
    }

  18. #17
    Rorodu12

    Re : Projet etiqueteuse de sacs

    Merci en tout cas de votre aide et de votre patience seb.26

    J'espère avoir compris ce que vous m'aviez expliqué et que la forme des #define pour les raccourcis sont corrects.

    Code:
    int VMV=6; // vitesse moteur vertical
    int SMV=5; // sens moteur vertical
    #define MOTEUR_VERT_ON_1(VIT)analogWrite(VMV, VIT);digitalWrite(SMV, HIGH);
    #define MOTEUR_VERT_ON_2(VIT)analogWrite(VMV, VIT);digitalWrite(SMV, LOW);
    #define MOTEUR_VERT_OFF()analogWrite(VMV, 0);digitalWrite(SMV, HIGH);
    
    int VMH=10; // vitesse moteur horizontal
    int SMH=9; // sens moteur horizontal
    #define MOTEUR_HORI_ON_1(VIT)analogWrite(VMH, VIT);digitalWrite(SMH, HIGH);
    #define MOTEUR_HORI_ON_2(VIT)analogWrite(VMH, VIT);digitalWrite(SMH, LOW);
    #define MOTEUR_HORI_OFF()analogWrite(VMH, 0);digitalWrite(SMH, HIGH);
    
    int VME=11; // vitesse moteur etiquette 
    int SME=12; // sens moteur etiquette
    #define MOTEUR_ETIQ_ON_1(VIT)analogWrite(VME, VIT);digitalWrite(SME, HIGH);
    #define MOTEUR_ETIQ_ON_2(VIT)analogWrite(VME, VIT);digitalWrite(SME, LOW);
    #define MOTEUR_ETIQ_OFF()analogWrite(VME, 0);digitalWrite(SME, HIGH);
    
    
    int BPC=2; // broche bouton poussoir cycle
    int BPPI=3; // broche bouton poussoir position initiale
    int BD=1; // broche bouton deroulement (interrupteur)
    
    int sensorPin=A0; // broche capteur de  courant
    
    int CaptGauche=8; // broche capteur gauche  
    int CaptDroit=7; // broche capteur droit
    int CaptHaut=4; // broche capteur haut 
    
    
    void setup()
    {
    
    pinMode(SMV,OUTPUT);
    pinMode(SMH,OUTPUT);
    pinMode(SME,OUTPUT);
    
    pinMode(BPC,INPUT);
    pinMode(BPPI,INPUT);
    
    pinMode(CaptGauche,INPUT);
    pinMode(CaptDroit,INPUT);
    pinMode(CaptHaut,INPUT);
    
    }
    
    
    void loop()
    {
      
    if(digitalRead(BPC)==HIGH)// lire bouton poussoir cycle
    {
     MOTEUR_VERT_ON_1(220); // moteur verticale descend
     delay(500);
     while(analogRead(sensorPin)<160);// tant que valeur du capteur <160
     MOTEUR_VERT_OFF();
    
    
     MOTEUR_HORI_ON_1(220); // moteur horizontal et étiquette 
     MOTEUR_ETIQ_ON_1(220);
     while( digitalRead(CaptGauche)!= HIGH); // tant que capteur pas atteind
    
    
     MOTEUR_VERT_ON_2(220); // moteur verticale qui remonte
     while(delay<3000 or digitalRead(CaptHaut) != HIGH ); // tant que temps ou capteur pas atteind 
    
    
     MOTEUR_HORI_ON_2(220);// moteur horizontale position initiale
     while(digitalRead(CaptDroit) != HIGH); // tant que capteur pas atteind
    }
    
      else // si le bouton poussoir cycle n'est pas presse 
      {
       
      if(digitalRead(BPPI) == HIGH) // appuie sur bouton poussoir position initiale
      { 
        
        MOTEUR_VERT_ON_2(220);
        while(digitalRead(CaptHaut) != HIGH); // tant que capteur pas atteind 
        
      }
      else // si bouton poussoir cycle et position initiale pas presse
        {
          
        if (digitalRead(BD) == HIGH)
        {
    
          MOTEUR_ETIQ_ON_2(220);
          while(digitalRead(BD) != LOW);
          
        }
        else // si aucun bouton poussoir n'est presse
         {
         MOTEUR_VERT_OFF();
         MOTEUR_HORI_OFF();
         MOTEUR_ETIQ_OFF();
         }
        } 
      }
    }

  19. #18
    Seb.26

    Re : Projet etiqueteuse de sacs

    Code:
    #define MOTEUR_VERT_ON_1(VIT) analogWrite(VMV, VIT);digitalWrite(SMV, HIGH);
    puis :

    Code:
    ...
    MOTEUR_VERT_ON_1(VIT);
    ...
    cela donne :

    Code:
    ...
    analogWrite(VMV, VIT);digitalWrite(SMV, HIGH);;
    ...
    il y a donc 2 points virgules à la suite, il ne devrait y en avoir qu'un.

    le #define fonctionne vraiment comme un "rechercher-remplacer" dans un éditeur de texte

    NB: on peut aussi utiliser les #define pour les const :

    Code:
    #define PIN_SW_ON      13
    Dernière modification par Seb.26 ; 02/05/2019 à 09h04.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  20. #19
    Rorodu12

    Re : Projet etiqueteuse de sacs

    D'accord.

    Donc dans le code faut que je mette 2 points virgules :

    Code:
    …
    MOTEUR_VERT_ON_1(220);;
    …

    Si j'ai bien compris.

  21. #20
    Seb.26

    Re : Projet etiqueteuse de sacs

    Citation Envoyé par Rorodu12 Voir le message
    D'accord.

    Donc dans le code faut que je mette 2 points virgules :

    Code:
    …
    MOTEUR_VERT_ON_1(220);;
    …

    Si j'ai bien compris.
    heu ... non, au contraire : il ne faut pas en mettre à la fin du #define pour n'en avoir qu'un seul après le traitement des #define

    En C, on finit une instruction par un ; (un seul)
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  22. #21
    Rorodu12

    Re : Projet etiqueteuse de sacs

    A d'accord, je comprends mieux alors votre message précédent ^^

    Code:
    int VMV=6; // vitesse moteur vertical
    int SMV=5; // sens moteur vertical
    #define MOTEUR_VERT_ON_1(VIT)analogWrite(VMV, VIT);digitalWrite(SMV, HIGH)
    #define MOTEUR_VERT_ON_2(VIT)analogWrite(VMV, VIT);digitalWrite(SMV, LOW)
    #define MOTEUR_VERT_OFF()analogWrite(VMV, 0);digitalWrite(SMV, HIGH)
    
    int VMH=10; // vitesse moteur horizontal
    int SMH=9; // sens moteur horizontal
    #define MOTEUR_HORI_ON_1(VIT)analogWrite(VMH, VIT);digitalWrite(SMH, HIGH)
    #define MOTEUR_HORI_ON_2(VIT)analogWrite(VMH, VIT);digitalWrite(SMH, LOW)
    #define MOTEUR_HORI_OFF()analogWrite(VMH, 0);digitalWrite(SMH, HIGH)
    
    int VME=11; // vitesse moteur etiquette 
    int SME=12; // sens moteur etiquette
    #define MOTEUR_ETIQ_ON_1(VIT)analogWrite(VME, VIT);digitalWrite(SME, HIGH)
    #define MOTEUR_ETIQ_ON_2(VIT)analogWrite(VME, VIT);digitalWrite(SME, LOW)
    #define MOTEUR_ETIQ_OFF()analogWrite(VME, 0);digitalWrite(SME, HIGH)
    
    
    int BPC=2; // broche bouton poussoir cycle
    int BPPI=3; // broche bouton poussoir position initiale
    int BD=1; // broche bouton deroulement (interrupteur)
    
    int sensorPin=A0; // broche capteur de  courant
    
    int CaptGauche=8; // broche capteur gauche  
    int CaptDroit=7; // broche capteur droit
    int CaptHaut=4; // broche capteur haut 
    
    
    void setup()
    {
    
    pinMode(SMV,OUTPUT);
    pinMode(SMH,OUTPUT);
    pinMode(SME,OUTPUT);
    
    pinMode(BPC,INPUT);
    pinMode(BPPI,INPUT);
    
    pinMode(CaptGauche,INPUT);
    pinMode(CaptDroit,INPUT);
    pinMode(CaptHaut,INPUT);
    
    }
    
    
    void loop()
    {
      
    if(digitalRead(BPC)==HIGH)// lire bouton poussoir cycle
    {
     MOTEUR_VERT_ON_1(220); // moteur verticale descend
     delay(500);
     while(analogRead(sensorPin)<160);// tant que valeur du capteur <160
     MOTEUR_VERT_OFF();
    
    
     MOTEUR_HORI_ON_1(220); // moteur horizontal et étiquette 
     MOTEUR_ETIQ_ON_1(220);
     while( digitalRead(CaptGauche)!= HIGH); // tant que capteur pas atteind
    
    
     MOTEUR_VERT_ON_2(220); // moteur verticale qui remonte
     while(delay<3000 or digitalRead(CaptHaut) != HIGH ); // tant que temps ou capteur pas atteind 
    
    
     MOTEUR_HORI_ON_2(220);// moteur horizontale position initiale
     while(digitalRead(CaptDroit) != HIGH); // tant que capteur pas atteind
    }
    
      else // si le bouton poussoir cycle n'est pas presse 
      {
       
      if(digitalRead(BPPI) == HIGH) // appuie sur bouton poussoir position initiale
      { 
        
        MOTEUR_VERT_ON_2(220);
        while(digitalRead(CaptHaut) != HIGH); // tant que capteur pas atteind 
        
      }
      else // si bouton poussoir cycle et position initiale pas presse
        {
          
        if (digitalRead(BD) == HIGH)
        {
    
          MOTEUR_ETIQ_ON_2(220);
          while(digitalRead(BD) != LOW);
          
        }
        else // si aucun bouton poussoir n'est presse
         {
         MOTEUR_VERT_OFF();
         MOTEUR_HORI_OFF();
         MOTEUR_ETIQ_OFF();
         }
        } 
      }
    }

    Là je vais pouvoir le tester donc

  23. #22
    Seb.26

    Re : Projet etiqueteuse de sacs

    Je pense que ceci ne compilera pas : je crois deviner ce que tu veux faire, mais c'est pas comme ça qu'il faut le faire :
    while(delay<3000 or digitalRead(CaptHaut) != HIGH ); // tant que temps ou capteur pas atteind
    Je dirais que tu veux attendre digitalRead(CaptHaut) pendant 3s au maximum ?!

    Si oui, utilise l'instruction millis() ( https://www.arduino.cc/reference/en/...s/time/millis/ )

    uint32_t time_start = millis(); // on enregistre 'quand' on commence à attendre le capteur
    while( (millis() - time_start < 3000 ) || ( digitalRead(CaptHaut) != high ) ); // on attend le capteur ou que 3s se soient écoulé depuis le 'quand' on a commencé ...
    Dernière modification par Seb.26 ; 02/05/2019 à 11h25.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  24. #23
    Rorodu12

    Re : Projet etiqueteuse de sacs

    Oui, je veux que soit c'est le temps qui arrête le moteur en l'occurrence 3 sec soit c'est le capteur haut qui l'arrête (capteur qui se trouve en haut de l'axe(voir photo premier message))

    Code:
    uint32_t time_start = millis();
    while( (millis() - time_start < 3000 ) || ( digitalRead(CaptHaut) != high ) );
    Donc ça c'est dans le programme, il vaut mieux utiliser le "ou" booléen que le "or" ?


    A l'aide du lien ca veut dire qu'à l'initialisation c'est


    Code:
    uint32_t long time
    Et au setup

    Code:
    Serial.begin(9600);
    Et Serial.print on a n'a pas besoin du coup ?

  25. #24
    Seb.26

    Re : Projet etiqueteuse de sacs

    C'est juste un exemple, ce qui t'interesse, c'est le millis() ... mais il me semble urgent que tu fasses des cours de C !!! ... là tu vas patauger dans la purée de pois ... même si ton système tombe en marche ...
    Dernière modification par Seb.26 ; 02/05/2019 à 15h36.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  26. #25
    Rorodu12

    Re : Projet etiqueteuse de sacs

    D'accord ok, si je vois que ça marche pas je me pencherai plus sur le milis ! Mais moi il me faut surtout que ça fonctionne quitte à ce que se soit "pas très beau"

    En tout cas merci de m'avoir aidé, je retiens le milis()

    Malheureusement j'ai pas mis des vœux de programmation pour l'année prochaine … Existe t-il des cours de langage C autre que scolaire ?

  27. #26
    Seb.26

    Re : Projet etiqueteuse de sacs

    Citation Envoyé par Rorodu12 Voir le message
    Malheureusement j'ai pas mis des vœux de programmation pour l'année prochaine … Existe t-il des cours de langage C autre que scolaire ?
    https://openclassrooms.com/fr/course...rogrammer-en-c
    https://c.developpez.com/cours/20-heures/



    il y en a d'autres...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  28. #27
    Rorodu12

    Re : Projet etiqueteuse de sacs

    Ah cool merci. Si je pouvais avoir quelques bases en C ça serait bien

    Bon ben je vous tiens au courant de l'avancement du projet si ça vous intéresse ^^

  29. #28
    nornand

    Re : Projet etiqueteuse de sacs

    bjr:
    C'est toujours intéressant, et plaisant d'avoir des retours des participants.
    Surtout quand un membre vous a accordé du temps.

  30. #29
    Rorodu12

    Re : Projet etiqueteuse de sacs

    OK ben je ferai en sorte de ne pas oublier et je vous dirai

    Je sais pas si la discussion se supprime par contre

  31. #30
    Rorodu12

    Re : Projet etiqueteuse de sacs

    Oui et d'ailleurs j'ai un autre problème.
    Dans le programme que je vous ai envoyé j'utilise un capteur de contact mais en réalité j'aimerai utiliser un capteur de couleur.

    J'ai donc trouvé le programme adapté à mon capteur. Et ce programme permet de détecter la luminosité.
    Mais ma question c'est comment intégrer ce programme au programme précédent ? Et ainsi pouvoir stopper le moteur ?? Je pensais peut-être qu'il fallait appeler un sous-programme mais comment ça s'écrit ???

    programme capteur :

    Code:
    #include <Wire.h>
    #include "Adafruit_TCS34725.h"
    
    // Pick analog outputs, for the UNO these three work well
    // use ~560  ohm resistor between Red & Blue, ~1K for green (its brighter)
    #define redpin 3
    #define greenpin 5
    #define bluepin 6
    // for a common anode LED, connect the common pin to +5V
    // for common cathode, connect the common to ground
    
    // set to false if using a common cathode LED
    #define commonAnode true
    
    // our RGB -> eye-recognized gamma color
    byte gammatable[256];
    
    
    Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X);
    
    void setup() {
      Serial.begin(9600);
      Serial.println("Color View Test!");
    
      if (tcs.begin()) {
        Serial.println("Found sensor");
      } else {
        Serial.println("No TCS34725 found ... check your connections");
        while (1); // halt!
      }
      
      // use these three pins to drive an LED
      pinMode(redpin, OUTPUT);
      pinMode(greenpin, OUTPUT);
      pinMode(bluepin, OUTPUT);
      
      // thanks PhilB for this gamma table!
      // it helps convert RGB colors to what humans see
      for (int i=0; i<256; i++) {
        float x = i;
        x /= 255;
        x = pow(x, 2.5);
        x *= 255;
          
        if (commonAnode) {
          gammatable[i] = 255 - x;
        } else {
          gammatable[i] = x;      
        }
        //Serial.println(gammatable[i]);
      }
    }
    
    
    void loop() {
      uint16_t clear, red, green, blue;
    
      tcs.setInterrupt(false);      // turn on LED
    
      delay(70);  // takes 50ms to read 
      
      tcs.getRawData(&red, &green, &blue, &clear);
    
      tcs.setInterrupt(true);  // turn off LED
      
      
     Serial.print(clear);
     
    
     
     // Figure out some basic hex code for visualization
     uint32_t sum = clear;
      float r, g, b;
      r = red; r /= sum;
      g = green; g /= sum;
      b = blue; b /= sum;
      r *= 256; g *= 256; b *= 256;
      
      Serial.println();
    
      //Serial.print((int)r ); Serial.print(" "); Serial.print((int)g);Serial.print(" ");  Serial.println((int)b );
    
      analogWrite(redpin, gammatable[(int)r]);
      analogWrite(greenpin, gammatable[(int)g]);
      analogWrite(bluepin, gammatable[(int)b]);
    }

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. L'interdiction des sacs plastiques étendue aux sacs compostable
    Par ecolami dans le forum Environnement, développement durable et écologie
    Réponses: 0
    Dernier message: 17/07/2015, 18h00
  2. Projet 3BSI - Étiqueteuse
    Par invite1ff756cf dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 05/02/2013, 14h21
  3. [Divers] Aspirateur Karcher A2554: sacs pas sacs ?
    Par invitec34dc97b dans le forum Dépannage
    Réponses: 1
    Dernier message: 05/09/2010, 12h38
  4. etiqueteuse
    Par akwell dans le forum Électronique
    Réponses: 3
    Dernier message: 20/01/2004, 17h08
Découvrez nos comparatifs produits sur l'informatique et les technologies.