Показано с 1 по 10 из 561

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11
    Новичок
    Регистрация
    06.12.2009
    Возраст
    45
    Сообщений
    5
    Вес репутации
    193

    По умолчанию Re: Управление рулевыми кнопками при помощи Carduino.

    Цитата Сообщение от Chip Посмотреть сообщение
    Софт написан для Carduino nano / Arduino
    Выкладываю программу для управления компьютером рулевыми кнопками.
    Спасибо за программу, очень помогла в начале.
    Но если пользователь захочет использовать ардуино ещё как-то (а он захочет, т.к. использовать всего один вход из двух десятков это расточительство), то этот код работать нормально не будет.

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

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 3 (пользователей: 0 , гостей: 3)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •