Déclenchement de l'encodeur rotatif PWM à 360 degrés

      Déclenchement de l'encodeur rotatif PWM à 360 degrés

      USD
      Model #
      Quantity
      qty limit cart limit

      Estimateur des coûts d’expédition

      Note: You must have items in your cart already before you can see the estimated costs to ship your cart. This shipping tool will estimate the total shipping cost for your entire basket.

      La description

      Ce type de commutateur est un codeur rotatif incrémental. En fait, c'est le plus largement utilisé de tous les codeurs rotatifs en raison de son faible coût et de sa capacité à fournir des signaux qui peuvent être facilement interprétés pour fournir des informations liées au mouvement telles que la vitesse.

      En tournant, le codeur rotatif peut compter la fréquence d'impulsion de sortie dans le sens positif et inverse pendant la rotation, contrairement à un compteur à potentiomètre rotatif sans limitation de comptage. Avec le bouton sur l'encodeur rotatif, il peut être remis à son état initial à partir de zéro.

      Code de test

      int redPin = 2;
      int yellowPin = 3;
      int greenPin = 4;
      int aPin = 6;
      int bPin = 7;
      int buttonPin = 5;
      état int = 0;
      int longPeriod = 5000; // Heure au vert ou au rouge
      int shortPeriod = 700; // Période lors du changement
      int targetCount = shortPeriod;
      nombre int = 0;
      void setup()
      {
      pinMode (aPin, INPUT);
      pinMode (bPin, INPUT);
      pinMode (buttonPin, INPUT);
      pinMode (redPin, SORTIE);
      pinMode (yellowPin, OUTPUT);
      pinMode (greenPin, OUTPUT);
      }
      boucle vide ()
      {
      count ++;
      if (digitalRead (buttonPin))
        {
      setLights (HIGH, HIGH, HIGH);
        }
      autre
        {
      int change = getEncoderTurn ();
      int newPeriod = longPeriod + (changement * 1000);
      if (newPeriod> = 1000 && newPeriod <= 10000)
          {
      longPeriod = newPeriod;
          }
      if (count> targetCount)
          {
      setState ();
      compte = 0;
          }
        }
      retard (1);
      }
      int getEncoderTurn ()
      {

      // renvoie -1, 0 ou +1
      statique int oldA = LOW;
      statique int oldB = LOW;
      résultat int = 0;
      int newA = digitalRead (aPin);
      int newB = digitalRead (bPin);
      si (nouveauA! = ancienA || nouveauB! = ancienB)
        {
      // quelque chose a changé
      if (oldA == LOW && newA == HIGH)
          {
      résultat = - (oldB * 2 - 1);
          }
        }
      oldA = nouveauA;
      oldB = nouveauB;
      résultat de retour;
      }
      int setState ()
        {
      si (état == 0)
          {
      setLights (HAUT, BAS, BAS);
      targetCount = longPeriod;
      état = 1;
          }
      sinon si (état == 1)
          {
      setLights (HIGH, HIGH, LOW);
      targetCount = shortPeriod;
      état = 2;
          }
      sinon si (état == 2)
          {
      setLights (LOW, LOW, HIGH);
      targetCount = longPeriod;
      état = 3;
          }
      sinon si (état == 3)
          {
      setLights (LOW, HIGH, LOW);
      targetCount = shortPeriod;
      état = 0;
          }
        }
      void setLights (int rouge, int jaune, int vert)
      {
      digitalWrite (redPin, rouge);
      digitalWrite (yellowPin, jaune);
      digitalWrite (greenPin, vert);