Показать сообщение отдельно
Старый 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(encoder0PinA, INPUT);     
  
digitalWrite(encoder0PinA, HIGH);     // подключить подтягивающий резистор    
  
pinMode(encoder0PinB, INPUT);     
  
digitalWrite(encoder0PinB, HIGH);    // подключить подтягивающий резистор   
  
pinMode(encoder0PinC, INPUT);     
  
digitalWrite(encoder0PinC, HIGH);    // подключить подтягивающий резистор  
  
pinMode(encoder1PinA, INPUT);     
  
digitalWrite(encoder1PinA, HIGH);    // подключить подтягивающий резистор    
  
pinMode(encoder1PinB, INPUT);     
  
digitalWrite(encoder1PinB, HIGH);    // подключить подтягивающий резистор  
  
pinMode(encoder1PinC, INPUT);     
  
digitalWrite(encoder1PinC, HIGH);    // подключить подтягивающий резистор  
    
  
attachInterrupt(0, doEncoderA, FALLING);  // настроить прерывание interrupt 0 на pin 2    
  
attachInterrupt(1, doEncoderB, FALLING);  // настроить прерывание interrupt 0 на pin 3    
  
Serial.begin (115200);    
}    

unsigned graydecode(unsigned gray) 
{ 
 
unsigned bin; 

 for (
bin = 0; gray; gray >>= 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.write( bytes,2);   
      
bytes[0]=0;   
     } else if (
tmp_code == 1) 
               { 
                  
bytes[0]=9; 
                 
bytes[1]=7;    
                  
Serial.write( bytes,2);   
                  
bytes[0]=0;  
               } 
  } 
 
tmp_code = code; 
 
delay(2); 
 
  if(
digitalRead(encoder0PinC)==LOW)  
   { 
     
bytes[1]=8; 
      
Serial.write( bytes,2);   
      while(
digitalRead(encoder0PinC)==LOW){delay(50);} 
       
bytes[1]=7;  
   }
    if(
digitalRead(encoder1PinC)==LOW)  
   { 
     
bytes[1]=6; 
      
Serial.write( bytes,2);   
      while(
digitalRead(encoder1PinC)==LOW){delay(50);} 
       
bytes[1]=7;  
   }
}    

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

// обработка прерывания    
void doEncoderB()    
{    
    if(
digitalRead(encoder0PinA)==HIGH){bytes[0]=5;}else{bytes[0]=25;}    
    
Serial.write( bytes,2);   
    
bytes[0]=0;    
} 
Понимаю что задействованы контакты 2, 3, 4, 5, 6, 7, но для подключения первого понадобилось 4 контакта.
Первый подключался по такой схеме:

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

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

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