Quebra do codificador rotativo PWM de 360 ​​graus

      Quebra do codificador rotativo PWM de 360 ​​graus

      USD
      Model #
      Quantity
      qty limit cart limit

      Estimador de custos de envio

      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.

      Descrição

      Este tipo de chave é um codificador rotativo incremental. Na verdade, é o mais amplamente usado de todos os codificadores rotativos devido ao seu baixo custo e capacidade de fornecer sinais que podem ser facilmente interpretados para fornecer informações relacionadas ao movimento, como velocidade.

      Ao girar, o codificador rotativo pode contar a frequência de pulso de saída na direção positiva e reversa durante a rotação, ao contrário de um contador de potenciômetro rotativo sem limitação de contagem. Com o botão no codificador rotativo, ele pode ser redefinido para seu estado inicial começando do zero.

      Código de teste

      redPin int = 2;
      int yellowPin = 3;
      int greenPin = 4;
      int aPin = 6;
      int bPin = 7;
      botãoPin int = 5;
      estado interno = 0;
      período longo int = 5000; // Tempo em verde ou vermelho
      período curto int = 700; // Período de tempo ao mudar
      int targetCount = shortPeriod;
      contagem interna = 0;
      configuração vazia ()
      {
      pinMode (aPin, INPUT);
      pinMode (bPin, INPUT);
      pinMode (buttonPin, INPUT);
      pinMode (redPin, OUTPUT);
      pinMode (yellowPin, OUTPUT);
      pinMode (greenPin, OUTPUT);
      }
      void loop ()
      {
      contagem ++;
      if (digitalRead (buttonPin))
        {
      setLights (HIGH, HIGH, HIGH);
        }
      outro
        {
      mudança int = getEncoderTurn ();
      int newPeriod = longPeriod + (alterar * 1000);
      if (newPeriod> = 1000 && newPeriod <= 10000)
          {
      longPeriod = newPeriod;
          }
      if (count> targetCount)
          {
      setState ();
      contagem = 0;
          }
        }
      atraso (1);
      }
      int getEncoderTurn ()
      {

      // retorna -1, 0 ou +1
      estático int oldA = LOW;
      estático int oldB = LOW;
      resultado int = 0;
      int newA = digitalRead (aPin);
      int newB = digitalRead (bPin);
      if (newA! = oldA || newB! = oldB)
        {
      // Alguma coisa mudou
      if (oldA == LOW && newA == HIGH)
          {
      resultado = - (oldB * 2 - 1);
          }
        }
      oldA = newA;
      antigoB = novoB;
      resultado de retorno;
      }
      int setState ()
        {
      if (estado == 0)
          {
      setLights (HIGH, LOW, LOW);
      targetCount = longPeriod;
      estado = 1;
          }
      else if (estado == 1)
          {
      setLights (HIGH, HIGH, LOW);
      targetCount = shortPeriod;
      estado = 2;
          }
      else if (estado == 2)
          {
      setLights (LOW, LOW, HIGH);
      targetCount = longPeriod;
      estado = 3;
          }
      else if (state == 3)
          {
      setLights (LOW, HIGH, LOW);
      targetCount = shortPeriod;
      estado = 0;
          }
        }
      void setLights (int red, int yellow, int green)
      {
      digitalWrite (redPin, vermelho);
      digitalWrite (yellowPin, amarelo);
      digitalWrite (greenPin, verde);