Stop motion per Dolly II

Un utente del blog, fotografo professionista, mi ha suggerito di aggiungere una funzionalità in più al dolly: lo stop motion.

stop motion

E’ una funzione che interrompa tutto il ciclo qualora lo hai avviato per errore o tu vogli a interrompere il programma per riprogrammarlo.

Ho trovato interessante il suggerimento e ho lavorato qualche ora per realizzarlo e provarlo.

Nulla di impossibile la soluzione finale è molto più semplice di quello che inizialmente avevo immaginato.

Devi modificare solo la funzione go() presentata nel progetto:

void Go()
{
  lcd.print( "Avvio del dolly" );
  lcd.clear();

  for ( int sc=0; sc <= scatti; sc++ )
  {
    if ( analogRead( conf ) > 1000) { 
      lcd.clear();
      lcd.print( "Stop Motion" );
      delay( 1000 );
      return;
    }

    lcd.setCursor(0, 0);
    lcd.print( "scatto: " );
    lcd.setCursor(8, 0);
    lcd.print( sc );    

    for ( int ng=1; ng <= ngiri; ng++ )
    {
      if ( analogRead( conf ) > 1000) { 
        lcd.clear();
        lcd.print( "Stop Motion" );
        delay( 1000 );
        return;
      }

      lcd.setCursor(0, 1);
      lcd.print( "passo: ");
      lcd.setCursor(8, 1);
      lcd.print( ng );    

      gira( nFase );
      nFase++;
      if ( nFase > 4 ) nFase = 1;      

      delay( interv * 1000 );
    }

    digitalWrite( pinLed, HIGH );
    delay( 1000 );
    digitalWrite( pinLed, LOW );

  }

}

a voler essere pignolo la modifica riguarda l’inserimento delle linee:

linea 08 ( in questo sketch ): in cui verifichi che il pulsante di conferma sia stato premuto, in tal caso il valore letto sul pin analogico corrispondente passa da 0 a 1023 e la condizione di if è verificata;

linea 09: pulisci ogni scritta sul display;

linea 10: scrivi la frase “Stop Motion” per indicare anche a video che l’interruzione è dovuta alla pressione del pulsante di comando;

linea 11: attendi 1 secondo prima di proseguire, è una sorta di tempo di annullamento della pressione del pulsante conferma, in quanto la pressione dello stesso per eseguire lo “Stop Motion” se non rilasciato in tempo si trasforma in conferma, poiché la funzione Go() di fatto si ritorna al menu “Avvio” la pressione del pulsante conferma causa la ripartenza del ciclo di avvio.

linea 12: l’uso del comando return assicura che la funzione Go() sia interrotta e il controllo ritorni alla funzione loop();

linee 22-26: sono identiche alle linea 08-12.

Perché basta inserire queste linee identiche in questi punti? l’origine di questa scelta risiede nell’osservazione dell’intera funzione, i due cicli di for, l’uno annidato nell’altro, interrompono l’azione del microcontrollore, ossia trattengono l’esecuzione del codice fino al loro completamento, quindi qualsiasi azione di stop va eseguita al loro inetrno.

Spero che questa funzionalità sia utile anche a te che hai letto il mio tutorial fino alla fine, se non per il progetto Dolly almeno imparando qualche trucco di programmazione su Arduino.

Buon divertimento.

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/stop-motion-per-dolly.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.