Controllo motore passo passo. Problema con pin che rimane HIGH

Buon giorno.
Premessa: ho una scheda "UNO" (mi hanno detto che è un clone di ARDUINO UNO).
Ho un problema con uno sketch che sto scrivendo. Si tratta di una rampa di accelerazione per pilotare un motore passo passo a 4 fasi. Carico le istruzioni, il ciclo inizia, il motore gira ed accelera normalmente ma quando il ciclo termina ed il motore si è fermato, il secondo pin della sequenza di pilotaggio rimane a livello logico 1 e il motore fa un passo in più o in meno. L'ho provato anche scollegando tutto (motore, resistori ecc.) e misurando il livello logico con un multimetro: succede la stessa cosa. Se uso 4 pin diversi dai precedenti non cambia nulla: il secondo rimane sempre on. Al termine del ciclo ho anche inserito una sequenza aggiuntiva per riportare a LOW tutti i pin ma quel pin rimane sempre a livello logico alto. Se carico un altro sketch (vuoto o con qualunque altra sequenza di istruzioni) torna tutto a posto. E'possibile, secondo voi, che ci sia una qualche sorta di incompatibilità con il clone in mio possesso o che ci sia un bug nell'IDE?
Grazie e buona domenica a tutti.

Antonio

  int rit=200; 			// variabile decrementale tra un impulso ed il successivo (ms) - utilizzata nel ciclo di accelerazione
  int ritardo=rit; 		// variabile ritardo tra un impulso ed il successivo (ms) - utilizzata nel ciclo principale
  int count=0; 			// variabile incrementale per controllo "distanza" percorsa
  int distanza=480; 		// variabile di verifica "distanza": se è superiore ad un dato valore avvio accelerazione
  int dist=distanza;		// "distanza" da percorrere utilizzata nel ciclo di principale (1 unità = 4 step)
void setup() {
//  Serial.begin(9600);
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
}

void loop() {
  while (count < dist+1) {
    if (distanza>240) { 	// verifica se distanza è maggiore di 240...
      Accelera();		// ... se sì, avvio accelerazione.
      }
    digitalWrite(5,LOW);	// fase 4 OFF
    digitalWrite(2,HIGH);	// fase 1 ON
    delay(ritardo);		// attendi
    digitalWrite(2,LOW);	// fase 1 OFF
    digitalWrite(3,HIGH);	// fase 2 ON
    delay(ritardo);		// attendi
    digitalWrite(3,LOW);	// fase 2 OFF
    digitalWrite(4,HIGH);	// fase 3 ON
    delay(ritardo);		// attendi
    digitalWrite(4,LOW);	// fase 3 OFF
    digitalWrite(5,HIGH);	// fase 4 ON
    delay(ritardo);		// attendi
    count++;			// incremento cicli eseguiti (step eseguiti = cicli eseguiti * 4)
  }
  digitalWrite(2,LOW);		//
  digitalWrite(3,LOW);		// ciclo aggiuntivo per
  digitalWrite(4,LOW);		// disattivazione pins
  digitalWrite(5,LOW);		//
//  Serial.println(ritardo);
}
int Accelera() {		// sub rampa di accelerazione
  for (int i=200; i>5; i--) {	// inizio ciclo per passare da 200ms/impulso a 5 ms/impulso (totale: 195 cicli)
    digitalWrite(5,LOW);	// fase 4 OFF
    digitalWrite(2,HIGH);	// fase 1 ON
    delay(rit);			// attendi
    rit--;			// decrementa ritardo di 1ms
    digitalWrite(2,LOW);	// fase 1 OFF
    digitalWrite(3,HIGH);	// fase 2 ON
    delay(rit);			// attendi
    rit--;			// decrementa ritardo di 1ms
    digitalWrite(3,LOW);	// fase 2 OFF
    digitalWrite(4,HIGH);	// fase 3 ON
    delay(rit);			// attendi
    rit--;			// decrementa ritardo di 1ms
    digitalWrite(4,LOW);	// fase 3 OFF
    digitalWrite(5,HIGH);	// fase 4 ON
    delay(rit);			// attendi
    rit--;			// decrementa ritardo di 1ms
  }
  digitalWrite(5,LOW);		// fase 4 OFF
  distanza=0;			// azzeramento variabile per impedire il ripetersi del ciclo
  count=196;			// "distanza" percorsa durante l'accelerazione
  ritardo=rit;			// ritardo tra un impulso e il successivo quando il motore è a regime (5ms)
}

Ho risolto. Il problema era nella scheda, l'ho sostituita ed ora va tutto bene (a parte qualche aggiustamento allo sketch). Come si fa a chiudere il post?

>AntonioCC65: Buonasera, essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Per il thread, non ti preoccupare ... finisce in coda e piano piano scompare nei thread passati.

Buon giorno gpb01,
ho fatto entrambe le cose.
Grazie per i suggerimenti e le delucidazioni. :slight_smile: