Aller au contenu


Photo
- - - - -

aide programation CNC


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

#1 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 20 septembre 2016 - 08:43

bonjour a tous, je vient ici pour avoir de l'aide des pro de l'arduino (si vous voulez bien ;) ) voila, je suis en cour de realisation d'une scie a commande numérique (sujet ici: http://www.robot-maker.com/forum/topic/10717-machine-a-commande-numerique/) je debute dans l'arduino (et je ne sais pas si j'ai choisis le plus simple mais on va y arriver) apres des heures de recherche je pense reussir a programmer certaine chose, on vera dans l'avancée de la prog. j'ai trouver un sujet interessant qui va beaucoup m'aider je pense (  http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertMoteursPAPGotoClavierLcd) avec ce sujet je pense reussir a programer le clavier, l'ecran et une partie du moteur pas a pas. c'est la que j'ai besoin de vous, mon probleme est que sur le clavier je n'entrerai pas un nombre de pas mais une distance en mm et je n'ai pas trouver comment dire a l'arduino que la valeur X (entrée sur le clavier)= x pas que le moteur devra faire. pouvez vous m'aider svp.

j'utilise un moteur nema 42 de 200 pas (1.8deg/step) avec un engrenage de diametre primitif de 40mm

donc je sais que (si mes calculs sont bon, pouvez vous verifier aussi svp)

- le perimettre de ma couronne est de 125.66mm

- j'ai une distance de 6000mm a parcourir donc 6000/125.66=47.7479 donc le moteur devra faire 47.7479tours pour effectuer les 6ml soit 47.7479x200= 9559.58pas

- donc 1 pas moteur= 6000/9559.58= 0.628mm

 

donc encore une fois, comment dire a l'arduino que si par exemple je tape 125 sur le clavier il devra avancer de 199 pas (arrondi car je ne pense pas qu'il fasse les decimale et c'est deja assez preci je pense, erreur de 0.6mm pour 6m)

 

ah oui aussi autre chose, quelle vitesse de deplacement conseillez vous pour ce type de machine? je pensais 1m/s soit 477 tours minute. pensez vous que c'est trop rapide?

 

merci d'avance pour votre aide. bonne journée 

 

edit: rebonjour je suis en train d'essayer de realiser le debut de mon programme et j'aurai encore une question

 

quand j'ecrit:

 

 if (digitalRead(17)==HIGH){     
  digitalWrite(10,HIGH);          
 }

 

on est d'accord que quand j'appuis sur le bouton a la pin 17 j'allume ma pin 10 mais ma question est est ce qu'elle reste allumée meme quand je lache le bouton?

 

et est ce que ca reviend au meme que si j'ecrit ca:

 

 if (digitalRead(17)==HIGH){      
  digitalWrite(10,HIGH);          
 }

else{

digitalWrite(10,low)

 

je vous demande ca parce que j'ai besoin d'un prog qui:

quand j'appuis sur un bouton active la pin 7 par exemple (et reste active meme quand je relache) puis quand j'appuis sur un second bouton desactive la pin 7 et active la 8.

 

j'espere etre clair dans mes explication, merci d'avance et bonne soiree a tous.



#2 levend

levend

    Pilier du forum

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

Posté 20 septembre 2016 - 08:01

Dans le 2ème cas, quand tu relacheras ton bouton (pin 17), ta sortie (pin 10) repassera à 0 alors que dans le premier cas elle restera inchangé.
Remarque : Définie toute tes constantes au début du programme comme ça tu n'écris pas le numéro du pin dans le programme mais le nom de la constante, comme ça si jamais tu modifies ton câblage tu as juste à modifier ta constante plutôt que de chercher partout dans le programme toute les occurrences de ta valeur, et cela rends aussi le programme plus lisible.
 
J'avais fait un récapitulatif de toutes les entrées/sorties utilisées sur l'arduino (sauf l'écran LCD) et à vérifier avec ton schéma :
 

Pin Nom E/S 1 Relais_11 sortie 2 Relais_10 sortie 3 Relais_9 sortie 4 Relais_8 sortie 5 Relais_7 sortie 6 Relais_6 sortie 7 Relais_5 sortie 8 Relais_4 sortie 9 Relais_3 sortie 10 Relais_2 sortie 11 Relais_1 sortie 12 Pulse Sortie PWM 13 Dir Sortie PWM 14 Btn_Dep_Plus Entrée 15 Btn_Dep_Moins Entrée 16 Btn_Serrer_Piece Entrée 17 Btn_Desserrer_Piece Entrée 18 Btn_Avance_Scie1 Entrée 19 Btn_Recul_Scie1 Entrée 20 Btn_Monte_Scie1 Entrée 21 Btn_Descente_Scie1 Entrée 22     23 Btn_Avance_Scie1 Entrée 24     25 Btn_Recul_Scie1 Entrée 26     27 Btn_Monte_Scie1 Entrée 28     29 Btn_Descente_Scie1 Entrée 30     31 Btn_Rot_Manu Entrée 32     33 Btn_Rot_Auto Entrée 34     35 fdc Entrée 36     37 fdc Entrée 38 Clavier_L1 Entrée 39 fdc Entrée 40 Clavier_L2 Entrée 41 fdc Entrée 42 Clavier_L3 Entrée 43 Btn_depart_Cycle Entrée 44 Clavier_L4 Entrée 45     46 Clavier_C1 Entrée 47     48 Clavier_C2 Entrée 49     50 Clavier_C3 Entrée 51     52 Clavier_C4 Entrée

Donc au début de ton programme tu as :
 

const int Btn_Desserrer_Piece=17
const int relais_2=10

(une solution possible)

 

Ton programme deviendra donc :

if (digitalRead(Btn_Desserrer_Piece)==HIGH){     
  digitalWrite(relais_2,HIGH);          
 }

Bien sûr tu les aura définit respectivement en entrée et en sortie.

 

Ma liste récapitulative aurait du être sous forme de tableau, bien plus lisible :diablo:


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

#3 levend

levend

    Pilier du forum

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

Posté 20 septembre 2016 - 08:21

Pour ton pas, tu pouvais aussi faire 125,66/200=0.628mm.

donc pour savoir le nombre de pas que dois faire le moteur, tu peux faire distance/0.628 , sous réserve des possibilités arithmétiques de l'arduino.

Et on complique un peu la chose, tu rentre la longueur souhaitée donc le nombre de pas sera quelque chose du genre : NdPas = (longueur_souhaitée - position_actuelle)/0.628


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

#4 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 20 septembre 2016 - 08:37

merci de tes reponces, concernant les constantes j'ai l'impression que c'est plus compliqué je creuserai ca demain merci. sinon concernant le moteur c'est vrais que ca deviens compliqué lol. voisi un appercu du prog que j'ai fait aujourd'hui a titre informatif car il y a des modif a faire suite aux info que je viens d'avoir.

void setup (){
  pinMode(14,INPUT); // poussoir deplacement recul
  pinMode(15,INPUT); // poussoir deplacement avance
  pinMode(16,INPUT); // poussoir desserrage
  pinMode(17,INPUT); // poussoir serrage
  pinMode(18,INPUT); // poussoir scie 2 recul
  pinMode(19,INPUT); // poussoir scie 2 avance
  pinMode(20,INPUT); // poussoir scie 2 montée
  pinMode(21,INPUT); // poussoir scie 2 descente
  pinMode(23,INPUT); // poussoir scie 1 recul
  pinMode(25,INPUT); // poussoir scie 1 avance
  pinMode(27,INPUT); // poussoir scie 1 montée
  pinMode(29,INPUT); // poussoir scie 1 descente
  pinMode(31,INPUT); // bouton manuel
  pinMode(33,INPUT); // bouton auto
  pinMode(39,INPUT); // capteur fin de course 1
  pinMode(41,INPUT); // capteur fin de course 2
  pinMode(43,INPUT); // pedale
  pinMode(2,OUTPUT); // verin scie 1 dessente
  pinMode(3,OUTPUT); // verin scie 1 montée
  pinMode(4,OUTPUT); // verin scie 1 avance
  pinMode(5,OUTPUT); // verin scie 1 recul
  pinMode(6,OUTPUT); // verin scie 2 descente
  pinMode(7,OUTPUT); // verin scie 2 montée
  pinMode(8,OUTPUT); // verin scie 2 avance
  pinMode(9,OUTPUT); // verin scie 2 recul
  pinMode(10,OUTPUT); // verin serrage
  pinMode(11,OUTPUT); // verin desserage
}

void loop(){
  while (digitalRead(33)==HIGH){ // interupteur rotatif sur position auto
  if (digitalRead(43)==HIGH){ //appuis sur interupteur poussoir pedale
  digitalWrite(10,HIGH); // serrage
  digitalWrite(4,HIGH); // avance scie 1
  digitalWrite(8,HIGH); // avance scie 2
  delay (1000);
  digitalWrite(10,HIGH); // serrage
  digitalWrite(4,HIGH); // avance scie 1
  digitalWrite(8,HIGH); // avance scie 2
  digitalWrite(2,HIGH); // descente scie 1
  digitalWrite(6,HIGH); // descente scie 2
  delay (1000);
  digitalWrite(10,HIGH); // serrage
  digitalWrite(2,HIGH); // descente scie 1
  digitalWrite(6,HIGH); // descente scie 2
  digitalWrite(5,HIGH); // recul scie 1
  digitalWrite(9,HIGH); // recul scie 2
  delay (1000);
  digitalWrite(10,HIGH); // serrage
  digitalWrite(5,HIGH); // recul scie 1
  digitalWrite(9,HIGH); // recul scie 2
  digitalWrite(3,HIGH); // montée scie 1
  digitalWrite(7,HIGH); // montée scie 2
  delay (1000);
  digitalWrite(11,HIGH); // desserrage
  delay (1000);
  }
 }
 while (digitalRead(31)==HIGH){   //interupteur rotatif position manuel
 
 if (digitalRead(25)==HIGH){  // poussoir avance scie 1
  digitalWrite(4,HIGH);      // verin avance scie 1
 }
 if (digitalRead(19)==HIGH){  // poussoir avance scie 2
  digitalWrite(8,HIGH);       // verin avance scie 2
 }
 if (digitalRead(23)==HIGH){ // poussoir recul scie 1
  digitalWrite(5,HIGH);      // verin recul scie 1
 }
 if (digitalRead(18)==HIGH){  // poussoir recul scie 2
  digitalWrite(9,HIGH);      // verin recul scie 2
 }
 if (digitalRead(29)==HIGH){  // poussoir descente scie 1
  digitalWrite(2,HIGH);      // verin descente scie 1
 }
 if (digitalRead(21)==HIGH){   // poussoir descente scie 2
  digitalWrite(6,HIGH);        // verin descente scie 1
 }
 if (digitalRead(27)==HIGH){   // poussoir montée scie 1
 digitalWrite(3,HIGH);         // verin montée scie 1
 }
 if (digitalRead(20)==HIGH){    // poussoir monté scie 2
  digitalWrite(7,HIGH);         // verin monté scie 2
 }
 if (digitalRead(17)==HIGH){       //bouton serrage
  digitalWrite(10,HIGH);           // verin de serrage
 }
 if (digitalRead(16)==HIGH){       //bouton de desserage
  digitalWrite(11,HIGH);            // verin de desserage
 }
}
}

Modifié par Jan, 20 septembre 2016 - 08:45 .
merci d'utiliser les balises code pour rendre le message plus lisible ;)


#5 Mike118

Mike118

    Staff Robot Maker

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

Posté 20 septembre 2016 - 09:28

Je recommande l'utilisation des #define pour faciliter le codage si changement de pins et pour faciliter la compréhension

#define PDR 14  // poussoir déplacement recule 
#define PDA 15  // poussoir déplacement avance 
// on continue avec tous les pins 

void setup() {
pinMode(PDR,INPUT); // On met PDR poussoir déplacement recule = 14 en entré 
pinmode(PDA,INPUT); // idem 
// on continue avec tous les pinMode 

}
void loop()
{
// Pour chaque digitalWrite utilise on ne met plus un chiffre en paramètre on met un define 
// exemple :
digitalWrite(PDR,HIGH);  
//
}

Sans le savoir tu utilise déjà des #define dans ton code ; HIGH c'est un define qui vaut 1 ;) LOW vaut 0 etc.... ;) 

Bonne continuation ! 


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  

 

 

 


#6 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 20 septembre 2016 - 09:46

Merci pour vos info, je vais voir demain pour les constantes et aussi pour le moteur pas a pas je vais essayer d'approfondir ton équation levend. En tous cas merci à tous ceux qui m'assiste pour mon projet. Bonne soiree a tous

#7 levend

levend

    Pilier du forum

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

Posté 21 septembre 2016 - 03:40

J'avais hésité pour les #define, puis laissé parce que je ne savais plus s'il y avais un "=" et pas envie de chercher la réponse hier soir :D .

Sinon ça ne semble pas trop mal pour quelqu'un qui ne s'y connais pas en programmation.

Après je peux dire que tu oublies un ou deux cas avec ton bouton rotatif, ceux sont des cas impossibles tant qu'il fonctionne correctement, mais ça permet d'indiquer un défaut de  fonctionnement, si tu n'as pas trouvé ce soir, j'aiderai à trouver : je ne vais pas tout faire :D :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

#8 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 21 septembre 2016 - 04:45

bonjour a tous, j'ai essayer d'avancer un peu aujourd'hui, j'ai suivis vos conseil (je pense) je doit voir pour creuser un peu l'equation de levend. pouvez vous deja jeter un oeuil sur ce qui est fait? je suis desoler de vous harceler ;) mais ca me permet de corriger au fur et a mesure. merci beaucoup pour votre aide. et levend je n'ai pas compris ce que tu veut dire par les impossible peut tu m'expliquer?

voici le nouveau code: bonne soiree a tous

#include <Stepper.h>
const int NombrePas=200;
const int Pas_1=12;
const int Pas_2=13;
Stepper stepper(NombrePas, Pas_1, Pas_2);


#include <Keypad.h>
const byte LIGNES = 4;
const byte COLONNES = 4;

const int C1=32;
const int C2=40;
const int C3=42;
const int C4=44;
const int L1=46;
const int L2=48;
const int L3=50;
const int L4=52;

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

byte BrochesLignes[LIGNES] = {L1, L2, L3, L4};
byte BrochesColonnes[COLONNES] = {C1, C2, C3, C4};

char touche;
long valeur;


 Keypad clavier = Keypad (makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );


#include <LiquidCrystal.h>
const int RS=53;
const int E=51;
const int D4=49;
const int D5=47;
const int D6=45;
const int D7= 47;

LiquidCrystal lcd(RS, E, D4, D5, D6, D7); 



#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 PA2 19   // poussoir scie 2 avance
#define PM2 20   // poussoir scie 2 montée
#define PD2 21   // poussoir scie 2 descente
#define PR1 23   // poussoir scie 1 recul
#define PA1 25   // poussoir scie 1 avance
#define PM1 27   // poussoir scie 1 montée
#define PD1 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 (){
  lcd.begin(16,2);
  delay(10);
  lcd.setCursor(0,0);
  lcd.print("bienvenue");
  delay (10000);
  lcd.clear();
  delay(10);

  stepper.setSpeed(477);

  
  pinMode(PDR,INPUT); // poussoir deplacement recul
  pinMode(PDA,INPUT); // poussoir deplacement avance
  pinMode(PD,INPUT); // poussoir desserrage
  pinMode(PS,INPUT); // poussoir serrage 
  pinMode(PR2,INPUT); // poussoir scie 2 recul
  pinMode(PA2,INPUT); // poussoir scie 2 avance
  pinMode(PM2,INPUT); // poussoir scie 2 montée
  pinMode(PD2,INPUT); // poussoir scie 2 descente
  pinMode(PR1,INPUT); // poussoir scie 1 recul
  pinMode(PA1,INPUT); // poussoir scie 1 avance
  pinMode(PM1,INPUT); // poussoir scie 1 montée
  pinMode(PD1,INPUT); // poussoir scie 1 descente
  pinMode(BM,INPUT); // bouton manuel
  pinMode(BA,INPUT); // bouton auto
  pinMode(FDC1,INPUT); // capteur fin de course 1
  pinMode(FDC2,INPUT); // capteur fin de course 2
  pinMode(P,INPUT); // 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
}

void loop(){

lcd.setCursor(0,0);
lcd.print("LONGUEUR MM");
lcd.setCursor (0,1);
lcd.print(valeur);
stepper.step(valeur/0.628);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("decoupe en cour");
lcd.setCursor (0,1);
lcd.print(valeur);
 
  touche = clavier.getKey();
  if (touche !=NO_KEY){
    if(touche=='#') lcd.clear();else lcd.print(touche);
     }

  
  while (digitalRead(BA)==HIGH){ // interupteur rotatif sur position auto
  if (digitalRead(P)==HIGH){ //appuis sur interupteur poussoir pedale
  digitalWrite(VS,HIGH); // serrage
  
  digitalWrite(VA1,HIGH); // avance scie 1
  digitalWrite(VA2,HIGH); // avance scie 2
  delay (1000);
  
  digitalWrite(VD1,HIGH); // descente scie 1
  digitalWrite(VD2,HIGH); // descente scie 2
  delay (1000);
  
  digitalWrite(VA1,LOW); // arret avance scie 1
   digitalWrite(VA2,LOW); // arret avance scie 2
  digitalWrite(VR1,HIGH); // recul scie 1
  digitalWrite(VR2,HIGH); // recul scie 2
  delay (1000);
  
 digitalWrite(VD1,LOW); // arret descente scie 1
  digitalWrite(VD2,LOW); // arret descente scie 2
 digitalWrite(VM1,HIGH); // montée scie 1
  digitalWrite(VM2,HIGH); // montée scie 2
  delay (1000);

   digitalWrite(VR1,LOW); // arret recul scie 1
  digitalWrite(VR2,LOW); // arret recul scie 2
 digitalWrite(VM1,LOW); // arret montée scie 1
  digitalWrite(VM2,LOW); // arret montée scie 2
  delay (1000);
  
   digitalWrite(VS,LOW); // arret serrage
  digitalWrite(VD,HIGH); // desserrage
  delay (1000);

  digitalWrite(VD,LOW); // arret desserrage 
  delay (1000);
  }
 }



 
 while (digitalRead(BM)==HIGH){   //interupteur rotatif position manuel
  
 if (digitalRead(PA1)==HIGH){    // poussoir avance scie 1
  digitalWrite(VA1,HIGH);        // verin avance scie 1
 }
  else{ 
  digitalWrite(VA1,LOW);        // verin avance scie 1
 }

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

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

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

 
 if (digitalRead(PD1)==HIGH){  // poussoir descente scie 1
  digitalWrite(VD1,HIGH);      // verin descente scie 1
 }
 else{
   digitalWrite(VD1,LOW);      // verin descente scie 1
 }

 
 if (digitalRead(PD2)==HIGH){   // poussoir descente scie 2
  digitalWrite(VD2,HIGH);       // verin descente scie 1 
 }
 else{
    digitalWrite(VD2,LOW);        // verin descente scie 1 
 }

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

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

 
 if (digitalRead(PS)==HIGH){        // bouton serrage
  digitalWrite(VS,HIGH);            // verin de serrage
  digitalWrite(VD,LOW);             // verin desserrage
 }
 
 if (digitalRead(PD)==HIGH){        // bouton de desserage
  digitalWrite(VD,HIGH);            // verin de desserage
  digitalWrite(VS,LOW);             // verin serrage
 }

}
}



#9 levend

levend

    Pilier du forum

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

Posté 21 septembre 2016 - 07:25

Remplace tous tes "const in" par des "#define", ce sera pas mal vu que c'est toujours la même chose : l'attribution du pin donc autant tous les mettre de la même manière.

Et si j'ai bien compris les pins 12 et 12 sont attribués à Pas_1 et Pas_2, tu pourrais les appeler Pulse et Dir, c'est le nom qu'à le connecteur côté driver.

Et je mettrais une constante Pas=0.628 plutôt que de la mettre dans le programme, mais ce n'est qu'un détail.

 

Je pense que ta partie affichage est à revoir, je me demande aussi si une fonction affichage ne serait pas plus mal.

 

Edit : désolé je n'ai pas regardé tout ton programme en détail, trop crevé pour faire marcher mes neurones ce soir :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

#10 levend

levend

    Pilier du forum

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

Posté 21 septembre 2016 - 07:39

Les cas impossibles :

  • ton bouton rotatif ne pourra jamais être sur "Auto" et sur "Manu" en même temps, dans le cas d'un fonctionnement normal mais en cas de défaillance ?
  • ton bouton rotatif sera toujours sur une des deux positions, dans le cas d'un fonctionnement normal mais en cas de défaillance ?

Donc pour éviter ça, je te suggère ces quelques lignes ( à remettre à leur place) :
 

while (digitalRead(BA)==HIGH && digitalRead(BM)==LOW){ // interupteur rotatif sur position auto

while (digitalRead(BM)==HIGH && digitalRead(BA)==LOW){ //interupteur rotatif position manuel

if ((digitalRead(BM)==HIGH && digitalRead(BA)==HIGH) or (digitalRead(BM)==LOW && digitalRead(BA)==LOW)){
Afficher("Defaut bouton Manu/Auto")
}

La ligne avec le "if" est à mettre après la fin de ta dernière boucle "while".

La fonction Afficher() est celle à laquelle je fait allusion dans mon post précédent.


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

#11 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 21 septembre 2016 - 08:26

Merci pour les conseils, je vais voir a ca demain et essayer de continuer, au fait, toute la partie electronique a été commander ce matin, une partie arrive deja demain, sinon concernant le reste j'ai reçu la chaine guide câble il y a quelques jours, les distributeurs arrivent demain sino il reste les verins qui sont toujours au dédouanage en Chine il sont pas pressé lol. Bonne soiree ;)

#12 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 22 septembre 2016 - 02:01

bonjour a tous, je revient vers vous parce que la je seche vraiment, c'est concernant le deplacement du moteur.

donc comme me l'a dit levend au debut du poste le formule serait du type:

position souhaitee - position actuelle

 

je pense avoir trouve mais je n'arive pas a la mettre en pratique, je pense qu'il faut enregistrer la position dans l'EEPROM mais c'est la que j'ai un probleme.

le probleme est que:

quand je tape une distance souhaité celle ci s'apelle "valeur",

donc je doit enregistrer "valeur" dans l'eeprom avec le code eeprom.put

jusque la pas de probleme le soucis est quand je veut la remettre, je me retrouve ave 2 "valeurs" differentesl'ancienne et la nouvelle. je vous met le code ci joint vous comprendrez peut etre mieux

 

en sachant que NBpas est une constante (valeur/0.628)

bonne journee

void loop(){
lcd.setCursor(0,0);
lcd.print("LONGUEUR MM");
lcd.setCursor (0,1);
lcd.print(valeur);

if (touche=='A')

stepper.step((EEPROM.get(1,valeur)/0.628) - NBpas);
EEPROM.put (1,valeur);


#13 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 22 septembre 2016 - 05:47

bonjour a tous, j'ai travailler un peut sur le code aujourd'hui et je croit avoir suivis tes conseils levend, par contre j'ai toujours ce doute avec l'eeprom, pouvez vous jeter un oeuil s'il vous plait. bonne soiree

#include <EEPROM.h>


#include <Stepper.h>
#define NombrePas 200
#define Pulse 12
#define Dir 13
Stepper stepper(NombrePas, Pulse, Dir);


#include <Keypad.h>
const byte LIGNES = 4;
const byte COLONNES = 4;

#define C1 32
#define C2 40
#define C3 42
#define C4 44
#define L1 46
#define L2 48
#define L3 50
#define L4 52

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

byte BrochesLignes[LIGNES] = {L1, L2, L3, L4};
byte BrochesColonnes[COLONNES] = {C1, C2, C3, C4};

char touche;
long valeur;
#define NBpas  valeur/0.628


 Keypad clavier = Keypad (makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );


#include <LiquidCrystal.h>
#define RS 53
#define E 51
#define D4 49
#define D5 47
#define D6 45
#define D7 47

LiquidCrystal lcd(RS, E, D4, D5, D6, D7); 



#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 PA2 19   // poussoir scie 2 avance
#define PM2 20   // poussoir scie 2 montée
#define PD2 21   // poussoir scie 2 descente
#define PR1 23   // poussoir scie 1 recul
#define PA1 25   // poussoir scie 1 avance
#define PM1 27   // poussoir scie 1 montée
#define PD1 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 (){
  lcd.begin(16,2);
  delay(10);
  lcd.setCursor(0,0);
  lcd.print("bienvenue");
  delay (10000);
  lcd.clear();
  delay(10);

  stepper.setSpeed(477);

  
  pinMode(PDR,INPUT); // poussoir deplacement recul
  pinMode(PDA,INPUT); // poussoir deplacement avance
  pinMode(PD,INPUT); // poussoir desserrage
  pinMode(PS,INPUT); // poussoir serrage 
  pinMode(PR2,INPUT); // poussoir scie 2 recul
  pinMode(PA2,INPUT); // poussoir scie 2 avance
  pinMode(PM2,INPUT); // poussoir scie 2 montée
  pinMode(PD2,INPUT); // poussoir scie 2 descente
  pinMode(PR1,INPUT); // poussoir scie 1 recul
  pinMode(PA1,INPUT); // poussoir scie 1 avance
  pinMode(PM1,INPUT); // poussoir scie 1 montée
  pinMode(PD1,INPUT); // poussoir scie 1 descente
  pinMode(BM,INPUT); // bouton manuel
  pinMode(BA,INPUT); // bouton auto
  pinMode(FDC1,INPUT); // capteur fin de course 1
  pinMode(FDC2,INPUT); // capteur fin de course 2
  pinMode(P,INPUT); // 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
}

void loop(){
lcd.setCursor(0,0);
lcd.print("LONGUEUR MM");
lcd.setCursor (0,1);
lcd.print(valeur);

while ((touche=='A') && (digitalRead(FDC1)==LOW) && (digitalRead(FDC2)==LOW) )

{
  if (valeur < 300);
  else (lcd.clear());
  lcd.setCursor(5,0);
  lcd.print ("ERREUR");
  lcd.setCursor(2,16);
  lcd.print ("long mini 300");

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

stepper.step((EEPROM.get(1,valeur)/0.628) - NBpas);
EEPROM.put (1,valeur);


lcd.clear();
lcd.setCursor(0,0);
lcd.print("decoupe en cour");
lcd.setCursor (0,1);
lcd.print(valeur);
 
  touche = clavier.getKey();
  if (touche !=NO_KEY){
    if(touche=='#') lcd.clear();else lcd.print(touche);
     }

  
  while (digitalRead(BA)==HIGH && digitalRead(BM)==LOW){ // interupteur rotatif sur position auto
  if (digitalRead(P)==HIGH){ //appuis sur interupteur poussoir pedale
  digitalWrite(VS,HIGH); // serrage
  
  digitalWrite(VA1,HIGH); // avance scie 1
  digitalWrite(VA2,HIGH); // avance scie 2
  delay (1000);
  
  digitalWrite(VD1,HIGH); // descente scie 1
  digitalWrite(VD2,HIGH); // descente scie 2
  delay (1000);
  
  digitalWrite(VA1,LOW); // arret avance scie 1
   digitalWrite(VA2,LOW); // arret avance scie 2
  digitalWrite(VR1,HIGH); // recul scie 1
  digitalWrite(VR2,HIGH); // recul scie 2
  delay (1000);
  
 digitalWrite(VD1,LOW); // arret descente scie 1
  digitalWrite(VD2,LOW); // arret descente scie 2
 digitalWrite(VM1,HIGH); // montée scie 1
  digitalWrite(VM2,HIGH); // montée scie 2
  delay (1000);

   digitalWrite(VR1,LOW); // arret recul scie 1
  digitalWrite(VR2,LOW); // arret recul scie 2
 digitalWrite(VM1,LOW); // arret montée scie 1
  digitalWrite(VM2,LOW); // arret montée scie 2
  delay (1000);
  
   digitalWrite(VS,LOW); // arret serrage
  digitalWrite(VD,HIGH); // desserrage
  delay (1000);

  digitalWrite(VD,LOW); // arret desserrage 
  delay (1000);
  }
 }



 
 while (digitalRead(BM)==HIGH && digitalRead(BA)==LOW){   //interupteur rotatif position manuel
  
 if (digitalRead(PA1)==HIGH){    // poussoir avance scie 1
  digitalWrite(VA1,HIGH);        // verin avance scie 1
 }
  else{ 
  digitalWrite(VA1,LOW);        // verin avance scie 1
 }

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

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

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

 
 if (digitalRead(PD1)==HIGH){  // poussoir descente scie 1
  digitalWrite(VD1,HIGH);      // verin descente scie 1
 }
 else{
   digitalWrite(VD1,LOW);      // verin descente scie 1
 }

 
 if (digitalRead(PD2)==HIGH){   // poussoir descente scie 2
  digitalWrite(VD2,HIGH);       // verin descente scie 1 
 }
 else{
    digitalWrite(VD2,LOW);        // verin descente scie 1 
 }

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

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

 
 if (digitalRead(PS)==HIGH){        // bouton serrage
  digitalWrite(VS,HIGH);            // verin de serrage
  digitalWrite(VD,LOW);             // verin desserrage
 }
 
 if (digitalRead(PD)==HIGH){        // bouton de desserage
  digitalWrite(VD,HIGH);            // verin de desserage
  digitalWrite(VS,LOW);             // verin serrage
 }
 }


if ((digitalRead(BM)==HIGH && digitalRead(BA)==HIGH)or(digitalRead(BM)==LOW && digitalRead(BA)==LOW)){
  lcd.setCursor (2,0);
  lcd.print("Defaut bouton");
  lcd.setCursor (3,1);
  lcd.print("Manu/Auto"); 
}
}




#14 levend

levend

    Pilier du forum

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

Posté 22 septembre 2016 - 06:08

#define NBpas valeur/0.628

Pour moi c'est faux : une constante ne peux pas dépendre d'une variable, NBpas est donc une variable, je dirais de type long.

 

Une chose que je  n'ai pas réussi à trouvé, c'est comment tu fais pour rentrer ta valeur au clavier, je m'excuse mais en programmation arduino je suis aussi débutant alors je ne l'ai peut-être pas vu.

 

Ton histoire d'EEPROM, je ne comprends pas trop pourquoi ça ne fonctionne pas, d'après ce que j'ai lu sur les deux fonction que tu utilises il n'y a pas de raison.


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

#15 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 22 septembre 2016 - 06:19

Merci de ta reponse, concernant ta premiere reponse pour tous te dire j'ai essayer mais maintenant que tu le dit, c'est à voir.
Pour ta deuxième reponse je me suis pauser la même question, il s'agit d'un Tito que j'ai trouver sur le net que j'ai essayer d'adapter.
Et enfin concernant ta dernière reponce, je ne sais pas si ça marche ou pas je n'ai pas encore mon arduino (il est sur la route) et le logiciel ne m'indique pas d'erreur, c'est juste que j'ai peur de me retrouver avec un "conflit" car je me retrouve avec 2 valeur: celle qui est tapé sur le clavier et celle qui est télécharger de l'eeprom. Bonne soiree

#16 levend

levend

    Pilier du forum

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

Posté 22 septembre 2016 - 07:42

Quelques petites remarques à propos de ton programme (je l'ai regardé un peu plus en détail :D ) :

  • Mets un "delay" après la commande de serrage, parce que là du demande aux vérins de serrer ta pièce, mais tu n'attends pas qu'elle soit serrée pour passer à la suite.
  • j'ai trouvé comment tu faisais l'acquisition des données du clavier mais pas comment tu entres ta "valeur", je me pencherai là-dessus dans le weekend
  • Je ne sais pas si tu a compris la fonction lcd.setcursor (y,x)
    if (valeur < 300);
    else (lcd.clear());
    lcd.setCursor(5,0);
    lcd.print ("ERREUR");
    lcd.setCursor(2,16);
    lcd.print ("long mini 300");
    
    if (valeur > 6000);
    else (lcd.clear());
    lcd.setCursor(5,0);
    lcd.print ("ERREUR");
    lcd.setCursor(2,1);
    lcd.print ("long max 6000");

    Premier cas, (2,16) cela signifie que tu veux écrire à partir de la 3ème colonne sur la 17ème ligne (les colonnes vont de 0 à 15 et les lignes de 0 à 1 pour un LCD 2x16 caractères).
    Dans le deuxième cas (2,1) semble déjà mieux : 3ème colonne deuxième ligne.

  • Je pense aussi que ton délais de 10s pour la bienvenue, tu finiras par le trouver un peu long :D

 

Le fait que tu réalises toi-même ton programme te sera très utile le jour où tu voudras faire une modif.


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

#17 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 22 septembre 2016 - 07:57

Merci, en effet pour le led j'ai commis une erreur, si je croit avoir compris mais je sait pas ce que j'ai fait ( surrement distrait lol ;) ) en effet 10s c'est vrai que ça fait long, c'est le temps de boire la cafe mdr. De toute façon tous les delay seront à revoir car vu que je n'ai pas encore le materiel je ne sais pas le temps qu'il faut au verins pour faire leur course.
En effet c'est bien de le faire sois même (avec beaucoup d'aide) pour les motifs comme tu dit. J'ai deja une amélioration qui me trotte derriere la tête mais bon on va deja essayer de bien faire ce programe et la machine aussi (c'est mieux mdr) . Bonne soiree

#18 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 148 messages

Posté 23 septembre 2016 - 01:02

bonjour a tous, levend c'est normal que tu ne trouvais pas, j'avais oublier un bout de code mdr, voici le nouveau code, je doit avouer que c'est un copier/coller (  http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertMoteursPAPGotoClavierLcd)j'ai essayer de comprendre quand meme, a prioris pas de probleme pour les chiffre. par contre la ou je me pose des question c'est:

- dan ma loop j'ai mis ce code:

if(touche=='#') lcd.clear();else lcd.print(touche);

et je me demande si ca efface bien ce qui a ete tapé et que l'arduino n'en tiendra plus compte ou si c'est simplement effecer de l'ecran mais toujour dand l'arduino.

 

- deuxieme chose je voudrai utiliser la touche A pour valider la mesure et donc envoyer la consigne au moteur,

while ((touche=='A') && (digitalRead(FDC1)==LOW) && (digitalRead(FDC2)==LOW) )

{
  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");
  }
}
  
  {
stepper.step((EEPROM.get(1,valeur)/0.628) - NBpas);
EEPROM.put (1,valeur);
  }

mais dois je faire autre chose car dans le code de gestion d'appuis des touche du clavier il y a ca:

 //---- calcul valeur numériques autres touches 
           if (touche_long=='A') touche_long=10;
           if (touche_long=='B') touche_long=11;
           if (touche_long=='C') touche_long=12;
           if (touche_long=='D') touche_long=13;

a mon avis a la place de 10 je doit mettre autre chose mais quoi?

 

je vous met le code entier si vous pouvez jeter un oeuil svp. bonne journee

#include <EEPROM.h>


#include <Stepper.h>
#define NombrePas 200
#define Pulse 12
#define Dir 13
Stepper stepper(NombrePas, Pulse, Dir);


#include <Keypad.h>
const byte LIGNES = 4;
const byte COLONNES = 4;

#define C1 32
#define C2 40
#define C3 42
#define C4 44
#define L1 46
#define L2 48
#define L3 50
#define L4 52

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

byte BrochesLignes[LIGNES] = {L1, L2, L3, L4};
byte BrochesColonnes[COLONNES] = {C1, C2, C3, C4};

char touche;
long valeur;
#define NBpas  valeur/0.628


 Keypad clavier = Keypad (makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );


#include <LiquidCrystal.h>
#define RS 53
#define E 51
#define D4 49
#define D5 47
#define D6 45
#define D7 47

LiquidCrystal lcd(RS, E, D4, D5, D6, D7); 



#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 (){
  lcd.begin(16,2);
  delay(10);
  lcd.setCursor(0,0);
  lcd.print("bienvenue");
  delay (5000);
  lcd.clear();
  delay(10);

  stepper.setSpeed(477);

  
  pinMode(PDR,INPUT); // poussoir deplacement recul
  pinMode(PDA,INPUT); // poussoir deplacement avance
  pinMode(PD,INPUT); // poussoir desserrage
  pinMode(PS,INPUT); // poussoir serrage 
  pinMode(PR2,INPUT); // poussoir scie 2 recul
  pinMode(PAV2,INPUT); // poussoir scie 2 avance
  pinMode(PM2,INPUT); // poussoir scie 2 montée
  pinMode(PDE2,INPUT); // poussoir scie 2 descente
  pinMode(PR1,INPUT); // poussoir scie 1 recul
  pinMode(PAV1,INPUT); // poussoir scie 1 avance
  pinMode(PM1,INPUT); // poussoir scie 1 montée
  pinMode(PDE1,INPUT); // poussoir scie 1 descente
  pinMode(BM,INPUT); // bouton manuel
  pinMode(BA,INPUT); // bouton auto
  pinMode(FDC1,INPUT); // capteur fin de course 1
  pinMode(FDC2,INPUT); // capteur fin de course 2
  pinMode(P,INPUT); // 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
}



void loop(){
  valeur=SAISIE_LONG();
   touche = clavier.getKey();
  if (touche !=NO_KEY)
    if(touche=='#') lcd.clear();else lcd.print(touche);
    
lcd.setCursor(0,0);
lcd.print("LONGUEUR MM");
lcd.setCursor (0,1);
lcd.print(valeur);

{
while ((touche=='A') && (digitalRead(FDC1)==LOW) && (digitalRead(FDC2)==LOW) )

{
  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");
  }
}
  
  {
stepper.step((EEPROM.get(1,valeur)/0.628) - NBpas);
EEPROM.put (1,valeur);
  }
  


{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("decoupe en cour");
lcd.setCursor (0,1);
lcd.print(valeur);
} 

     
{
  {
  while (digitalRead(BA)==HIGH && digitalRead(BM)==LOW) // interupteur rotatif sur position auto
  if (digitalRead(P)==HIGH) //appuis sur interupteur poussoir pedale
  digitalWrite(VS,HIGH); // serrage
  delay(1000);
  }

  {
  digitalWrite(VA1,HIGH); // avance scie 1
  digitalWrite(VA2,HIGH); // avance scie 2
  delay (1000);
  }

  {
  digitalWrite(VD1,HIGH); // descente scie 1
  digitalWrite(VD2,HIGH); // descente scie 2
  delay (1000);
  }

  {
  digitalWrite(VA1,LOW); // arret avance scie 1
   digitalWrite(VA2,LOW); // arret avance scie 2
  digitalWrite(VR1,HIGH); // recul scie 1
  digitalWrite(VR2,HIGH); // recul scie 2
  delay (1000);
  }

  {
 digitalWrite(VD1,LOW); // arret descente scie 1
  digitalWrite(VD2,LOW); // arret descente scie 2
 digitalWrite(VM1,HIGH); // montée scie 1
  digitalWrite(VM2,HIGH); // montée scie 2
  delay (1000);
  }

  {
   digitalWrite(VR1,LOW); // arret recul scie 1
  digitalWrite(VR2,LOW); // arret recul scie 2
 digitalWrite(VM1,LOW); // arret montée scie 1
  digitalWrite(VM2,LOW); // arret montée scie 2
  delay (1000);
  }

  {
   digitalWrite(VS,LOW); // arret serrage
  digitalWrite(VD,HIGH); // desserrage
  delay (1000);
  }

  {
  digitalWrite(VD,LOW); // arret desserrage 
  delay (1000);
  }
 }



{
  
{  
 while (digitalRead(BM)==HIGH && digitalRead(BA)==LOW){   //interupteur rotatif position manuel
 }

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

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

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

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

 {
 if (digitalRead(PDE1)==HIGH)  // poussoir descente scie 1
  digitalWrite(VD1,HIGH);      // verin descente scie 1
  else
   digitalWrite(VD1,LOW);      // verin descente scie 1
 }

 {
 if (digitalRead(PDE2)==HIGH)   // poussoir descente scie 2
  digitalWrite(VD2,HIGH);       // verin descente scie 1 
 else
    digitalWrite(VD2,LOW);        // verin descente scie 1 
 }

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

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

 {
 if (digitalRead(PS)==HIGH){        // bouton serrage
  digitalWrite(VS,HIGH);            // verin de serrage
  digitalWrite(VD,LOW);             // verin desserrage
 }
 }

 {
 if (digitalRead(PD)==HIGH)        // bouton de desserage
  digitalWrite(VD,HIGH);            // verin de desserage
  digitalWrite(VS,LOW);             // verin serrage
 }
 }
}

{
if ((digitalRead(BM)==HIGH && digitalRead(BA)==HIGH)or(digitalRead(BM)==LOW && digitalRead(BA)==LOW))
  lcd.setCursor (2,0);
  lcd.print("Defaut bouton");
  lcd.setCursor (3,1);
  lcd.print("Manu/Auto"); 
}
}

}


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


long 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<11) { // 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=='#') break; // sort du while si appui sur #

           //---- 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;

           //---- calcul valeur numériques autres touches 
           if (touche_long=='A') touche_long=10;
           if (touche_long=='B') touche_long=11;
           if (touche_long=='C') touche_long=12;
           if (touche_long=='D') touche_long=13;

           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

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 ---



#19 levend

levend

    Pilier du forum

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

Posté 23 septembre 2016 - 01:58

Je trouve ton code de saisie de la valeur bien long et compliqué.

Il faut que je regarde pour la saisie au clavier quel type de variable est utilisable et en fonction de ça s'il est possible de convertir d'un type à un autre sur l'arduino, et je devrais pouvoir te faire quelque chose de plus simple.


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

#20 levend

levend

    Pilier du forum

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

Posté 26 septembre 2016 - 10:22

Je m'excuse, j'avais dit que je regardais ça dans le weekend et j'ai complètement oublié :( .

Je n'ai pas trop le temps ce soir, mais promis je vas essayé sinon ce sera demain.

J'ai quelques questions :

Tu veux faire ton réglage en mode automatique, c'est ça ?

A quoi destine tu chacune des touches "A","B","C","D"," * " et " # " ?


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




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

0 members, 0 guests, 0 anonymous users