arduino 1 모터 인코더 값 읽기

2468 단어 arduino
#define BAUDRATE     115200
#define LEFT            0	//  
#define RIGHT           1	//  
#define FORWARDS true
#define BACKWARDS false

//                                 volatile,
//        。 arduino ,                        ,        。
//                 volatile   .
volatile long encoderLeft = 0L;
volatile long encoderRight = 0L;

//      
void initEncoders(){
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  //    (   ,      ,      )
  //       0 1,      2  3   
  //        
  //LOW(     )、CHANGE(     )、RISING(          )、FALLING(          )
  attachInterrupt(0, encoderLeftISR, CHANGE);  
  attachInterrupt(1, encoderRightISR, CHANGE);
}

//      
void encoderLeftISR(){
    encoderLeft++;
}

//      
void encoderRightISR(){
    encoderRight++;
}


//         
long readEncoder(int i) {
  long encVal = 0L;
  if (i == LEFT)  {
     noInterrupts(); //   
    //detachInterrupt(0); //    ;         .
    encVal = encoderLeft;
    interrupts(); //   
    //attachInterrupt(0, Code_left, FALLING);
  }
  else {
    noInterrupts();	//   
    //detachInterrupt(1);
    encVal = encoderRight;
    interrupts();	//   
    //attachInterrupt(1, Code_right, FALLING);
  }
  return encVal;
}

//          ,   0
void resetEncoder(int i) {
  if (i == LEFT){
    noInterrupts();
    encoderLeft = 0L;
    interrupts();
  }else {
    noInterrupts();
    encoderRight = 0L;
     interrupts();
  }
}
//        ,    0
void resetEncoders() {
  resetEncoder(LEFT);
  resetEncoder(RIGHT);
}

//   
 void setup() {
  //         :
  // begin():    ,     ;Serial.begin(BAUDRATE);
  // available():               ,           ;Serial.available();
  //				                 (  64  ) 。available()   Stream   。
  // read():     ,read()   Stream   。Serial.read();
  //		   :            (             -1)- int 。
  // flush():       
  // print():       ,        。  :1)Serial.print(val);2)Serial.print(val,format)
  //   : val:     ,      ;format:        ,                  。
  // println():         。 Serial.print()            。
  // write():          ,               ,             print()  。
  // peak():       。                
  // serialEvent():               (    Serial.read()     )。
  Serial.begin(BAUDRATE);
  initEncoders();
  resetEncoders();
}

void loop() {
   long lval=readEncoder(0);
   long rval=readEncoder(1);
   Serial.print("left: ");
   Serial.print(lval);
   Serial.print("; right: ");
   Serial.println(rval);
   delay(30);
}

좋은 웹페이지 즐겨찾기