AIUTOO!! consiglio comando da PLC ad arduino Due o mega

ciao ragazzi sono un softwarista che si sta affacciando alla ''serie'' arduino, dovrei comandare due motori passo passo collegati uno nella parte inferiore e uno nella parte laterale, di un polso che muove un laser, le movimentazioni e quindi i passi saranno gestiti da dei comandi che arrivano dal plc attraverso 8 relè che mandano un segnale ad 1 o a 0, e quindi un numero binario che verrè convertito in intero/reale che indicherà ad esempio un oggetto e ad agnuno saranno connesse delle quote (passi), prese in precedenza, che saranno inviate ai motori per il posizionamento. allego l'ide che ho cominciato, vorrei sapere la conversione da binario ad intero è stata eseguita in modo corretto? riuscite a darmi una mano nella gestione di due easy driver che comandano i motori, grazie. quando non si riceve nessun numero e quindi nessun oggetto vorrei che il laser fosse spento e che i motori si trovassero in una quota zero data da aluni finecorsa meccanici collegati a dei pin arduino ancora da definire grazie per la comprensione

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 ConvertToInt=0; 
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() 
{
   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
   
   digitalWrite(31,LOW); //assegnazione stato zero come valore iniziale
   digitalWrite(33,LOW); //assegnazione stato zero come valore iniziale
   digitalWrite(35,LOW); //assegnazione stato zero come valore iniziale
   digitalWrite(37,LOW); //assegnazione stato zero come valore iniziale
   digitalWrite(39,LOW); //assegnazione stato zero come valore iniziale
   digitalWrite(41,LOW); //assegnazione stato zero come valore iniziale
   digitalWrite(43,LOW); //assegnazione stato zero come valore iniziale
   digitalWrite(45,LOW); //assegnazione stato zero come valore iniziale

   int ConvertToInt=0; //richiamo sottoprogramma conversione e assegnazione valore inizale a zero
}

void loop() 
{
 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
 switch(conversione(BIT0,BIT1,BIT2,BIT3,BIT4,BIT5,BIT6,BIT7)) //comando switch
   {
     case 1:
       {
         
       }
     break;
     case 2:
       {
         
       }
     break;
     case 3:
       {
         
       }
     break;
     default:;
   };

 
}
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*(2^0))+(BIT1*(2^1))+(BIT0*(2^2))+(BIT1*(2^3))+(BIT0*(2^4))+(BIT1*(2^5))+(BIT0*(2^6))+(BIT1*(2^7)); //conversione da binario a digitale
}

NON USERO' LA SERIALE``

Ciao,
essendo il tuo primo post, ti chiederei di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione … possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il REGOLAMENTO

… poi, in conformità al suddetto regolamento, punto 7, edita (in basso a destra del post, bottone More → Modify) il tuo post e racchiudi il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra). Grazie. :slight_smile:

Guglielmo

Guarda che se usi una porta completa ( vedi Pinout ) , fai prima a fare cosi

void setup() {
  DDRA = B00000000 ; // Imposta i pin da 22(LSB) a 29(MSB) come input
 }

void loop() {
 byte val = PINA ; // legge la porta.
}

PortManipulation

dimenticavo non userò la seriale

@paolo_tudisco: cortesemente, come ti ho già chiesto, edita (in basso a destra del post, bottone More → Modify) il tuo post e racchiudi il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra). Grazie.

Guglielmo