Показать сообщение отдельно
Старый 06.11.2012, 23:01   #3
Alex-pet
Старший Пользователь
 
Аватар для Alex-pet
 
Регистрация: 28.08.2011
Город: Минск
Регион: Беларусь
Машина: Mazda 6
Сообщений: 150
Alex-pet is on a distinguished road
По умолчанию

Дело в том, что я не очень дружу с Ардуино и первый я подключил просто залив готовый скетч и посмотрев схему подключения на соседнем форуме. Может, Вы хорошо с ним дружите? Может, подскажете, как правильно подключить второй энкодер к Ардуино?

Вот скетч на подключение двух енкодеров (взят с http://www.compcar.ru/forum/showthread.php?p=98884):

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;    

Понимаю что задействованы контакты 2, 3, 4, 5, 6, 7, но для подключения первого понадобилось 4 контакта.
Первый подключался по такой схеме:

Нажмите на изображение для увеличения
Название: enc.jpg
Просмотров: 1688
Размер:	46.1 Кб
ID:	28428

И использовался соответствующий скетч, а вот как два подключить не знаю

Заранее большое большое спасибо!
Alex-pet вне форума   Ответить с цитированием