
 Сообщение от 
Chip
					
				 
				
			
		 
	 
 Спасибо за программу, очень помогла в начале.
Но если пользователь захочет использовать ардуино ещё как-то (а он захочет, т.к. использовать всего один вход из двух десятков это расточительство), то этот код работать нормально не будет. 
Нужно оформить данный процесс как стейтмашину, примерно так как сделал я (привожу часть кода для длинного и короткого нажатия):
	PHP код:
	
    switch( state )
    {
      case 0: // nothing pressed
              key = decode_button( analogRead( WHEELBUT ) );
              if( key > 0 ) 
              {
                  state = 1;
                  time  = millis();
              }
              break;
              
      case 1: // key down
              if( decode_button( analogRead( WHEELBUT ) ) == key ) 
              {
                  if( millis() - time > 50 ) { state = 2; time = 0; }
                  break;
              }
              state = 0;
              key   = 0;
              time  = 0;
              break;
              
      case 2: // one press
              if( time == 0 ) 
              {
                  Serial.println( key, DEC ); 
                  time = millis();
              }
              
              if( decode_button( analogRead( WHEELBUT ) ) == key ) 
              {
                  if( millis() - time > 250 ) { state = 3; time = 0; }
                  break;
              }
              state = 0;
              key   = 0;
              time  = 0;
              break;
      
      case 3: // key hold (multipress)
              if( time == 0 ) 
              {
                  Serial.println( key, DEC ); 
                  time = millis();
              }
              
              if( decode_button( analogRead( WHEELBUT ) ) == key ) 
              {
                  if( millis() - time > 75 ) { state = 3; time = 0; }
                  break;
              }
              
              state = 0;
              key   = 0;    
              time  = 0;
              break;
    } 
 Функция decode_button возвращает ноль если кнопка не нажата, и код кнопки если нажата. 
Переменные key, state и time  изначально инициализируются нулем. 
Меняя константы 50 (время исключения дребезга), 250 (время перед началом повтора), 75 (1000/75=частота повтора) можно настроить реакцию под себя.