Показать сообщение отдельно
Старый 27.12.2012, 21:31   #354
Bersenev
Бывалый писикарщик
 
Аватар для Bersenev
 
Регистрация: 23.04.2009
Возраст: 53
Город: Ставрополь
Регион: 26
Машина: Opel Zafira 2007
Сообщений: 5,275
Bersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant future
По умолчанию

2 folv

Попробуй такую процедуру для энкодера

Код:
void encoder_1()
{
  if( encoder1_key_millis + encoder1_key_wait_millis*2 < millis() ) { encoder1_key_old = 0; }
  if( encoder1_millis + encoder1_wait_millis < millis() )
  {
    encoder1_millis = millis();
    encoder1_dt = analogRead(ENCODER1_PIN); // прочитать данные АЦП
    
    if( encoder1_dt >= 0x224 && encoder1_dt <= 0x264 )
    { // Здесь обрабатываем удержание кнопки
      encoder1_key = ENCODER1_PIN;
      encoder1_key = (encoder1_key << 16) | 0x030000EE;
      if ( encoder1_key == encoder1_key_old )
      { // Здесь обрабатываем удержание кнопки
        if( encoder1_key_millis + encoder1_key_wait_millis < millis() )
        { 
          bytes[0] = encoder1_key & 0xFF;          // преобразовать в 4-байта  
          bytes[1] = (encoder1_key & 0xFF00) >> 8;  
          bytes[2] = (encoder1_key & 0xFF0000) >> 16; 
          bytes[3] = (encoder1_key & 0xFF000000) >> 24;
          Serial.write( bytes,4); // отправить прочитаное значение компьютеру
          encoder1_key_millis = millis(); encoder1_key_wait_millis = encoder1_key_wait; //ir_wait_next;
        }
      }
      else 
      { // Здесь обрабатываем первое нажатие кнопки
        encoder1_key_millis = millis(); encoder1_key_wait_millis = 50; //ir_wait_first;
      } 
      encoder1_key_old = encoder1_key;
    } 
    else
    {
      if( encoder1_dt >= 0x3C0 && encoder1_dt <= 0x3FF && encoder1_key3 != 1 )
      {
        if( (encoder1_key2 == 2) && (encoder1_key3 == 3))
        { 
          bytes[0] = 0xEE;          // преобразовать в 2-байта 
          bytes[1] = 0; 
          bytes[2] = ENCODER1_PIN;
          bytes[3] = 1;
          Serial.write( bytes,4); // отправить прочитаное значение компьютеру     
        }
        else
        {
          if( (encoder1_key2 == 3) && (encoder1_key3 == 2) )
          {
            bytes[0] = 0xEE;          // преобразовать в 2-байта 
            bytes[1] = 0; 
            bytes[2] = ENCODER1_PIN;
            bytes[3] = 2;
            Serial.write( bytes,4); // отправить прочитаное значение компьютеру     
          }
        }
        encoder1_key1=encoder1_key2; encoder1_key2=encoder1_key3; encoder1_key3=1;
      }
      else
      {
        if( encoder1_dt >= 0xC3 && encoder1_dt <= 0x113 && encoder1_key3 != 2 )
        {
          encoder1_key1=encoder1_key2; encoder1_key2=encoder1_key3; encoder1_key3=2;
        }
        else
        {
          if( encoder1_dt >= 0x120 && encoder1_dt <= 0x160 && encoder1_key3 != 3 )
          {
            encoder1_key1=encoder1_key2; encoder1_key2=encoder1_key3; encoder1_key3=3;
          }
        }
      }
    }
  }
}
Если заработает, то сделай то же самое для второго энкодера

И ещё в адуино V.7 лучше вешать на аналоговый пин №7 резестивные кнопки. А энкодеры на 5 и 6-й пин.
Bersenev вне форума   Ответить с цитированием