Поворотный энкодер с ШИМ на 360 градусов

      Поворотный энкодер с ШИМ на 360 градусов

      USD
      Model #
      Quantity
      qty limit cart limit

      Оценщик стоимости доставки

      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.

      Описание

      Этот тип переключателя представляет собой инкрементальный датчик угла поворота. Фактически, он является наиболее широко используемым из всех поворотных энкодеров из-за его низкой стоимости и способности подавать сигналы, которые можно легко интерпретировать для получения информации, связанной с движением, например скорости.

      Вращаясь, поворотный энкодер может подсчитывать частоту выходных импульсов в положительном и обратном направлении во время вращения, в отличие от счетчика поворотного потенциометра без ограничения счета. С помощью кнопки на поворотном энкодере его можно вернуть в исходное состояние, начиная с нуля.

      Код тестирования

      int redPin = 2;
      int yellowPin = 3;
      int greenPin = 4;
      int aPin = 6;
      int bPin = 7;
      int buttonPin = 5;
      int state = 0;
      int longPeriod = 5000; // Время на зеленом или красном
      int shortPeriod = 700; // Период времени при изменении
      int targetCount = shortPeriod;
      int count = 0;
      установка void ()
      {
      pinMode (aPin, INPUT);
      pinMode (bPin, ВХОД);
      pinMode (buttonPin, ВВОД);
      pinMode (redPin, ВЫХОД);
      pinMode (yellowPin, ВЫХОД);
      pinMode (greenPin, ВЫХОД);
      }
      пустой цикл ()
      {
      count ++;
      если (digitalRead (buttonPin))
        {
      setLights (HIGH, HIGH, HIGH);
        }
      еще
        {
      int change = getEncoderTurn ();
      int newPeriod = longPeriod + (изменение * 1000);
      если (newPeriod> = 1000 && newPeriod <= 10000)
          {
      longPeriod = newPeriod;
          }
      если (количество> targetCount)
          {
      setState ();
      count = 0;
          }
        }
      задержка (1);
      }
      int getEncoderTurn ()
      {

      // возвращаем -1, 0 или +1
      статический int oldA = LOW;
      статический int oldB = LOW;
      int результат = 0;
      int newA = digitalRead (aPin);
      int newB = digitalRead (bPin);
      если (newA! = oldA || newB! = oldB)
        {
      // что-то изменилось
      если (oldA == LOW && newA == HIGH)
          {
      результат = - (oldB * 2 - 1);
          }
        }
      oldA = newA;
      oldB = newB;
      вернуть результат;
      }
      int setState ()
        {
      если (состояние == 0)
          {
      setLights (ВЫСОКИЙ, НИЗКИЙ, НИЗКИЙ);
      targetCount = longPeriod;
      состояние = 1;
          }
      иначе, если (состояние == 1)
          {
      setLights (ВЫСОКИЙ, ВЫСОКИЙ, НИЗКИЙ);
      targetCount = shortPeriod;
      состояние = 2;
          }
      иначе, если (состояние == 2)
          {
      setLights (LOW, LOW, HIGH);
      targetCount = longPeriod;
      состояние = 3;
          }
      иначе, если (состояние == 3)
          {
      setLights (НИЗКИЙ, ВЫСОКИЙ, НИЗКИЙ);
      targetCount = shortPeriod;
      состояние = 0;
          }
        }
      void setLights (int красный, int желтый, int зеленый)
      {
      digitalWrite (redPin, красный);
      digitalWrite (yellowPin, желтый);
      digitalWrite (greenPin, зеленый);