AIUTOOOO!!! PROBLEMA PROGETTO MATURITà

Salve, scusate se non mi sono presentato prima ma sono letteralmente disperato, a bree avrò l'esame di maturità e ho un problema con il progetto.
il mio progetto d'esame p un nastro trasportatore, (che va avanti tramite un motore passo passo) il mio problema è che quando i blocchetti passano sotto (così sono collovati) i sensori non viene effettuata la lettura, mi spiego meglio:

  • il primo sensore dovrebbe in presenza di materiale ferromagnetico interrompere tutto il processo;
  • il secondo è un sensore di prossimità, utilizzato come conta pezzi, che al passare di un pezzo lo salva in memoria;

il problema è che quando il programma entra nel loop del pilotaggio del motore mi ignora completamente la lettura dei sensori... come posso fare? vi allego il progrmma.
vi prego rispondete in fretta è urgentissimo!!! :sob: :sob: :sob:

//////////////
#define vcc 9 // Alimentazione
#define eneb 10 // Eneable
#define direc 11 // Direzione Stepper
#define hf 12 // Half/Full Motor
#define ck 13 // Clock
//#define gnd 14 //////////////
//
int stacker1 = 2; // stacker (-)
int stacker2 = 4; // stacker (+)
//////////////

float sensor1Value;
float sensor1;
float sensor2Value;
float sensor2;

int pezzicaricati;
int ciclo;
int pilaA;
int pilaB;

void setup()

{
Serial.begin(9600);

pinMode ( vcc , OUTPUT );
pinMode ( direc , OUTPUT );
pinMode ( hf , OUTPUT );
pinMode ( ck , OUTPUT );
pinMode ( eneb , OUTPUT );

pinMode(stacker1, OUTPUT);
pinMode(stacker2, OUTPUT);

digitalWrite ( direc , LOW ); // antiorario
//digitalWrite ( direc, HIGH ); // orario
//digitalWrite ( hf , HIGH ); // 1\2 step
digitalWrite ( hf , LOW ); // 1 step

pilaA = 0;
pilaB = 0;
pezzicaricati = 0;

analizza();
stampasensori();

Serial.println ("1* carro");
digitalWrite(stacker1, LOW);
digitalWrite(stacker2, HIGH);

digitalWrite ( eneb , LOW );
Serial.println ("1* avanti");

avanti1();
digitalWrite ( eneb , LOW );
}
void loop()
{
analizza();
stampasensori();
while (digitalRead(sensor2) != 0.0)
{

if (pilaB <= 3)
{
carica();
analizza();
}

Serial.println ("nessun passaggio");

analizza();

for (int h = 0; h < 20; h++)
{
analizza();
avanti();
analizza();
}
analizza();
stampasensori();

while (sensor1 >= 4)
{
digitalWrite ( eneb , LOW );
Serial.println ("RIMUOVERE METALLO");
analizza();
if (sensor1 <= 4)
{
pilaB--;
}
}

analizza();
digitalWrite ( eneb , HIGH );
}

////////// FINE WHILE

while (digitalRead(sensor2) == 0.0)
{
digitalWrite ( eneb , LOW );
/* Serial.println ("STOP");
Serial.println ("ci siamo è passato");

pezzicaricati++;
while (digitalRead(sensor2) == 0.0)
{
analizza();
avanti2();
analizza();
}
delay(3000);*/
analizza();
stampasensori();
// pilaB--;
}
}
/////////////FINE LOOP////////////

void carica()
{

Serial.println ("LAVORO");
Serial.println (pilaB);
Serial.println ("Pezzi smistati: ");
Serial.println (pezzicaricati);

if (pilaB <= 3)
{
digitalWrite(stacker1, HIGH);
digitalWrite(stacker2, LOW); // INDIETRO
delay(1000);
digitalWrite(stacker1, LOW);
digitalWrite(stacker2, HIGH); // AVANTI
delay(1500);

pilaB++;
pilaA++;
}
}
void avanti()
{
for (int c = 0; c < 10; c++)
{
analizza();
digitalWrite ( direc , HIGH );
digitalWrite ( eneb , HIGH );
digitalWrite ( ck , HIGH );
analizza();
delay ( 8 ) ;
digitalWrite ( ck , LOW );
delay ( 8 );
analizza();

}
}
void avanti1()
{
for (int c = 0; c < 100; c++)
{
analizza();
digitalWrite ( direc , HIGH );
digitalWrite ( eneb , HIGH );
digitalWrite ( ck , HIGH );
analizza();
delay ( 8 ) ;
digitalWrite ( ck , LOW );
delay ( 8 );
analizza();

}
}
void analizza()
{
sensor1Value = analogRead(A0);
sensor1 = sensor1Value * (5.0 / 1023);
sensor2Value = analogRead(A2);
sensor2 = sensor2Value * (5.0 / 1023);
}

void stampasensori()
{
Serial.println ("Magnete:");
Serial.println (sensor1);
Serial.println ("Passaggio:");
Serial.println (sensor2);
}

void avanti2()
{
analizza();
digitalWrite ( direc , HIGH );
digitalWrite ( eneb , HIGH );
digitalWrite ( ck , HIGH );
analizza();
delay ( 8 ) ;
digitalWrite ( ck , LOW );
delay ( 8 );
analizza();

}

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Ho una mezza idea che hai una confusione in testa da paura.

Leggi da A2 (analogico) tramite funzione analizza() e un calcoletto e scrivi risultato in sensor2.
Quindi li dentro hai un float.
Poi nel codice hai questo while:

while (digitalRead(sensor2) != 0.0)

Primo, una digitalRead() tira fuori o 0 o 1 e non un float, secondo stai leggendo da un pin calcolato in precedenza!! :o

Ah ho capito... Comunque ho risolto.. Ho riscritto il programma (dopo lo posto così se vi va potete correggerlo) più che altro ho una domanda: c'è una finzione o qualcosa che mi permetta di far andare avanti il motore in parallelo? Nel senso che non debba per forza restare all'interno di un ciclo for come in questo caso? Perché se entra nel ciclo for mi salta la lettura dei sensori

No. In Arduino non hai un sistema operativo tipo Windows o Linux che permette il parallelismo di più processi.
Lo devi fare tu. Di solito si usa un timer della MCU. Puoi vedere la funzione millis() e questo tutorial:
http://www.leonardomiliani.com/2013/programmiamo-i-compiti-con-millis/

Molte volte conviene creare una macchina a stati finiti. Non semplicissimo ma neppure troppo complicato:
http://www.lucadentella.it/2013/04/30/macchina-a-stati-finiti-e-arduino/