besoin d'aide ecriture switch case

Bonjour a tous et toutes,

Je suis nouveau ici et je me permet de venir demander votre aide sur une programmation
je suis en train de modifier completement une scie automatique et j'y ai intégré une arduino UNO

mes connaissances en programmation sont très limitées sur ces produits et ce language
j'ai réussi a ecrire toue le partie qui gere la partie manuelle des mouvements, en revanche, je ne parviens absolument pas a coder la partie automatique, je cherche a faire un cycle de decoupe

pour ce, je tente d'utiliser, sans succès, un switch case, j'ai essayé foultitude de combinaisons, rien a faire
le mieux que j'ai, c'est le code que je vous poste, dans lequel il semble que je reste bloqué a l'étape 1 (mes cablages et signaux electriques sont bons)

si l'un d'entre vous pouvait m'aiguiller un peu, j'aprécierais beaucoup !
merci d'avance

/*Declaration variables systeme*/
const int BP_monte_lame       = 13;
const int BP_baisse_lame      = 12;
const int BP_rotation_0       = 11;
const int BP_rotation_90      = 10;
const int selecteur_mode_auto = 9;
const int moteur_lame         = 8;
const int pompe_hydraulique   = 7;
const int voyant_cycle        = 6;
const int verin_montee_lame   = 5;
const int verin_descente_lame = 4;
const int verin_rotation_0    = 3;
const int rotation_90         = 2;
const int mise_en_pression   = 1;
const int selecteur_mode_manu = A0;
const int BP_depart_cycle     = A1;
const int capteur_lame_basse  = A2;
const int capteur_lame_haute  = A3;
const int capteur_bol_90      = A4; 
const int capteur_bol_0       = A5; 
int etape;
int cycle_en_cours;
int mode_jog;



void setup()
/*Affectation des E/S ARDUINO*/
{
  pinMode (BP_monte_lame,       INPUT);
  pinMode (BP_baisse_lame,      INPUT);
  pinMode (BP_rotation_0,       INPUT);
  pinMode (BP_rotation_90,      INPUT);
  pinMode (selecteur_mode_auto, INPUT);
  pinMode (moteur_lame,         OUTPUT);
  pinMode (pompe_hydraulique,   OUTPUT);
  pinMode (mise_en_pression,    OUTPUT);
  pinMode (verin_montee_lame,   OUTPUT);
  pinMode (verin_descente_lame, OUTPUT);
  pinMode (verin_rotation_0,    OUTPUT);
  pinMode (rotation_90,         OUTPUT);
  pinMode (voyant_cycle,        OUTPUT);
  pinMode (selecteur_mode_manu, INPUT);
  pinMode (BP_depart_cycle,     INPUT);
  pinMode (capteur_lame_basse,  INPUT);
  pinMode (capteur_lame_haute,  INPUT);
  pinMode (capteur_bol_90,      INPUT);
  pinMode (capteur_bol_0,       INPUT);
}

void loop()
{
 /*selecteur en mode automatique*/
             if ((digitalRead (selecteur_mode_auto) == HIGH)&&(digitalRead (BP_depart_cycle) == HIGH))
          {
            switch (etape)
            {
            /*-----------ETAPE 0-----------*/
            
             case 0:
             digitalWrite(mise_en_pression,HIGH);        
             digitalWrite(pompe_hydraulique,HIGH);
             digitalWrite(verin_montee_lame,HIGH);
             if (digitalRead ( capteur_lame_haute)==LOW)
               {
               etape=1;
               }          
            
            break;

            /*-----------ETAPE 1-----------*/
            case 1:
            digitalWrite(verin_montee_lame,LOW);         /*stop montee lame*/
            digitalWrite(verin_rotation_0,HIGH);         /*rotation bol a 0*/
            if (digitalRead ( capteur_bol_0)==HIGH)
                {            
                etape=2;
                }
            break;
                         
            /*-----------ETAPE 2-----------*/
            case 2:
            digitalWrite(verin_rotation_0,HIGH);         /*rotation 0 maintenue*/
            digitalWrite(moteur_lame,HIGH);              /*rotation bol a 0*/
            digitalWrite (verin_descente_lame,HIGH);     /*descente lame*/
            if (digitalRead ( capteur_lame_basse)==HIGH)
                {
                etape=3;
                }
            break;
            
            /*-----------ETAPE 3-----------*/
            case 3:
            digitalWrite(verin_rotation_0,HIGH);          /*rotation 0 maintenue*/
            digitalWrite(moteur_lame,LOW);                /*arret lame*/
            digitalWrite(verin_descente_lame,LOW);        /*arret descente*/
            digitalWrite (verin_montee_lame,HIGH);        /*montée lame*/
            if (digitalRead ( capteur_lame_haute)==HIGH)
                {
                etape=4;
                }
            break;
            
            /*-----------ETAPE 4-----------*/
            case 4:
            digitalWrite(rotation_90,HIGH);               /*rotation 90*/
            digitalWrite(moteur_lame,LOW);                /*arret lame maintenu*/
            digitalWrite(verin_descente_lame,LOW);        /*arret descente maintenu*/ 
            if (digitalRead ( capteur_bol_90)==HIGH) 
                {                
                etape=5;
                }
            break;
            
            /*-----------ETAPE 5-----------*/
            case 5:
            digitalWrite(rotation_90,HIGH);               /*rotation 90 maintenue*/
            digitalWrite(moteur_lame,HIGH);               /*demarage lame*/
            digitalWrite(verin_descente_lame,HIGH);       /*demarage descente*/
            if (digitalRead ( capteur_lame_basse)==HIGH)  /*lame en bas*/
                {
                etape=6;
                }
            break;
            
            /*-----------ETAPE 6-----------*/
            case 6:
            digitalWrite(rotation_90,HIGH);               /*rotation 90 maintenue*/
            digitalWrite(moteur_lame,LOW);                /*arret lame*/
            digitalWrite(verin_descente_lame,LOW);        /*arret descente*/
            digitalWrite (verin_montee_lame,HIGH);        /*montée lame*/
            if (digitalRead ( capteur_lame_haute)==HIGH)
                {
                etape=7;
                }
            break;

            /*-----------ETAPE 7-----------*/            
            case 7:
            digitalWrite(mise_en_pression,LOW);        
            digitalWrite(pompe_hydraulique,LOW);
            etape=0;
            
            break;
                                                
          }
         }
 }

Sujet déplacé...

Salut zygo4619,
Avant d'aller plus loin, tu vas avoir des soucis
La pin 1 est utilisée pour le dialogue serie rx/tx.
La pin 13 est utilisée en sortie pour la led du uno.

Ton code me semble bon, tu devrais mettre un Serial.print dans le bloc du if du case de l'étape qui bloque pour vérifier que la condition est bien réalisée

etape n'est pas initialisée

Arzou:
Avant d'aller plus loin, tu vas avoir des soucis
La pin 1 est utilisée pour le dialogue serie rx/tx.
La pin 13 est utilisée en sortie pour la led du uno.

il n'utilise pas Serial donc ce n'est pas un souci à l'exécution (éventuellement il faudrait débrancher ce qui est dessus lors du chargement de code, je ne sais pas si Tx est vraiment utilisé lors du chargement), et un bouton pression sur la pin 13, même si elle a une LED associé ça va fonctionner

biggil:
etape n'est pas initialisée

si c'est une variable globale donc initialisée par le compilateur à 0

Si vous restez bloqué à l'étape 1, c'est que soit vous ne rentrez plus dans le switch/case parce que la condition dans le if n'est pas vraie

  if ((digitalRead (selecteur_mode_auto) == HIGH) && (digitalRead (BP_depart_cycle) == HIGH))

ou alors que ce qui vous permet de passer à l'étape 2 ne se réalise pas

        if (digitalRead ( capteur_bol_0) == HIGH)
        {
          etape = 2;
        }

==> pour tracer cela imprimez des infos sur la console série serait bien mais cela veut dire (cf remarque de @Arzou) que vous devez mettre ce qui est sur la pin 1 ailleurs (mise_en_pression) mais il n'y a plus vraiment de pins dispos si vous êtes sur UNO...

Bonjour,

et merci a tous pour vos messages

pour l'entrée 1 et 16, en effet, je les ai dejà utilisées en E/S numeriques sans soucis sur d'autres projets, ça fonctionne
je ne connais pas la fonction print sur le serial, on ecrit un print et un message s'écrit quelque part j'imagine, une console supplémentaire ou c'est possible sur le pc ?
ca m'aiderait de savoir dans quelle conditions je bloque, mes signaux electriques etants cohérants

je peux debrancher la pin1 pour faire des essais et modifier le programme (j'ai fait a l'economie , la uno suffisait a mon appli, mais aucune marge de manoeuvre envisageable en effet !) :smiley:

je vais regarder de plus pres cet histoire de print, je pense que ca va m'aider

je ne manquerais pas de revenir vous soliciter je pense, j'ai vraiment du mal a assimiler ce language

je vous remercie tous pour le temps que vous avez pris a me lire !

zygo4619:
je peux debrancher la pin1 pour faire des essais et modifier le programme (j'ai fait a l'economie , la uno suffisait a mon appli, mais aucune marge de manoeuvre envisageable en effet !) :smiley:

Bonjour,
il y a encore la solution de mettre les 4 BP sur une seule entrée analogique avec des résistances différentes comme ceci

zygo4619:
je ne connais pas la fonction print sur le serial, on ecrit un print et un message s'écrit quelque part j'imagine, une console supplémentaire ou c'est possible sur le pc ?

:o :o

regarde les exemples dans l'IDE ce sera un bon debut