Ви не увійшли.
"Если что, revolutions здесь и далее - обороты, а не революции (: "
/* Реакция на событие поворота */
void turned(int new_direction)
{
  тут сбрасывается в ноль
  if (new_direction != direction)
  {
    revolutions = 0;
    revolutions_at_last_display = 0;
  }
  else
    ++revolutions;
  direction = new_direction;
}
void turned(int new_direction)
{
 if ( new_direction == FORWARD )
  revolutions++;   
else  
 revolutions--;
}вывод revolutions с минусом на экран сами
вы пробовали разобраться?
Все получилось) Вот этот ресурс помог)  http://robocraft.ru/blog/electronics/594.html
   
Подскажите, в этом сайте скетч работает все нармально. Вращаешь например диск вправо, считает обороты и показывает направление вращения. Как только начинаешь вращать в обратную сторону счетчик сбивается на ноль , меняется направление вращение. Подмогите со скетчем , нужно чтоб счетчик не сбивался при вращении в противоположную сторону а отсчитывал в обратном порядке вплоть до нуля. Т.е вращаем по часовой, сделали 20 оборотов. Как только начинаем вращать против часовой стрелки чтоб не сбивался счетчик на ноль сразу, а производился обратный отсчет. 20,19,18...1,0
Вот скетч:
#include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
/* Пины, к которым подключен энкодер */
enum { ENC_PIN1 = 2, ENC_PIN2 = 3 };
enum { FORWARD = 1, BACKWARD = -1 };
/* Если что, revolutions здесь и далее - обороты, а не революции (: */
long revolutions = 0, revolutions_at_last_display = 0;
int direction = FORWARD;
uint8_t previous_code = 0;
/* Реакция на событие поворота */
void turned(int new_direction)
{
  if (new_direction != direction)
  {
    revolutions = 0;
    revolutions_at_last_display = 0;
  }
  else
    ++revolutions;
  direction = new_direction;
}
/* Объеденил чтение кода Грея с энкодера с его декодированием */
uint8_t readEncoder(uint8_t pin1, uint8_t pin2)
{
  uint8_t gray_code = digitalRead(pin1) | (digitalRead(pin2) << 1), result = 0;
  for (result = 0; gray_code; gray_code >>= 1)
    result ^= gray_code;
  return result;
}
void setup()
{
  pinMode(ENC_PIN1, INPUT);
  pinMode(ENC_PIN2, INPUT);
  lcd.begin(8, 2);
}
void loop()
{
  /* Читаем значение с энкодера */
  uint8_t code = readEncoder(ENC_PIN1, ENC_PIN2);
  /* Обрабатываем его */
  if (code == 0)
  {
    if (previous_code == 3)
      turned(FORWARD);
    else if (previous_code == 1)
      turned(BACKWARD);
  }
previous_code = code;
/* Раз в секунду выводим накопленную информацию */
static unsigned long millis_at_last_display = 0;
  if (millis() - millis_at_last_display >= 1000)
  {
    /* Выводим на экран направление вращения */
    lcd.clear();
    lcd.print(direction == FORWARD ? ">> " : "<< ");
    /* ... скорость вращения в оборотах в секунду */
    lcd.print(revolutions - revolutions_at_last_display);
    lcd.print("/s");
    /* ... и общее число обротов в текущем направлении */
    lcd.setCursor(0, 1);
    lcd.print(revolutions);
    
    millis_at_last_display = millis();
    revolutions_at_last_display = revolutions;
  }
}
 Заранее благодарен.
гуглим 
ардуино датчик Холла - сразу куча примеров
Я новичек в познании ардуино ) Столкнулся с такой проблемкой. Есть вал, который вращается 4 оборота по часовой и 4 против часовой стрелки (скорость невелика). Каким образом можно реализовать подсчет оборотов и направление вращения (по часовой стрелке и против часовой). Мое мнение - датчик Холла наилучшим образом подойдет для реализации... А вот как? ПОдскажите люди добрые, может кто то подобное делал (сталкивался). Буды бдагодарен за любую помощь)