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

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11
    Пользователь Аватар для WhyMax
    Регистрация
    09.10.2011
    Возраст
    33
    Сообщений
    54
    Вес репутации
    180

    По умолчанию Re: Управление при помощи поворотного энкодера (Rotary Encoder)

    Методом проб остановился на таком скетче.
    Первый энкодер работает как надо, у второго отсутствует вращение+нажатие.

    PHP код:
    #define encoder0PinA  2 
    #define encoder0PinB  3
    #define encoder0PinC  4
    #define encoder1PinA  5
    #define encoder1PinB  6
    #define encoder1PinC  7
    byte bytes[2]={0,7} ;     

    void setup()     
    {       
      
    pinMode(encoder0PinAINPUT);     
      
    digitalWrite(encoder0PinAHIGH);     // подключить подтягивающий резистор    
      
    pinMode(encoder0PinBINPUT);     
      
    digitalWrite(encoder0PinBHIGH);    // подключить подтягивающий резистор   
      
    pinMode(encoder0PinCINPUT);     
      
    digitalWrite(encoder0PinCHIGH);    // подключить подтягивающий резистор  
      
    pinMode(encoder1PinAINPUT);     
      
    digitalWrite(encoder1PinAHIGH);    // подключить подтягивающий резистор    
      
    pinMode(encoder1PinBINPUT);     
      
    digitalWrite(encoder1PinBHIGH);    // подключить подтягивающий резистор  
      
    pinMode(encoder1PinCINPUT);     
      
    digitalWrite(encoder1PinCHIGH);    // подключить подтягивающий резистор  
        
      
    attachInterrupt(0doEncoderAFALLING);  // настроить прерывание interrupt 0 на pin 2    
      
    attachInterrupt(1doEncoderBFALLING);  // настроить прерывание interrupt 0 на pin 3    
      
    Serial.begin (115200);    
    }    

    unsigned graydecode(unsigned gray

     
    unsigned bin

     for (
    bin 0graygray >>= 1
        
    bin ^= gray

     return 
    bin


    void loop()    
    {      
     static 
    uint8_t tmp_code 0;  
     
    uint8_t gray_code digitalRead(encoder1PinA) | (digitalRead(encoder1PinB) << 1), 
      
    code graydecode(gray_code); 
     if (
    code == 0
     { 
       if (
    tmp_code == 3
         { 
           
    bytes[0]=9
           
    bytes[1]=6;    
          
    Serial.writebytes,2);   
          
    bytes[0]=0;   
         } else if (
    tmp_code == 1
                   { 
                      
    bytes[0]=9
                     
    bytes[1]=7;    
                      
    Serial.writebytes,2);   
                      
    bytes[0]=0;  
                   } 
      } 
     
    tmp_code code
     
    delay(2); 
     
      if(
    digitalRead(encoder0PinC)==LOW)  
       { 
         
    bytes[1]=8
          
    Serial.writebytes,2);   
          while(
    digitalRead(encoder0PinC)==LOW){delay(50);} 
           
    bytes[1]=7;  
       }
        if(
    digitalRead(encoder1PinC)==LOW)  
       { 
         
    bytes[1]=6
          
    Serial.writebytes,2);   
          while(
    digitalRead(encoder1PinC)==LOW){delay(50);} 
           
    bytes[1]=7;  
       }
    }    

    // обработка прерывания    
    void doEncoderA()    
    {    
      if(
    digitalRead(encoder0PinB)==HIGH){bytes[0]=25;}else{bytes[0]=5;}     
      
    Serial.writebytes,2);   
      
    bytes[0]=0;  
    }      

    // обработка прерывания    
    void doEncoderB()    
    {    
        if(
    digitalRead(encoder0PinA)==HIGH){bytes[0]=5;}else{bytes[0]=25;}    
        
    Serial.writebytes,2);   
        
    bytes[0]=0;    

    Последний раз редактировалось WhyMax; 22.11.2011 в 05:10.

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

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

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

Метки этой темы

Ваши права

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