Exemple:
Potentiometre_Vitesse_2_pas

Ce programme fait tourner le moteur pas à pas dans les deux sens à une vitesse variable dépendant de la position d'un potentiomètre. Au milieu, vitesse nulle, plus on s'éloigne, plus la vitesse augmente. Pour ce faire, on va faire des petits mouvements (par exemple 2 pas), et on ajustera la vitesse à chaque passage.

Liens

Pour faire fonctionner cet exemple, il faut soit télécharger QuickStepExemples.zip contenant tous les fichiers d'exemples, soit télécharger Potentiometre_Vitesse_2_pas.zip contenant cet exemple, soit créer un répertoire du nom de l'exemple et mettre dedans:
- le fichier Potentiometre_Vitesse_2_pas.ino de l'exemple
- le fichier de configuration QuickStepConf.h propre à cet exemple
- les trois fichiers (QuickStep.h, QuickStep.cpp et digitalWriteFast.h) pour avoir la bibliothèque (identiques pour toutes les applications)

QuickStepConf.h (extrait)

Comme il s'agit d'une rotation continue (enchaînement des mouvements), il faut une pile d'au moins 2 ordres. Plus la pile est grande, plus il faudra du temps pour changer la vitesse. 3 ordres dans la pile est donc ce qu'il y a de mieux.

//  Hybride 200pas/tr en mode 16 micro-pas
#define UN_TOUR (200L*16) pas_ou_micro_pas
#define VITESSE_MAXI 1.0 RPS
#define STEP 2
#define DIR 5
#define ENABLE 8
#define NB_ORDRES_DANS_LA_PILE 3

Si le nombre de pas fait dans chaque mouvement, est trop petit, on n'aura pas le temps de faire les calculs (voir Enchainements).

Potentiometre_Vitesse_2_pas.ino

#
  $menu = ":QS";
  include "QuickStep.h"

const uint8_t POTENTIOMETRE = A5; // Broche de la borne centrale du potentiomètre
  // Une autre broche est à GND, l'autre au 5V
const uint16_t MINI = 3; // Pour les faibles valeurs on arrête le moteur 

void setup()
{
  quickStepInit(); // Obligatoire pour utiliser QuickStep
  Serial.begin(115200);
}

int valeurPotentiometreLue; // Résultat de analogRead(POTENTIOMETRE)

void loop()
{ 
  valeurPotentiometreLue = analogRead(POTENTIOMETRE) - 512; // Résultat entre -512 et +512
  if (abs(valeurPotentiometreLue) > MINI) // Pour les résultats entre -MINI et +MINI on ne fait rien 
    quickStepRotation((valeurPotentiometreLue > 0 ? 1 : -1)* // Choix du sens
         2 pas_ou_micro_pas,
         VITESSE_MAXI * abs(valeurPotentiometreLue)/512); // Vitesse entre 0 et 1.0 RPS 
}