Aller au contenu


Photo
- - - - -

aide programation CNC


  • Veuillez vous connecter pour répondre
124 réponses à ce sujet

#81 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 11 octobre 2016 - 01:18

apres un peu de lecture je vient de voir qu'il y a un pull-up interne a l'arduino, je vient de faire un essais sur un de mes poussoirs et ca marche nikel. ca peut etre la solution?



#82 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 963 messages
  • Gender:Male
  • Location:Anglet

Posté 11 octobre 2016 - 02:04

j'ai oublier de préciser cela en effet ! 

Faudra pas que j'oublis de le préciser  dans l'ouvrage ;) 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#83 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 11 octobre 2016 - 02:09

ok merci



#84 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 11 octobre 2016 - 05:06

bonjour a tous, vous trouverez ci joint mon nouveau code, les mode auto et manuel fonctionnes parfaitement bien, concernant le mode reglage, c'est la que j'ai quelques probleme, quand j'appuis sur B ca passe bien dans le mode "saisir longueur" je tape une longueur et valide avec A et le moteur se met bien a tourner, apres on verra si le calcul de convertion PAS en mm est bon un fois que ce sera installer sur le rail(que je doit encore faire lol). voici mes problemes et je ne trouve pas de solution, pouvez vous m'auguiller?
 
-j'ai limiter la saisie a 4 chiffre comme tu me l'a conseiller levend mais le probleme et que maintenant si je tappe une mesure a 4 chiffre je n'ai plus a valider, des que je met le dernier chiffre le moteur part ce qui m'ennui. dois je remettre un 5eme chiffre pour pallier au probleme ou y a t'il une autre solution?
 
- les fin de course ne fonctionnent pas
 
- je n'arrive toujours pas a mettre les codes qui me disent que la saisie n'est pas dans la plage d'action de la machine:
 
{
  if (valeur < 300);
  else (lcd.clear());
  lcd.setCursor(0,5);
  lcd.print ("ERREUR");
  lcd.setCursor(1,2);
  lcd.print ("long mini 300");
}

{
  if (valeur > 6000);
   else (lcd.clear());
  lcd.setCursor(0,5);
  lcd.print ("ERREUR");
  lcd.setCursor(1,2);
  lcd.print ("long max 6000");
  }

- je ne sais pas comment programer les touches delete et annuler

- je n'ai pas trop compris pour l'initialisation de la machine, comment le programer?

 

enfin si j'ai bien compris pour la modification des delay il faudra les changer en variable c'est sa? et la variable sera modifiable une fois dans le mode reglage/delay c'est bien sa. on verra ca pour la fin, j'ai la tete qui va exploser mdr. entous cas merci encore pour votre aide.


#include <LiquidCrystal.h> // Inclusion de la librairie pour afficheur LCD 

#include <Keypad.h> // inclusion de la librairie pour clavier matriciel 

#include <Stepper.h> // librairie pour moteurs pas à pas

#include <EEPROM.h>
int i=0;
int position_actuelle=0;
int Deplacement;
int NbPas; 
const float PAS = 0.157;


// --- Déclaration des constantes ---

//--- Constantes utilisées avec le clavier 4x4

const byte LIGNES = 4; // 4 lignes
const byte COLONNES = 4; //4 colonnes

const int NombrePas=200; // Nombre de pas du moteur 

// --- constantes des broches ---

const int C4=44; //declaration constante de broche 
const int C3=42; //declaration constante de broche 
const int C2=40; //declaration constante de broche 
const int C1=32; //declaration constante de broche 

const int RS=43; //declaration constante de broche 
const int E=51; //declaration constante de broche 

const int D4=45; //declaration constante de broche 
const int D5=47; //declaration constante de broche 
const int D6=49; //declaration constante de broche 
const int D7=53; //declaration constante de broche 

 

const int L4=52; //declaration constante de broche 
const int L3=50; //declaration constante de broche 
const int L2=48; //declaration constante de broche 
const int L1=46; //declaration constante de broche 

// --- Déclaration des variables globales ---

//--- Définition des touches 

char touches[LIGNES][COLONNES] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

// tableaux de lignes et colonnes
byte BrochesLignes[LIGNES] = {L1, L2, L3, L4}; //connexions utilisées pour les broches de lignes du clavier
byte BrochesColonnes[COLONNES] = {C1, C2, C3, C4}; //connexions utilisées pour les broches de colonnes du clavier

char touche; // variable de stockage valeur touche appuyée

long valeur; 

// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---

LiquidCrystal lcd(RS, E, D4, D5, D6, D7);// Création d'un objet LiquidCrystal = initialisation LCD en mode 4 bits 


// création d'un objet keypad = initialisation clavier 
Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
// les broches de lignes sont automatiquement configurées en ENTREE avec pullup interne activé 
// les broches de colonnes sont automatiquement configurées en SORTIE

Stepper stepper(NombrePas, 12,13);  // crée un objet Stepper pour contrôler le moteur pas à pas
// Pas_1 et Pas_3 commandent la 1ère phase, Pas_2 et Pas_4 la 2ème phase 


#define PDR 14   // poussoir deplacement recul
#define PDA 15   // poussoir deplacement avance
#define PD 16    // poussoir desserrage
#define PS 17    // poussoir serrage 
#define PR2 18   // poussoir scie 2 recul
#define PAV2 19   // poussoir scie 2 avance
#define PM2 20   // poussoir scie 2 montée
#define PDE2 21   // poussoir scie 2 descente
#define PR1 23   // poussoir scie 1 recul
#define PAV1 25   // poussoir scie 1 avance
#define PM1 27   // poussoir scie 1 montée
#define PDE1 29   // poussoir scie 1 descente
#define BM 31    // bouton manuel
#define BA 33    // bouton auto
#define FDC1 39  // capteur fin de course 1
#define FDC2 41  // capteur fin de course 2
#define P 37     // pedale
#define VD1 2    // verin scie 1 dessente 
#define VM1 3    // verin scie 1 montée
#define VA1 4    // verin scie 1 avance
#define VR1 5    // verin scie 1 recul
#define VD2 6    // verin scie 2 descente
#define VM2 7    // verin scie 2 montée
#define VA2 8    // verin scie 2 avance
#define VR2 9    // verin scie 2 recul
#define VS 10    // verin serrage
#define VD 11    // verin desserage








void setup (){ 
  pinMode(PDR,INPUT_PULLUP); // poussoir deplacement recul
  pinMode(PDA,INPUT_PULLUP); // poussoir deplacement avance
  pinMode(PD,INPUT_PULLUP); // poussoir desserrage
  pinMode(PS,INPUT_PULLUP); // poussoir serrage 
  pinMode(PR2,INPUT_PULLUP); // poussoir scie 2 recul
  pinMode(PAV2,INPUT_PULLUP); // poussoir scie 2 avance
  pinMode(PM2,INPUT_PULLUP); // poussoir scie 2 montée
  pinMode(PDE2,INPUT_PULLUP); // poussoir scie 2 descente
  pinMode(PR1,INPUT_PULLUP); // poussoir scie 1 recul
  pinMode(PAV1,INPUT_PULLUP); // poussoir scie 1 avance
  pinMode(PM1,INPUT_PULLUP); // poussoir scie 1 montée
  pinMode(PDE1,INPUT_PULLUP); // poussoir scie 1 descente
  pinMode(BM,INPUT_PULLUP); // bouton manuel
  pinMode(BA,INPUT_PULLUP); // bouton auto
  pinMode(FDC1,INPUT_PULLUP); // capteur fin de course 1
  pinMode(FDC2,INPUT_PULLUP); // capteur fin de course 2
  pinMode(P,INPUT_PULLUP); // pedale
  pinMode(VD1,OUTPUT); // verin scie 1 dessente 
  pinMode(VM1,OUTPUT); // verin scie 1 montée
  pinMode(VA1,OUTPUT); // verin scie 1 avance
  pinMode(VR1,OUTPUT); // verin scie 1 recul
  pinMode(VD2,OUTPUT); // verin scie 2 descente
  pinMode(VM2,OUTPUT); // verin scie 2 montée
  pinMode(VA2,OUTPUT); // verin scie 2 avance
  pinMode(VR2,OUTPUT); // verin scie 2 recul
  pinMode(VS,OUTPUT); // verin serrage
  pinMode(VD,OUTPUT); // verin desserage

  digitalWrite(P,HIGH);
  digitalWrite(FDC2,HIGH);
  digitalWrite(FDC1,HIGH);
  digitalWrite(PDE2, HIGH);       
  digitalWrite(PM2,HIGH);
  digitalWrite(PDR,HIGH);
  digitalWrite(PDA,HIGH);
  digitalWrite(PD,HIGH);
  digitalWrite(PS,HIGH);
  digitalWrite (PM1,HIGH);
  digitalWrite(PDE1,HIGH);
  digitalWrite(PAV2,HIGH);
  digitalWrite(PR2,HIGH);
  digitalWrite(PR1,HIGH);
  digitalWrite(PAV1,HIGH);
  digitalWrite(BM,HIGH);
  digitalWrite(BA,HIGH);

 digitalWrite (VD1,HIGH);
  digitalWrite (VM1,HIGH);
  digitalWrite (VA1,HIGH);
  digitalWrite (VR1,HIGH);
  digitalWrite (VD2,HIGH);
  digitalWrite (VM2,HIGH);
  digitalWrite (VA2,HIGH);
  digitalWrite (VR2,HIGH);
  digitalWrite (VS,HIGH);
  digitalWrite (VD,HIGH);

  lcd.begin(20,4); // Initialise le LCD avec 20 colonnes x 4 lignes 

delay(10); // pause rapide pour laisser temps initialisation

// Test du LCD

lcd.print("BIENVENUE") ; // affiche la chaîne texte - message de test
delay(5000); // pause de 2 secondes

lcd.clear(); // // efface écran et met le curseur en haut à gauche
delay(10); // pour laisser temps effacer écran

// initialise la vitesse de rotation du moteur pas à pas en tour par minute
stepper.setSpeed(800);  
 
}



void loop(){
  
//******************************* MODE MANUEL***************************************
   while (digitalRead(BM)==LOW && digitalRead(BA)==HIGH) //interrupteur rotatif position manuel
{
   {lcd.setCursor(0,0);
  lcd.print("mode manuel");}
  
    if (digitalRead(PDE2)==LOW)    // poussoir descente scie 2
 digitalWrite(VD2,LOW); // verin descente scie 2
 else 
 digitalWrite (VD2,HIGH);
  
   
   
 if (digitalRead(PDE1)==LOW)    // poussoir descente scie 1
 digitalWrite(VD1,LOW); // verin descente scie 1
 else 
 digitalWrite (VD1,HIGH);
  

      
 if (digitalRead(PM1)==LOW)    // poussoir montée scie 1
 digitalWrite(VM1,LOW); // verin montée scie 1
 else 
 digitalWrite (VM1,HIGH);
   

  
 if (digitalRead(PM2)==LOW)    // poussoir montée scie 2
 digitalWrite(VM2,LOW); // verin montée scie 2
 else 
 digitalWrite (VM2,HIGH);
   

     
 if (digitalRead(PR2)==LOW)    // poussoir recul scie 2
 digitalWrite(VR2,LOW); // verin recul scie 2
 else 
 digitalWrite (VR2,HIGH);
   

  
 if (digitalRead(PR1)==LOW)    // poussoir recul scie 1
 digitalWrite(VR1,LOW); // verin recul scie 1
 else 
 digitalWrite (VR1,HIGH);
   

  
 if (digitalRead(PAV1)==LOW)    // poussoir avance scie 1
 digitalWrite(VA1,LOW); // verin avance scie 1
 else 
 digitalWrite (VA1,HIGH);
   

     
 if (digitalRead(PAV2)==LOW)    // poussoir avance scie 2
 digitalWrite(VA2,LOW); // verin avance scie 2
 else 
 digitalWrite (VA2,HIGH);


  if (digitalRead(PD)==LOW)    // poussoir desserage
 {{digitalWrite(VD,LOW);digitalWrite(VS,HIGH);} // verin desserage
 delay(6000);
 digitalWrite(VD,HIGH);}



   if (digitalRead(PS)==LOW)    // poussoir serage
 {digitalWrite(VS,LOW);digitalWrite(VD,HIGH);} // verin serage
}



//*********************************** MODE AUTO**********************************

while (digitalRead(BA)==LOW && digitalRead(BM)==HIGH) // interrupteur rotatif sur position auto
 {
  {lcd.setCursor(0,0);
  lcd.print("mode auto");}

  
  if (digitalRead(P)==HIGH) //appuis sur interupteur poussoir pedale
    {
      {lcd.setCursor(0,1);
  lcd.print("decoupe en cour");}
  
     digitalWrite(VS,LOW); // serrage
     delay(3000);
     digitalWrite(VA1,LOW); // avance scie 1
     digitalWrite(VA2,LOW); // avance scie 2
     delay (3000);
     digitalWrite(VD1,LOW); // descente scie 1
     digitalWrite(VD2,LOW); // descente scie 2
     delay (6000);
     digitalWrite(VA1,HIGH); // arret avance scie 1
     digitalWrite(VA2,HIGH); // arret avance scie 2
     digitalWrite(VR1,LOW); // recul scie 1
     digitalWrite(VR2,LOW); // recul scie 2
     delay (6000);
     digitalWrite(VD1,HIGH); // arret descente scie 1
     digitalWrite(VD2,HIGH); // arret descente scie 2
     digitalWrite(VM1,LOW); // montée scie 1
     digitalWrite(VM2,LOW); // montée scie 2
     delay (3000);
     digitalWrite(VR1,HIGH); // arret recul scie 1
     digitalWrite(VR2,HIGH); // arret recul scie 2
     digitalWrite(VM1,HIGH); // arret montée scie 1
     digitalWrite(VM2,HIGH); // arret montée scie 2
     delay (1000);
     digitalWrite(VS,HIGH); // arret serrage
     digitalWrite(VD,LOW); // desserrage
     delay (5000);
     digitalWrite(VD,HIGH); // arret desserrage 
     delay (3000);

     {lcd.setCursor(0,1);
  lcd.print("recuperer piece");
  delay(5000);
  lcd.clear();}
    }
 }

 //****************************mode reglage*************************

 
while (digitalRead(BA)==HIGH && digitalRead(BM)==HIGH) // interrupteur rotatif sur position Réglage
 {
 
  
  touche = clavier.getKey();

  if(touche=='B') // Demande de changement de longueur
    {
     lcd.clear();
     lcd.print(valeur);lcd.setCursor(0,0);
     lcd.print("Saisir longueur:");
    lcd.setCursor (0,1);
     valeur = SAISIE_LONG();
     if (valeur != false);


 
{                             // positionnement de la scie mobile
 

         EEPROM.get(1,position_actuelle);                // lire position_actuelle dans l'EEPROM
         if (valeur>position_actuelle)                  // si valeur > position_actuelle
           {
            Deplacement = valeur - position_actuelle;    // deplacement = valeur - position_actuelle
            NbPas = Deplacement / PAS;                  // NbPas = deplacement / PAS
            i=0;                                        // PAS = 0.157
            do                                          // Tourner de NbPas dans le sens horaire
              {
               stepper.step(1);                     
               i++;
              }while( i<NbPas or FDC1 == HIGH);          //FDC1 = fin de course côté 6m
           }
           
           
         if (valeur>position_actuelle)                   // si valeur < position_actuelle
           {
            Deplacement = position_actuelle - valeur;    // deplacement =  position_actuelle – valeur
            NbPas = Deplacement / PAS;                   // NbPas = deplacement / PAS
            i=0;                                        // PAS = 0,157
            do                                          // Tourner de NbPas dans le sens antihoraire
              {
               stepper.step(-1);
               i++;
              }while( i<NbPas or FDC2 == HIGH);          //FDC1 = fin de course côté 30cm
           }
         EEPROM.put (1,valeur);                         // Ecrire valeur dans l'EEPROM
          }
    }
 }


lcd.clear(); // // efface écran et met le curseur en haut à gauche
delay(1000); // pour laisser temps effacer écran





} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************

//*************** Autres Fonctions du programme *************

unsigned int SAISIE_LONG (){ // fonction qui renvoie une valeur long signé (32bits)

//---- variables locales utilisées dans la fonction
long saisie_long[4]={0,0,0,0}; // crée un tableau de variables pour saisir valeur - long maxi = 4 chiffres 
char compt_touche; // variable de comptage du nombre de touches saisies
long nombre_saisi; // variable de calcul du nombre saisi
//float valeurf; // variable de caclul de la valeur convertie    
char touche_long; // variable locale pour valeur touche appuyée de 0 à 15

//---- initialisation des variables utilisées ----
compt_touche=0; // aucune touche saisie au démarrage
nombre_saisi=0; // initialise la variable


//-------- initialisation curseur --------
//// mode clignotant

//------ gestion appui touche sur clavier

 while (compt_touche<4) { // tant que pas appuis maxi = 4 touches pour long 

       touche_long= clavier.getKey(); // lecture de la touche appuyée

       if (touche_long!= NO_KEY){ // si une touche a été frappée -- gestion de la touche appuyée 

          lcd.print(touche_long); // debug

           if (compt_touche==0) { // au premier passage 
              if (touche_long=='*') { // si appui signe - 
                saisie_long[10]=-1; // mémorise -1 dans le 11ème caractère 
                continue; // poursuit while comme si pas de premier passage
              }
             else {
               if (saisie_long[10]==0)saisie_long[10]=1; // mémorise le signe + dans le 11ème caractère si pas déjà à -1
             }
           } // fin if compt_touche==0


           if (touche_long=='A') break; // sort du while si appui sur A
           

           

           //---- calcul valeur numérique touches 0 à 9  (3ères lignes x 3ères colonnes)
           //--- à partir lignes colonnes ---
           for (byte i=0;i<3;i++) {
             for (byte j=0; j<3;j++){
               if (touche_long==touches[i][j]) touche_long=(j+1)+(i*3);//calcul de la valeur numérique
             }
           }

           //---- à patir valeur ascii --- 

           // touche 0
           if (touche_long=='0') touche_long=0;

          

           saisie_long[compt_touche]=touche_long; //enregistre le caractère dans tableau code_saisi


           compt_touche=compt_touche+1; // on incrémente la variable compt qui mémorise le nombre de caractères saisis

           //delay () 
          


         } //---- fin gestion appui clavier

}// fin du While = fin de la lecture du clavier

//--------- calcul valeur saisie en fonction du nombre de chiffres saisis et x signe (saisie_long[10]) ---------
if (compt_touche==0)nombre_saisi=0;   // si aucun chiffre saisi
if (compt_touche==1)nombre_saisi=(saisie_long[0]);   // si 1 seul chiffre saisi
if (compt_touche==2)nombre_saisi=(saisie_long[0]*10)+(saisie_long[1]*1);   // si 2 chiffres saisi
if (compt_touche==3)nombre_saisi=(saisie_long[0]*100)+(saisie_long[1]*10)+(saisie_long[2]*1);   // si 3 chiffres saisi
if (compt_touche==4)nombre_saisi=(saisie_long[0]*1000)+(saisie_long[1]*100)+(saisie_long[2]*10)+(saisie_long[3]*1);   // si 4 chiffres saisi

//Serial.println(int(saisie_long[10])); // debug - affiche signe

nombre_saisi=nombre_saisi*long(saisie_long[10]); // prise en compte du signe 

//------ à réaliser en sortie de lecture du clavier ----

compt_touche=0; // réinitialise le nombre de touche saisies

//-------- initialisation curseur --------
//// désactive mode clignotant

//----- renvoi de la valeur saisie ----

return (nombre_saisi); // renvoie la valeur - sortie de la fonction 



}


// --- Fin programme ---

 
 
  
    
   

     
 


         




bonne soiree



#85 levend

levend

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 5 572 messages
  • Gender:Male
  • Location:Vendée

Posté 11 octobre 2016 - 10:23

1 -j'ai limiter la saisie a 4 chiffre comme tu me l'a conseiller levend mais le probleme et que maintenant si je tappe une mesure a 4 chiffre je n'ai plus a valider, des que je met le dernier chiffre le moteur part ce qui m'ennui. dois je remettre un 5eme chiffre pour pallier au probleme ou y a t'il une autre solution?
 
2 - les fin de course ne fonctionnent pas
 
3 - je n'arrive toujours pas a mettre les codes qui me disent que la saisie n'est pas dans la plage d'action de la machine:
 
{
  if (valeur < 300);
  else (lcd.clear());
  lcd.setCursor(0,5);
  lcd.print ("ERREUR");
  lcd.setCursor(1,2);
  lcd.print ("long mini 300");
}

{
  if (valeur > 6000);
   else (lcd.clear());
  lcd.setCursor(0,5);
  lcd.print ("ERREUR");
  lcd.setCursor(1,2);
  lcd.print ("long max 6000");
  }

4 - je ne sais pas comment programer les touches delete et annuler

- je n'ai pas trop compris pour l'initialisation de la machine, comment le programer?

 

5 - enfin si j'ai bien compris pour la modification des delay il faudra les changer en variable c'est sa? et la variable sera modifiable une fois dans le mode reglage/delay c'est bien sa. on verra ca pour la fin, j'ai la tete qui va exploser mdr. entous cas merci encore pour votre aide.

1 - En fait tu retourne ta valeur trop tôt à la fin de ta fonction de saisie. Au lieu de retourner directement ta valeur tu fait une boucle pour attendre la frappe de la touche 'Valider' ou la touche 'Annuler' et si c'est la touche 'Valider', tu retourne ta valeur et si c'est la touche 'Annuler', tu retourne 'False'.

Conseil boucle while puis un if ...

 

2 - Ils sont bien branchés ? NO ou NF ?

 

3 - J'avais fait un code un peu différent, j'ai une idée pour ce code, je vais regarder ça.

 

4 - Pour la touche 'Delete', il faut que je regarde de plus près ton code, pour la touche 'Annuler' je t'indique une utilisation à la réponse 1, mais il faudrait aussi que je regarde ton code de saisie pour pouvoir aussi l'utiliser avant la fin de la saisie.

 

5 -  oui, tout à fait, pour le moment on ne fait pas, mais remets le code pour la touche 'B' où je l'avais mis et met ça :

if(touche=='C') // Demande de changement de délais        
    {
lcd.setCursor(0,0);
     lcd.print("Non autorisée.:");
     delay (1000);
    }

Histoire que la touche ne soit pas totalement inutile :D .


Imprimante 3D : Prusa i3 (MK1) + CR-10S + CR-10 S5 + Artillery Sidewinder X2 + CR-30 + Elegoo Mars + Anycubic Wash & cure 2 + Phrozen Sonic Mega 8K + Phrozen Cure Mega

#86 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 11 octobre 2016 - 10:57

Ok, merci j'essaierai ca demain, concernant les din de course, j'ai essayer des 2 manières (no et NF) fin de course a 3 connections. Bonne soiree

#87 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 12 octobre 2016 - 10:08

bonjour, je vient de penser, ce n'est pas la peine de mettre un mode qui me permettre de changer les delais car le reglage de la vitesse des verins se fait mecaniquement (petit robinets) donc meme si je modifie les delais la vitesse des verins ne changera pas a moins de modifier les reglages mecaniques, de toute facon je ne compte pas les faire aller trop vite. bonne journee   

 

edit: apres ce que je pourais faire evantuellement c'est avoir 2 mode par example:

-un mode bois de grosse section qui utiliserai les 2 verins de chaque scies(monte/descente et avance recule)

-un mode petite section qui n'utiliserai qu'un seul verin par scie (montee/descente)

apres a voir encore comment coder ca 

 

nouveau probleme, mais ca je pense que ca vient des relais peut etre avez vous une idee, hier lors de mes test tous fonctionnais bien, aujourd'hui je fait des nouveau test mais cette fois ci avec le transfo 24v allumé(distributeurs) et c,'est bizare comme ci le 24v remontais a l'arduino:

-en mode auto, je lance le cycle qui se passe bien mais des que le dernier relais s'étain, l'arduino redemarre 

- en mode manuel j'arrive a faire fonctionner les relais mais des que je relache le premier bouton (donc j'etain le relais) l'ecran me met une ligne noire et par fois redemare l'arduino



#88 levend

levend

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 5 572 messages
  • Gender:Male
  • Location:Vendée

Posté 12 octobre 2016 - 11:18

Je te propose juste de mettre le code pour la touche 'B' que je t'ai donné hier soir, il sera alors facile de modifier le code par la suite pour en faire ce que l'on veux : chgnt délais ou mode petite/grosse section, le reste sera assez simple à coder.

Je regarderai ce soir pour le code de ta plage de saisie, j'ai peut-être une solution.


Imprimante 3D : Prusa i3 (MK1) + CR-10S + CR-10 S5 + Artillery Sidewinder X2 + CR-30 + Elegoo Mars + Anycubic Wash & cure 2 + Phrozen Sonic Mega 8K + Phrozen Cure Mega

#89 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 12 octobre 2016 - 11:23

ok merci, si tu peut regarder je vient de faire un petit edit

 

je vient de modifier ton code pour les fin de course et ca fonctionne qu'en pense tu?

  EEPROM.get(1,position_actuelle);                // lire position_actuelle dans l'EEPROM
         if (valeur>position_actuelle)                  // si valeur > position_actuelle
           {
            Deplacement = valeur - position_actuelle;    // deplacement = valeur - position_actuelle
            NbPas = Deplacement / PAS;                  // NbPas = deplacement / PAS
            i=0;                                        // PAS = 0.157
            do                                          // Tourner de NbPas dans le sens horaire
              {if(digitalRead(FDC1)== HIGH)
               stepper.step(1);                     
               i++;
              }while( i<NbPas);          //FDC1 = fin de course côté 6m
           }
           
           
         if (valeur>position_actuelle)                   // si valeur < position_actuelle
           {
            Deplacement = position_actuelle - valeur;    // deplacement =  position_actuelle – valeur
            NbPas = Deplacement / PAS;                   // NbPas = deplacement / PAS
            i=0;                                        // PAS = 0,157
            do                                          // Tourner de NbPas dans le sens antihoraire
              {if(digitalRead(FDC2) == HIGH)
               stepper.step(-1);
               i++;
              }while( i<NbPas );          //FDC1 = fin de course côté 30cm
           }
         EEPROM.put (1,valeur);                         // Ecrire valeur dans l'EEPROM
          }


#90 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 12 octobre 2016 - 03:41

et pour le calibrage de longueur je pensais a ca, j'ai essayer et ca a l'air de fonctionner.

  if(touche=='*') // Demande de changement de délais
    {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("calibrage");
    lcd.setCursor(0,1);
    lcd.print("en cour");
{
 do                                          // Tourner de NbPas dans le sens antihoraire
              {
               stepper.step(-1);
               i++;
              }while(digitalRead(FDC1)== HIGH) ;    //retour a 0 du chariot
              delay(3000);
              stepper.step(+6370); // avance du chariot de 1m
              EEPROM.put (1,6370); //enregistrement position dans eeprom
              delay(3000);
               lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("calibrage");
    lcd.setCursor(0,1);
    lcd.print("termine");
    delay(3000);
                  
}
    }


#91 levend

levend

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 5 572 messages
  • Gender:Male
  • Location:Vendée

Posté 13 octobre 2016 - 11:44

Désolé, hier soir mon PC a voulu faire une mise à jour qui a duré environs 2h30 et je n'ai pu l'en empêcher :( .

 

Pour moi, ton code avec les fin de course n'est pas bon : si le fin de course est à l'état 'HIGH' tu fait tourner le moteur, mais tu compte le nombre de pas que le moteur tourne ou non.

Quelle était le problème avec mon code ? n'était-ce pas du au fait que je voulais faire tourner le moteur si le fin de course était à l'état 'LOW' ?

 

Pour la touche ' * ', (sauf commentaire erroné en première ligne :D ), c'est une des deux idées que je voyais pour l'initialisation.

Toutefois, à mon avis tu fais une petite erreur, si je comprends bien, tu recule ta scie jusqu'à la position minimum, soit 300mm, très bien mais quand tu as rejoins le fin de course tu n'es pas à zéro mais à 300mm et donc quand tu te décale de 1m dans l'autre sens tu te trouve donc à 1,30m. A l'exception de cette petite erreur ton code me paraît bon, toutefois tu n'es peut-être pas obligé de te déplacer d'un mètre, tu peux le déplacer de seulement quelques centimètre pour dégager du fin de course.


Imprimante 3D : Prusa i3 (MK1) + CR-10S + CR-10 S5 + Artillery Sidewinder X2 + CR-30 + Elegoo Mars + Anycubic Wash & cure 2 + Phrozen Sonic Mega 8K + Phrozen Cure Mega

#92 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 14 octobre 2016 - 12:07

bonjour, merci de ta reponse, j te rassure mon pc m'a fait la meme chose il y a 2 ou 3 jours  :crazy:  :angry22:. concernant ton code je ne sais pas ce qui ne va pas j'ai tout essayer: changer "HIGH" par LOW" remplacer "or" par "&&" ... et ca ne veut rien savoir ce ne prend pas les fin de course. dit moi si je me trompe mais l'un ou l'autre code font la meme chose non? car de toute facon la longueur enregistrée n'est pas le deplacement du moteur mais la valeur tapé sur le clavier.

pour le touche * je vient de modifier la premiere ligne (encore grillé pour le copier coller mdr) qu'en pense tu?

if(touche=='*'){ // etalonnage longueur

    {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("etalonnage");
    lcd.setCursor(0,1);
    lcd.print("en cour");
{
 do                                          // Tourner de NbPas dans le sens antihoraire
              {
                longueur_etalonnage=(4698*PAS)+ decalage_depart;
               stepper.step(-1);
               i++;
              }while(digitalRead(FDC1)== HIGH) ;    //retour a 30 du chariot
              delay(3000);
              stepper.step(+4698); // avance du chariot de 70cmm
              EEPROM.put (1,(longueur_etalonnage)); //enregistrement position dans eeprom
              delay(3000);
               lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("etalonnage");
    lcd.setCursor(0,1);
    lcd.print("termine");
    delay(3000);
    lcd.clear();
                
}
    }   

bonne journée

 

edit: j'ai aussi modifier le code de deplacement afin de tenir compte des valeurs maxi et mini, ca fonctionne mais je n'arrive encore pas a le faire afficher sur l'ecran, et concernant les fin de course je n'arrive pas a trouver la solution sur ce code ca fonctionne mais si jamais j'attein un fin de course il faut reetaloner, et je n'arrive pas a faire marcher ton code. en attendant voici le nouveau code.

{                             // positionnement de la scie mobile
 

         EEPROM.get(1,position_actuelle);                // lire position_actuelle dans l'EEPROM
         if (valeur>position_actuelle && valeur<valeur_maxi)                  // si valeur > position_actuelle
           {
            Deplacement = valeur - position_actuelle;    // deplacement = valeur - position_actuelle
            NbPas = Deplacement / PAS;                  // NbPas = deplacement / PAS
            i=0;                                        // PAS = 0.149
            do                                          // Tourner de NbPas dans le sens horaire
              {if(digitalRead(FDC2)== HIGH)
               stepper.step(1);                     
               i++;
              }while(i<NbPas);          //FDC1 = fin de course côté 6m
           }
           
           
         if (valeur<position_actuelle && valeur>decalage_depart )                   // si valeur < position_actuelle
           {
            Deplacement = position_actuelle - valeur;    // deplacement =  position_actuelle – valeur
            NbPas = Deplacement / PAS;                   // NbPas = deplacement / PAS
            i=0;                                        // PAS = 0,149
            do                                          // Tourner de NbPas dans le sens antihoraire
              {if(digitalRead(FDC1)== HIGH)
               stepper.step(-1);
               i++;
              }while( i<NbPas);          //FDC1 = fin de course côté 30cm
           }
           if (valeur>decalage_depart && valeur<valeur_maxi)
         EEPROM.put (1,valeur);                         // Ecrire valeur dans l'EEPROM
          }
 


#93 levend

levend

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 5 572 messages
  • Gender:Male
  • Location:Vendée

Posté 14 octobre 2016 - 08:03

bonjour, merci de ta reponse, j te rassure mon pc m'a fait la meme chose il y a 2 ou 3 jours  :crazy:  :angry22:. concernant ton code je ne sais pas ce qui ne va pas j'ai tout essayer: changer "HIGH" par LOW" remplacer "or" par "&&" ... et ca ne veut rien savoir ce ne prend pas les fin de course. dit moi si je me trompe mais l'un ou l'autre code font la meme chose non? car de toute facon la longueur enregistrée n'est pas le deplacement du moteur mais la valeur tapé sur le clavier.

Je dirais "Non" et "Oui" mais c'est une erreur :

Les deux codes ne font pas exactement la même chose, dans mon code, je fais tourner le moteur uniquement si le fin de course n'est pas atteint et chaque pas est compté. Dans ton code tu fait bien tourner ton moteur seulement si le fin de course n'est pas atteint, mais s'il est atteint avant d'avoir atteint le nombre de pas demandé, tu continues i jusqu'à atteindre le nombre de pas demandé, par conséquent le nombre de pas compté ne sera pas le même que le nombre de pas réel et donc ta mesure ne sera pas bonne.

Toutefois tu ne devrais jamais atteindre les fin de course qui sont des sécurité et donc placés en dehors de la plage de mesure (genre un à 29 cm et l'autre à 6,01m), comme tu l'utilise pour l'initialisation, vérifie bien que 29cm ça ne risque rien.

Et la valeur enregistrée dans l'EEPROM doit correspondre à la position réelle et non à la valeur saisie, théoriquement ce doit être la même, sauf s'il atteint un fin de course. La suite sera donc problématique si tu a un décalage entre la position enregistrée et la position réelle. J'ai fait cette erreur dans le code :( .

 

Ton code prend les fin de course ?

 

Ton premier code pour la touche ' * ' me convenait mieux, il fallait juste ne pas oublier que la position en fin d'étalonnage était la position de départ (position du FDC) + le déplacement et il fallait enregistrer la position, pas le nombre de pas.

Avant le début de ta boucle 'Do - while' il faut initialiser i (i = 0; )

 

Le code de déplacement :

il y a toujours le problème que je cite au début de ce message.

Je suppose que tu a définit 'valeur_maxi' et 'decalage_depart'...

Tu ne fais rien si la valeur saisie n'est pas dans ta plage de mesure, tu devrais au minimum avertir que la valeur saisie n'est pas bonne.

Personnellement, j'aurais placer ces limites de mesures dans la fonction saisie, je réfléchie comment reprendre la saisie ou alors dans la même ligne que

if (valeur != false) // Attention : pas de ';' à la fin de cette ligne

Je mettrais  :

if (valeur != false and valeur >= 300 and valeur <= 6000)

mais si la valeur n'est pas bonne je ne sais pas encore comment faire.

 

Je vais réfléchir .

 

PS : je vois qu'en faisant un copier/coller tu as mis un ';' à un endroit où il ne fallait pas, j'avais fait une erreur avec une accolade quelque part, alors peut-être que c'est pour ça que mon code n'as pas fonctionné.


Imprimante 3D : Prusa i3 (MK1) + CR-10S + CR-10 S5 + Artillery Sidewinder X2 + CR-30 + Elegoo Mars + Anycubic Wash & cure 2 + Phrozen Sonic Mega 8K + Phrozen Cure Mega

#94 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 15 octobre 2016 - 07:32

Bonjour, merci de ta réponse, oui mon code prend bien en compte les fin de course, en fait les 2 codes fonctionne très bien ainsi que celui de * j'ai verifier ce que l'eeprom enregistrai en le faisant s'afficher sur le lcd pour verifier et c'est bon. Quand je fais se déplacer le moteur et que j'appuie sur un fin de course le moteur s'arrête immédiatement le seul bémol est que si un fin de couse est activé la valeur enregistre est celle qui a été tape sur le clavier, donc si jamais un fin de couse est active un re étalonnage doit être refait derriere ce n'est pas vraiement un problème car comme tu dis si un fin de course est active c'est qu'il y a un probleme de toute façon car il seront en dehors de la plage de mesure autorisée. Je regarderai pour le ";". Et donc oui j'ai créé les variables maxi et mini avant la boucle setup, pareil pour "i=0" comme le code est fait la plage de mesure fonctionne, le moteur ne va pas en dessous de 300 ni au dessus de 600 et ce n'est pas enregistrer dans l'eeprom si la valeur est incorrecte. Et oui j'aimerai l'avertir sur le lcd mais dès que je rajoute la ligne de code mon code ne fonctionne plus je doit regarder a ca. J'ai déjà passer 4h hier à trouver un probleme car mon moteur ne voulais pas se deplacer si la différence de valeur étais suppeeieur a 5000mm et en fait s'etais une variable de type int qui devais être long mais j'ai trouvé bonne journee

#95 levend

levend

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 5 572 messages
  • Gender:Male
  • Location:Vendée

Posté 17 octobre 2016 - 07:43

Tu en es où ?

 

Voilà, je regardais ce que j'ai et j'ai à peu très tout ce qu'il faut pour tester ton programme, ça me fera l'occasion de tester mon moteur pas à pas avec l'arduino, depuis le temps que je dois le faire. J'aurai juste à remplacer les électrovannes par des voyants pour la simulation.

Je n'ai qu'une carte avec 8 relais mais pour tester je m'arrangerai, le seul hic c'est l'inverseur 3 position que je n'ai pas, je trouverai bien une solution.

 

Cela me permettra de t'aider plus facilement parce que là, je te donne des ligne à suivre ou parfois un bout de code et ensuite j'attends que tu testes. Si je le pouvais (manque place pour une grande longueur) je ferais un peu la même chose pour moi : un scie + une butée réglable, ce qui ne sera pas très différent pour le code.

 

Edit : tu pourrais me remettre le code actuel en entier STP ?


Imprimante 3D : Prusa i3 (MK1) + CR-10S + CR-10 S5 + Artillery Sidewinder X2 + CR-30 + Elegoo Mars + Anycubic Wash & cure 2 + Phrozen Sonic Mega 8K + Phrozen Cure Mega

#96 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 17 octobre 2016 - 08:07

Bonsoir, je n'ai pas pu beaucoup travailler dessus ce week end ni aujourd'hui et à mon avis très peu cette semaine aussi, j'essai de remettre le code en entier demain. Merci pour ton aide. Bonne soirée.

#97 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 20 octobre 2016 - 06:00

bonsoir je suis desolé je n'ai vraiement pas beaucoup de temps ces jours ci, comme promis levend tu trouvera ci joins le dernier code complet. merci beaucoup pour ton aide. bonne soiree

#include <LiquidCrystal.h> // Inclusion de la librairie pour afficheur LCD 

#include <Keypad.h> // inclusion de la librairie pour clavier matriciel 

#include <Stepper.h> // librairie pour moteurs pas à pas

#include <EEPROM.h>
int decalage_depart=300;
int valeur_maxi=6000;

int longueur_etalonnage;
long i=0;
long position_actuelle=0;
long Deplacement;
long NbPas; 

const float PAS = 0.149;


// --- Déclaration des constantes ---

//--- Constantes utilisées avec le clavier 4x4

const byte LIGNES = 4; // 4 lignes
const byte COLONNES = 4; //4 colonnes

const int NombrePas=200; // Nombre de pas du moteur 

// --- constantes des broches ---

const int C4=44; //declaration constante de broche 
const int C3=42; //declaration constante de broche 
const int C2=40; //declaration constante de broche 
const int C1=32; //declaration constante de broche 

const int RS=43; //declaration constante de broche 
const int E=51; //declaration constante de broche 

const int D4=45; //declaration constante de broche 
const int D5=47; //declaration constante de broche 
const int D6=49; //declaration constante de broche 
const int D7=53; //declaration constante de broche 

 

const int L4=52; //declaration constante de broche 
const int L3=50; //declaration constante de broche 
const int L2=48; //declaration constante de broche 
const int L1=46; //declaration constante de broche 

// --- Déclaration des variables globales ---

//--- Définition des touches 

char touches[LIGNES][COLONNES] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

// tableaux de lignes et colonnes
byte BrochesLignes[LIGNES] = {L1, L2, L3, L4}; //connexions utilisées pour les broches de lignes du clavier
byte BrochesColonnes[COLONNES] = {C1, C2, C3, C4}; //connexions utilisées pour les broches de colonnes du clavier

char touche; // variable de stockage valeur touche appuyée

unsigned int valeur; 

// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---

LiquidCrystal lcd(RS, E, D4, D5, D6, D7);// Création d'un objet LiquidCrystal = initialisation LCD en mode 4 bits 


// création d'un objet keypad = initialisation clavier 
Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
// les broches de lignes sont automatiquement configurées en ENTREE avec pullup interne activé 
// les broches de colonnes sont automatiquement configurées en SORTIE

Stepper stepper(NombrePas, 12,13);  // crée un objet Stepper pour contrôler le moteur pas à pas
// Pas_1 et Pas_3 commandent la 1ère phase, Pas_2 et Pas_4 la 2ème phase 


#define PDR 14   // poussoir deplacement recul
#define PDA 15   // poussoir deplacement avance
#define PD 16    // poussoir desserrage
#define PS 17    // poussoir serrage 
#define PR2 18   // poussoir scie 2 recul
#define PAV2 19   // poussoir scie 2 avance
#define PM2 20   // poussoir scie 2 montée
#define PDE2 21   // poussoir scie 2 descente
#define PR1 23   // poussoir scie 1 recul
#define PAV1 25   // poussoir scie 1 avance
#define PM1 27   // poussoir scie 1 montée
#define PDE1 29   // poussoir scie 1 descente
#define BM 31    // bouton manuel
#define BA 33    // bouton auto
#define FDC1 39  // capteur fin de course 1
#define FDC2 41  // capteur fin de course 2
#define P 37     // pedale
#define VD1 2    // verin scie 1 dessente 
#define VM1 3    // verin scie 1 montée
#define VA1 4    // verin scie 1 avance
#define VR1 5    // verin scie 1 recul
#define VD2 6    // verin scie 2 descente
#define VM2 7    // verin scie 2 montée
#define VA2 8    // verin scie 2 avance
#define VR2 9    // verin scie 2 recul
#define VS 10    // verin serrage
#define VD 11    // verin desserage








void setup (){ 
  pinMode(PDR,INPUT_PULLUP); // poussoir deplacement recul
  pinMode(PDA,INPUT_PULLUP); // poussoir deplacement avance
  pinMode(PD,INPUT_PULLUP); // poussoir desserrage
  pinMode(PS,INPUT_PULLUP); // poussoir serrage 
  pinMode(PR2,INPUT_PULLUP); // poussoir scie 2 recul
  pinMode(PAV2,INPUT_PULLUP); // poussoir scie 2 avance
  pinMode(PM2,INPUT_PULLUP); // poussoir scie 2 montée
  pinMode(PDE2,INPUT_PULLUP); // poussoir scie 2 descente
  pinMode(PR1,INPUT_PULLUP); // poussoir scie 1 recul
  pinMode(PAV1,INPUT_PULLUP); // poussoir scie 1 avance
  pinMode(PM1,INPUT_PULLUP); // poussoir scie 1 montée
  pinMode(PDE1,INPUT_PULLUP); // poussoir scie 1 descente
  pinMode(BM,INPUT_PULLUP); // bouton manuel
  pinMode(BA,INPUT_PULLUP); // bouton auto
  pinMode(FDC1,INPUT_PULLUP); // capteur fin de course 1
  pinMode(FDC2,INPUT_PULLUP); // capteur fin de course 2
  pinMode(P,INPUT_PULLUP); // pedale
  pinMode(VD1,OUTPUT); // verin scie 1 dessente 
  pinMode(VM1,OUTPUT); // verin scie 1 montée
  pinMode(VA1,OUTPUT); // verin scie 1 avance
  pinMode(VR1,OUTPUT); // verin scie 1 recul
  pinMode(VD2,OUTPUT); // verin scie 2 descente
  pinMode(VM2,OUTPUT); // verin scie 2 montée
  pinMode(VA2,OUTPUT); // verin scie 2 avance
  pinMode(VR2,OUTPUT); // verin scie 2 recul
  pinMode(VS,OUTPUT); // verin serrage
  pinMode(VD,OUTPUT); // verin desserage

  digitalWrite(P,HIGH);
  digitalWrite(FDC2,HIGH);
  digitalWrite(FDC1,HIGH);
  digitalWrite(PDE2, HIGH);       
  digitalWrite(PM2,HIGH);
  digitalWrite(PDR,HIGH);
  digitalWrite(PDA,HIGH);
  digitalWrite(PD,HIGH);
  digitalWrite(PS,HIGH);
  digitalWrite (PM1,HIGH);
  digitalWrite(PDE1,HIGH);
  digitalWrite(PAV2,HIGH);
  digitalWrite(PR2,HIGH);
  digitalWrite(PR1,HIGH);
  digitalWrite(PAV1,HIGH);
  digitalWrite(BM,HIGH);
  digitalWrite(BA,HIGH);

 digitalWrite (VD1,HIGH);
  digitalWrite (VM1,HIGH);
  digitalWrite (VA1,HIGH);
  digitalWrite (VR1,HIGH);
  digitalWrite (VD2,HIGH);
  digitalWrite (VM2,HIGH);
  digitalWrite (VA2,HIGH);
  digitalWrite (VR2,HIGH);
  digitalWrite (VS,HIGH);
  digitalWrite (VD,HIGH);

  lcd.begin(20,4); // Initialise le LCD avec 20 colonnes x 4 lignes 

delay(10); // pause rapide pour laisser temps initialisation

// Test du LCD

lcd.print("BIENVENUE") ; // affiche la chaîne texte - message de test
delay(5000); // pause de 2 secondes

lcd.clear(); // // efface écran et met le curseur en haut à gauche
delay(10); // pour laisser temps effacer écran

// initialise la vitesse de rotation du moteur pas à pas en tour par minute
stepper.setSpeed(300);  
 
}



void loop(){
  
//******************************* MODE MANUEL***************************************
   while (digitalRead(BM)==LOW && digitalRead(BA)==HIGH) //interrupteur rotatif position manuel
{
  
  
    if (digitalRead(PDE2)==LOW)    // poussoir descente scie 2
 digitalWrite(VD2,LOW); // verin descente scie 2
 else 
 digitalWrite (VD2,HIGH);
  
   
   
 if (digitalRead(PDE1)==LOW)    // poussoir descente scie 1
 digitalWrite(VD1,LOW); // verin descente scie 1
 else 
 digitalWrite (VD1,HIGH);
  

      
 if (digitalRead(PM1)==LOW)    // poussoir montée scie 1
 digitalWrite(VM1,LOW); // verin montée scie 1
 else 
 digitalWrite (VM1,HIGH);
   

  
 if (digitalRead(PM2)==LOW)    // poussoir montée scie 2
 digitalWrite(VM2,LOW); // verin montée scie 2
 else 
 digitalWrite (VM2,HIGH);
   

     
 if (digitalRead(PR2)==LOW)    // poussoir recul scie 2
 digitalWrite(VR2,LOW); // verin recul scie 2
 else 
 digitalWrite (VR2,HIGH);
   

  
 if (digitalRead(PR1)==LOW)    // poussoir recul scie 1
 digitalWrite(VR1,LOW); // verin recul scie 1
 else 
 digitalWrite (VR1,HIGH);
   

  
 if (digitalRead(PAV1)==LOW)    // poussoir avance scie 1
 digitalWrite(VA1,LOW); // verin avance scie 1
 else 
 digitalWrite (VA1,HIGH);
   

     
 if (digitalRead(PAV2)==LOW)    // poussoir avance scie 2
 digitalWrite(VA2,LOW); // verin avance scie 2
 else 
 digitalWrite (VA2,HIGH);


  if (digitalRead(PD)==LOW)    // poussoir desserage
 {{digitalWrite(VD,LOW);digitalWrite(VS,HIGH);} // verin desserage
 delay(6000);
 digitalWrite(VD,HIGH);}



   if (digitalRead(PS)==LOW)    // poussoir serage
 {digitalWrite(VS,LOW);digitalWrite(VD,HIGH);} // verin serage


}
              
               





//*********************************** MODE AUTO**********************************

while (digitalRead(BA)==LOW && digitalRead(BM)==HIGH) // interrupteur rotatif sur position auto
 {
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("mode auto");
  delay(50);

  
  if (digitalRead(P)==HIGH) //appuis sur interupteur poussoir pedale
    {
      {lcd.setCursor(0,1);
  lcd.print("decoupe en cour");}
  
     digitalWrite(VS,LOW); // serrage
     delay(3000);
     digitalWrite(VA1,LOW); // avance scie 1
     digitalWrite(VA2,LOW); // avance scie 2
     delay (3000);
     digitalWrite(VD1,LOW); // descente scie 1
     digitalWrite(VD2,LOW); // descente scie 2
     delay (6000);
     digitalWrite(VA1,HIGH); // arret avance scie 1
     digitalWrite(VA2,HIGH); // arret avance scie 2
     digitalWrite(VR1,LOW); // recul scie 1
     digitalWrite(VR2,LOW); // recul scie 2
     delay (6000);
     digitalWrite(VD1,HIGH); // arret descente scie 1
     digitalWrite(VD2,HIGH); // arret descente scie 2
     digitalWrite(VM1,LOW); // montée scie 1
     digitalWrite(VM2,LOW); // montée scie 2
     delay (3000);
     digitalWrite(VR1,HIGH); // arret recul scie 1
     digitalWrite(VR2,HIGH); // arret recul scie 2
     digitalWrite(VM1,HIGH); // arret montée scie 1
     digitalWrite(VM2,HIGH); // arret montée scie 2
     delay (1000);
     digitalWrite(VS,HIGH); // arret serrage
     digitalWrite(VD,LOW); // desserrage
     delay (5000);
     digitalWrite(VD,HIGH); // arret desserrage 
     delay (3000);

     {lcd.setCursor(0,1);
  lcd.print("recuperer piece");
  delay(5000);
  lcd.clear();}
    }
 }

 //****************************mode reglage*************************

 
while (digitalRead(BA)==HIGH && digitalRead(BM)==HIGH) // interrupteur rotatif sur position Réglage
{
lcd.clear();
lcd.print("mode reglage");
delay(50);
touche = clavier.getKey();



  
  if(touche=='B') // Demande de changement de longueur
    {
     lcd.clear();
     lcd.print(valeur);lcd.setCursor(0,0);
     lcd.print("longueur mm");
    lcd.setCursor (0,1);
     valeur = SAISIE_LONG();
     


 
 
{                             // positionnement de la scie mobile
 

         EEPROM.get(1,position_actuelle);                // lire position_actuelle dans l'EEPROM
         if (valeur>position_actuelle && valeur<valeur_maxi)                  // si valeur > position_actuelle
           {
            Deplacement = valeur - position_actuelle;    // deplacement = valeur - position_actuelle
            NbPas = Deplacement / PAS;                  // NbPas = deplacement / PAS
            i=0;                                        // PAS = 0.149
            do                                          // Tourner de NbPas dans le sens horaire
              {if(digitalRead(FDC2)== HIGH)
               stepper.step(1);                     
               i++;
              }while(i<NbPas);          //FDC1 = fin de course côté 6m
           }
           
           
         if (valeur<position_actuelle && valeur>decalage_depart )                   // si valeur < position_actuelle
           {
            Deplacement = position_actuelle - valeur;    // deplacement =  position_actuelle – valeur
            NbPas = Deplacement / PAS;                   // NbPas = deplacement / PAS
            i=0;                                        // PAS = 0,149
            do                                          // Tourner de NbPas dans le sens antihoraire
              {if(digitalRead(FDC1)== HIGH)
               stepper.step(-1);
               i++;
              }while( i<NbPas);          //FDC1 = fin de course côté 30cm
           }
           if (valeur>decalage_depart && valeur<valeur_maxi)
         EEPROM.put (1,valeur);                         // Ecrire valeur dans l'EEPROM
          }
 
    
 


lcd.clear(); // // efface écran et met le curseur en haut à gauche
delay(500); // pour laisser temps effacer écran
    }
    

    
    if(touche=='C') // Demande de changement de délais        
    {
lcd.setCursor(0,0);
     lcd.print("Non autorisee:");
     delay (1000);
    }// fin if touche C

    

if(touche=='*'){ // etalonnage longueur

    {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("etalonnage");
    lcd.setCursor(0,1);
    lcd.print("en cour");
{
 do                                          // Tourner de NbPas dans le sens antihoraire
              {
                longueur_etalonnage=(4698*PAS)+ decalage_depart;
               stepper.step(-1);
               i++;
              }while(digitalRead(FDC1)== HIGH) ;    //retour a 0 du chariot
              delay(3000);
              stepper.step(+4698); // avance du chariot de 1m
              EEPROM.put (1,(longueur_etalonnage)); //enregistrement position dans eeprom
              delay(3000);
               lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("etalonnage");
    lcd.setCursor(0,1);
    lcd.print("termine");
    delay(3000);
    lcd.clear();
                
}
    }   
    
}

 } //fin while bouton tournant




} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************

//*************** Autres Fonctions du programme *************

unsigned int SAISIE_LONG (){ // fonction qui renvoie une valeur long signé (32bits)

//---- variables locales utilisées dans la fonction
long saisie_long[11]={0,0,0,0,0,0,0,0,0,0,0}; // crée un tableau de variables pour saisir valeur - long maxi = 10 chiffres + signe
char compt_touche; // variable de comptage du nombre de touches saisies
long nombre_saisi; // variable de calcul du nombre saisi
//float valeurf; // variable de caclul de la valeur convertie    
char touche_long; // variable locale pour valeur touche appuyée de 0 à 15

//---- initialisation des variables utilisées ----
compt_touche=0; // aucune touche saisie au démarrage
nombre_saisi=0; // initialise la variable


//-------- initialisation curseur --------
//// mode clignotant

//------ gestion appui touche sur clavier

 while (compt_touche<5) { // tant que pas appuis maxi = 11 touches pour long + signe (valeur maxi=+2 147 483 647)

       touche_long= clavier.getKey(); // lecture de la touche appuyée

       if (touche_long!= NO_KEY){ // si une touche a été frappée -- gestion de la touche appuyée 

          lcd.print(touche_long); // debug

           if (compt_touche==0) { // au premier passage 
              if (touche_long=='*') { // si appui signe - 
                saisie_long[10]=-1; // mémorise -1 dans le 11ème caractère 
                continue; // poursuit while comme si pas de premier passage
              }
             else {
               if (saisie_long[10]==0)saisie_long[10]=1; // mémorise le signe + dans le 11ème caractère si pas déjà à -1
             }
           } // fin if compt_touche==0


           if (touche_long=='A') break; // sort du while si appui sur A
           

           //---- calcul valeur numérique touches 0 à 9  (3ères lignes x 3ères colonnes)
           //--- à partir lignes colonnes ---
           for (byte i=0;i<3;i++) {
             for (byte j=0; j<3;j++){
               if (touche_long==touches[i][j]) touche_long=(j+1)+(i*3);//calcul de la valeur numérique
             }
           }

           //---- à patir valeur ascii --- 

           // touche 0
           if (touche_long=='0') touche_long=0;

          

           saisie_long[compt_touche]=touche_long; //enregistre le caractère dans tableau code_saisi


           compt_touche=compt_touche+1; // on incrémente la variable compt qui mémorise le nombre de caractères saisis

           //delay () 
          


         } //---- fin gestion appui clavier

}// fin du While = fin de la lecture du clavier

//--------- calcul valeur saisie en fonction du nombre de chiffres saisis et x signe (saisie_long[10]) ---------
if (compt_touche==0)nombre_saisi=0;   // si aucun chiffre saisi
if (compt_touche==1)nombre_saisi=(saisie_long[0]);   // si 1 seul chiffre saisi
if (compt_touche==2)nombre_saisi=(saisie_long[0]*10)+(saisie_long[1]*1);   // si 2 chiffres saisi
if (compt_touche==3)nombre_saisi=(saisie_long[0]*100)+(saisie_long[1]*10)+(saisie_long[2]*1);   // si 3 chiffres saisi
if (compt_touche==4)nombre_saisi=(saisie_long[0]*1000)+(saisie_long[1]*100)+(saisie_long[2]*10)+(saisie_long[3]*1);   // si 4 chiffres saisi
if (compt_touche==5)nombre_saisi=(saisie_long[0]*10000)+(saisie_long[1]*1000)+(saisie_long[2]*100)+(saisie_long[3]*10)+(saisie_long[4]*1);   // si 5 chiffres saisi
if (compt_touche==6)nombre_saisi=(saisie_long[0]*100000)+(saisie_long[1]*10000)+(saisie_long[2]*1000)+(saisie_long[3]*100)+(saisie_long[4]*10)+(saisie_long[5]*1);   // si 6 chiffres saisi
if (compt_touche==7)nombre_saisi=(saisie_long[0]*1000000)+(saisie_long[1]*100000)+(saisie_long[2]*10000)+(saisie_long[3]*1000)+(saisie_long[4]*100)+(saisie_long[4]*10)+(saisie_long[5]*1);   // si 6 chiffres saisi
if (compt_touche==8)nombre_saisi=(saisie_long[0]*10000000)+(saisie_long[1]*1000000)+(saisie_long[2]*100000)+(saisie_long[3]*10000)+(saisie_long[4]*1000)+(saisie_long[5]*100)+(saisie_long[6]*10)+(saisie_long[7]*1);   // si 7 chiffres saisi
if (compt_touche==9)nombre_saisi=(saisie_long[0]*100000000)+(saisie_long[1]*10000000)+(saisie_long[2]*1000000)+(saisie_long[3]*100000)+(saisie_long[4]*10000)+(saisie_long[5]*1000)+(saisie_long[6]*100)+(saisie_long[7]*10)+(saisie_long[8]*1);   // si 8 chiffres saisi
if (compt_touche==10)nombre_saisi=(saisie_long[0]*1000000000)+(saisie_long[1]*100000000)+(saisie_long[2]*10000000)+(saisie_long[3]*1000000)+(saisie_long[4]*100000)+(saisie_long[5]*10000)+(saisie_long[6]*1000)+(saisie_long[7]*100)+(saisie_long[8]*10)+(saisie_long[9]*1);   // si 9 chiffres saisi

//Serial.println(int(saisie_long[10])); // debug - affiche signe


//------ à réaliser en sortie de lecture du clavier ----

compt_touche=0; // réinitialise le nombre de touche saisies

//-------- initialisation curseur --------
//// désactive mode clignotant

//----- renvoi de la valeur saisie ----

return (nombre_saisi); // renvoie la valeur - sortie de la fonction 



}


// --- Fin programme ---


#98 levend

levend

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 5 572 messages
  • Gender:Male
  • Location:Vendée

Posté 22 octobre 2016 - 08:44

Ne t'inquiète pas, je n'ai pas eu beaucoup de temps non plus cette semaine, je viens juste de récupérer le programme.


Imprimante 3D : Prusa i3 (MK1) + CR-10S + CR-10 S5 + Artillery Sidewinder X2 + CR-30 + Elegoo Mars + Anycubic Wash & cure 2 + Phrozen Sonic Mega 8K + Phrozen Cure Mega

#99 levend

levend

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 5 572 messages
  • Gender:Male
  • Location:Vendée

Posté 24 octobre 2016 - 02:12

J'ai des erreurs lorsque je compile :(

 

Edit : bizarrement le ligne qui pose problème semble être : #include <Keypad.h>


Imprimante 3D : Prusa i3 (MK1) + CR-10S + CR-10 S5 + Artillery Sidewinder X2 + CR-30 + Elegoo Mars + Anycubic Wash & cure 2 + Phrozen Sonic Mega 8K + Phrozen Cure Mega

#100 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 25 octobre 2016 - 04:20

bonjour, desolé de repondre seulement maintenant mais en effet c'est bizare car moi quand je compile je n'est aucune erreur. peut etre un probleme avec ta librairie. bonne soiree






0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users