Тема: Kia Sorento 2004
Показать сообщение отдельно
Старый 16.02.2015, 00:50   #50
lduhl
Пользователь
 
Регистрация: 03.12.2014
Возраст: 40
Регион: ***эстония***
Сообщений: 75
lduhl is on a distinguished road
По умолчанию

Заработало норм на Винде. Единственно что если крутить быстро - толку мало =) лучше крутить спокойно но долго =)
Завтра притащу планшет и буду его ковырять =)
скетч:

Код:
 
unsigned long currentTime;
unsigned long loopTime;
const int pin_A = 0;       // pin 0
const int pin_B = 1;       // pin 1
unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev=0;
int vol_up = 0;
int vol_down = 0;

const int button = 3;          //пин кнопки вкл/выкл
const int relay = 13;          //пин управления реле
 
void setup()  {
  // declare pin 9 to be an output:
  pinMode(9, OUTPUT);         // устанавливаем pin 9 как выход + 
  pinMode(10, OUTPUT);         // устанавливаем pin 10 как выход - 
  pinMode(pin_A, INPUT);
  pinMode(pin_B, INPUT);
  currentTime = millis();
  loopTime = currentTime; 
  pinMode(relay, OUTPUT);
  pinMode(button, INPUT);
} 
 
void loop()  {
  currentTime = millis();
  if(currentTime >= (loopTime + 1)){ // проверяем каждые 5мс (200 Гц)
    encoder_A = digitalRead(pin_A);     // считываем состояние выхода А энкодера 
    encoder_B = digitalRead(pin_B);     // считываем состояние выхода Б энкодера    
    if((!encoder_A) && (encoder_A_prev)){    // если состояние изменилось с положительного к нулю
      if(encoder_B) {
        // выход В в полож. сост., значит вращение по часовой стрелке
        vol_up = 100;      
      }   
      else {
        // выход В в 0 сост., значит вращение против часовой стрелки     
        vol_down = 100;              
      }   
    }
    
   //if ((!encoder_A)&&(!encoder_B)){digitalWrite(9, LOW); digitalWrite(10, LOW);}   
    encoder_A_prev = encoder_A;     // сохраняем значение А для следующего цикла     
    loopTime = currentTime;
    if (vol_up > 0) {digitalWrite(9,HIGH); vol_up--;} else {digitalWrite(9,LOW);}
    if (vol_down > 0) {digitalWrite(10,HIGH); vol_down--;} else {digitalWrite(10,LOW);}
  }
  if (digitalRead(button)==HIGH){
    if (digitalRead(relay)==HIGH){digitalWrite(relay,LOW);delay(500);}else{digitalWrite(relay,HIGH);delay(500);}
  }
  
}
lduhl вне форума   Ответить с цитированием