Sviluppare un programma

L'ambiente di programmazione grafica Tinker CAD (GPE) è limitato allo sviluppo della sola funzione loop(), mentre la setup() viene implementata come predefinita. Questa piccola limitazione può essere superata proseguendo lo sviluppo esclusivamente in C (senza CodeBlocks), soluzione che potrebbe essere accettabile per applicazioni pratiche di maggiore complessità. Il GPE contiene 6 tipi di operazioni “CodeBlocks”, codificate con colori diversi (Fig. 41a): variabili, controllo, output, input, matematica (include il calcolo della verifica di una condizione, le cosiddette operazioni booleane, utilizzate all'interno delle istruzioni di controllo), notazione (commenti). Le istruzioni di diverso tipo vengono combinate tra loro in base alle loro forme.

Il programma che muove i servo-motori (“dita”) è composto da una parte minore e due principali (Fig. 41b), separate da commenti in grigio:

  • Impostazione della velocità di rotazione (variabile rotationStep, rosa) – durante il trasferimento del programma su un vero UNO, questa istruzione può essere spostata nella procedura setup().

  • Fornire istruzioni a ciascun servo-motore per ruotare in una determinata posizione – 5 output (blu), dove bisogna prestare attenzione a specificare il corretto pin di uscita (sulla scheda UNO) e la posizione (variabili diverse, rosa). Poiché queste variabili sono impostate di default a 0 durante la setup(), non accade nulla dopo l'accensione finché non viene premuto un pulsante.

  • Controllo delle coppie di pulsanti e ricalcolo della posizione dei servo-motori. Questa parte viene ripetuta (solo una visibile in Fig. 41b) 5 volte per ciascun set di 2 pulsanti e un servo-motore.

    • Lo stato (tensione) del pulsante “Up” viene letto da un ingresso analogico. Il range di lettura possibile va da 0 a 1023 unità, corrispondenti rispettivamente a 0 e 5 Volt. Bisogna prestare attenzione a specificare il corretto pin di ingresso sulla scheda UNO.

    • Se il valore letto è superiore a 256 (1,25V), allora la posizione di uno specifico servo-motore deve essere ricalcolata, aumentandola di un valore pari a rotationStep;

    • La posizione calcolata non deve superare i 180°. Se ciò accade, viene impostata a questo valore limite.

    • Se il pulsante “Up” non è stato premuto, viene eseguito il ramo else.

    • Lo stato del pulsante “Down” viene letto da un ingresso digitale (0 = No, oppure 1 = Sì). Bisogna prestare attenzione a specificare il corretto pin di ingresso sulla scheda UNO.

    • Se il valore letto è maggiore o uguale a 1, allora la posizione di uno specifico servo-motore deve essere ricalcolata, diminuendola di un valore pari a rotationStep. È stata necessaria un'operazione aritmetica aggiuntiva (matematica, categoria verde) per ottenere un valore negativo di rotationStep.

    • La posizione calcolata non deve scendere sotto 0°. Se ciò accade, viene impostata a questo valore limite.

Figura 41. Parte del programma grafico per l'azionamento dei servo-motori