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!!!
![]()
//////////////
#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();
}