ISTRUZIONE SWITCH CASE E MOVIMENTAZIONE EASY DRIVER

SALVE RAGAZZI CREDO DI AVER QUASI COMPLETATO L'IDE, LA DICHIARAZIONE DEI CASE L'HO ESEGUITA IN MODO CORRETTO? INOLTRE LA MOVIMENTAZIONE DEI MOTORI ATTRAVERSO L'EASY DRIVER E PULSANTI IN MANUALE E' STATA SCRITTA IN MODO CORRETTO ( LE POSIZIONI DEGLI STEP ALL'INTERNO DELL'AUTOMATICO SONO CASUALI NON PROVATI QUINDI) GRAZIE PER LA DISPONIBILITA'

IDE:

#include <Stepper.h>

const int stepsPerRevolution1 = 200;
const int stepsPerRevolution2 = 200;
Stepper myStepper1(200, 9, 10);
Stepper myStepper2(200, 3,4);
int pos1=0;
int pos2=0;
int stepCount1 = 0;
int stepCount2 = 0;
int stepmot1=10;
int stepmot2=4; //pin che va alla easy driver che controlla gli step del motore2
int dirmot1=9; //pin che va alla easy driver che controlla la direzione del motore1
int dirmot2=3; //pin che va alla easy driver che controlla la direzione del motore2
int destra1=14;
int destra2=21;
int sinistra1=15;
int sinistra2=20;


int PulsManuale=1;
int PulsAutomatico=0;
int StatoAutoMan=0;//auto=1, man=0
int ledautomatico=2;
int pulaccenslaser=32;


int PinA=31; //primo pin che arriva dal plc 
int PinB=33; //secondo pin che arriva dal plc
int PinC=35; //terzo pin che arriva dal plc
int PinD=37; //quarto pin che arriva dal plc
int PinE=39; //quinto pin che arriva dal plc
int PinF=41; //sesto pin che arriva dal plc
int PinG=43; //settimo pin che arriva dal plc
int PinH=45; //ottavo pin che arriva dal plc
int laser=30; //pin che va collegato al relè per alimentazione laser
int ConvertToInt=0; 
int ConvertToInt1=0;
int conversione(bool BIT0,bool BIT1 ,bool BIT2,bool BIT3,bool BIT4,bool BIT5,bool BIT6,bool BIT7);
bool BIT0=0,BIT1=0,BIT2=0,BIT3=0,BIT4=0,BIT5=0,BIT6=0,BIT7=0; // assegnazione come variabile booleana a bit
void setup() 
  {
      Serial.begin(9600);


      myStepper1.setSpeed(50);
      myStepper2.setSpeed(50);
        
      pinMode(stepmot1, OUTPUT);
      pinMode(stepmot2, OUTPUT);
      pinMode(dirmot1, OUTPUT);
      pinMode(dirmot2, OUTPUT);

    
      pinMode(PulsManuale, INPUT);
      pinMode(PulsAutomatico, INPUT);
      pinMode(ledautomatico, OUTPUT);
      
      
      pinMode(destra1, INPUT);
      pinMode(destra2, INPUT);
      pinMode(sinistra1, INPUT);
      pinMode(sinistra2, INPUT);

      pinMode(PinA, INPUT); //dichiarazione pin come input
      pinMode(PinB, INPUT); //dichiarazione pin come input
      pinMode(PinC, INPUT); //dichiarazione pin come input
      pinMode(PinD, INPUT); //dichiarazione pin come input
      pinMode(PinE, INPUT); //dichiarazione pin come input
      pinMode(PinF, INPUT); //dichiarazione pin come input
      pinMode(PinG, INPUT); //dichiarazione pin come input
      pinMode(PinH, INPUT); //dichiarazione pin come input
      pinMode(laser, OUTPUT); //dichiarazione pin come uscita
      pinMode(pulaccenslaser, INPUT); //dichiarazione pin come input

      digitalWrite(dirmot1,LOW); //assegnazione stato zero come valore inziale
      digitalWrite(stepmot2,LOW); //assegnazione stato zero come valore iniziale
      digitalWrite(dirmot2,LOW); //assegnazione stato zero come valore iniziale
      digitalWrite(stepmot1,LOW); //assegnazione stato zero come valore iniziale
 
      digitalWrite(ledautomatico, LOW);
      
     
      
    
    }

void loop()
    
{ 

  

//Gestione della modalità di funzionamento Automatica e Manuale
  if (digitalRead(PulsManuale) == 1)
   {
       digitalWrite(ledautomatico,LOW);//funzionamento in manuale 
       StatoAutoMan=0;    
   }
   else  if (digitalRead(PulsAutomatico) == 1)
   {
    
     digitalWrite(ledautomatico,HIGH);//funzionamento in AUTOMATICO 
       StatoAutoMan=1;
            
   }

   
//*****************************************************************************
if (StatoAutoMan==1){//inizio gestione in automatico
         
            BIT0=digitalRead(PinA); //assegnazione bit a pin che arriva dal plc
            BIT1=digitalRead(PinB); //assegnazione bit a pin che arriva dal plc
            BIT2=digitalRead(PinC); //assegnazione bit a pin che arriva dal plc
            BIT3=digitalRead(PinD); //assegnazione bit a pin che arriva dal plc
            BIT4=digitalRead(PinE); //assegnazione bit a pin che arriva dal plc
            BIT5=digitalRead(PinF); //assegnazione bit a pin che arriva dal plc
            BIT6=digitalRead(PinG); //assegnazione bit a pin che arriva dal plc
            BIT7=digitalRead(PinH); //assegnazione bit a pin che arriva dal plc
           ConvertToInt1=conversione(BIT0,BIT1,BIT2,BIT3,BIT4,BIT5,BIT6,BIT7);  //richiamo sottoprogramma conversione e assegnazione valore inizale a zero
          
           if (ConvertToInt1 == 0)
           {
             digitalWrite(laser,LOW);
               pos1;
               pos2; 
            
            }
           else 
                            
            switch(ConvertToInt1) //comando switch
              {
               
                
          case 1:  ConvertToInt1 == 40; 
           
                  {
                    myStepper1.step(32);
                     myStepper2.step(40);
                   digitalWrite(laser,HIGH);
                  }
                break;
          
           
              case 2: ConvertToInt1 == 55;
                  {
                   myStepper1.step(50);
                     myStepper2.step(30);
                   digitalWrite(laser,HIGH);
                  }
                break;
             
             
         
              case 3: ConvertToInt1 == 80;
                  {
                     myStepper1.step(20);
                     myStepper2.step(45);
                   digitalWrite(laser,HIGH);
                  }
                break;
                default:;
             }//fine switch
          
 }//fine gestione in automatico


//*****************************************************************************
if (StatoAutoMan==0){//inizio gestione in manuale
        
      digitalRead(pulaccenslaser);
      digitalRead(destra1);
      digitalRead(destra2);
      digitalRead(sinistra1);
      digitalRead(sinistra2);

      
if (digitalRead(sinistra1) == 1)
{
 myStepper1.step(4);

  Serial.print("steps:" );

  Serial.println(stepCount1);
  stepCount1++;
 delay(10);
}

 if (digitalRead(destra1) == 1)
{
 myStepper1.step(4);

  Serial.print("steps1:" );

  Serial.println(stepCount1);
  stepCount1--;
 delay(10);
}
     
if (digitalRead(sinistra2) == 1)
{
 myStepper2.step(4);

  Serial.print("steps2:" );

  Serial.println(stepCount2);
  stepCount2++;
 delay(10);
}


 if (digitalRead(destra2) == 1)
{
 myStepper2.step(4);

  Serial.print("steps3:" );

  Serial.println(stepCount2);
  stepCount2--;
 delay(10);

 }  


}//fine gestione in manuale

 
 }



  
int conversione(bool BIT0,bool BIT1 ,bool BIT2,bool BIT3,bool BIT4,bool BIT5,bool BIT6,bool BIT7) //dichiarazione variabile booleana a bit

  {
    ConvertToInt=(BIT0*(1))+(BIT1*(2))+(BIT2*(4))+(BIT3*(8))+(BIT4*(16))+(BIT5*(32))+(BIT6*(64))+(BIT7*(128)); //conversione da binario a digitale
    return ConvertToInt;
  }

@paolo, per favore, il maiuscolo nei forum equivale ad urlare. Non usarlo per tutto quello che scrivi.

No:

switch(ConvertToInt1) //comando switch
              {
               
                
          case 1:  ConvertToInt1 == 40;

Intanto un'istruzione tipo ConvertToInt1 == 40 da sola è completamente inutile, essendo un test andrebbe inserita in un contesto che ne richiede uno (if, while, ecc...). Se invece volevi asegnare 40 alla variabile, allora c'è un = di troppo. Se invece ancora volevi mettere una sorta di commento, ha poco senso, perché se entri in quel ramo dello switch, ConvertToInt1 vale 1, non 40.

Oltre a questo:

digitalRead(pulaccenslaser);

(e simili a seguire)

Dove va a finire il valore che leggi, secondo te? Non lo metti in nessuna variabile...

Infine mi unisco alla richiesta di nid di non urlare, per favore.

mi scuso non ero a conoscescenza della questione delle maiuscole, in ogni caso, io vorrei assegnare dei valori al 'case' cosi poi da avere ad una lettura del ConvertToInt1 ed una corrispondenza con quel case ed un relativo posizionamento dato che c'è l'istruzioni dei passi motore , come di consiglieresti di procedere?

case 40:
  ...
  break;
case 55:
  ...
  break;
....

ma la dichiarazione del case come la faccio cioè al case dovrei assegnare un numero intero corrispondente al numero letto nella coversione

inoltre la movimentazione in manuale è corretta?? grazie

Ci riprovo:

switch (pippo) {
 case 1:
   // Se arrivi qua pippo vale 1
   break;
 case 7:
   // Se arrivi qua pippo vale 7
   break;
 case 4:
   // Se arrivi qua pippo vale 4
   break;
 default:
   // Se arrivi qua pippo NON vale né 1, né 4, né 7
   break;
}

(Nota che non serve trattare a parte il caso in cui valga 0 come hai fatto tu, puoi tranquillamente mettere un case 0).

La parte manuale sembra corretta, per quel che posso capire.

grazie mille procedo con la correzione in ogni caso grazie mille della pazienza e della disponibilità