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);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Monterey 12.3의 ESP32 Arduino CoreESP32 Arduino Core 在 連結 連結 程式 的 的 的 階段 會 會 使用 到 到 一 個 個 gen_esp32part.py 的 Python 程式 檔 檔 檔, 但是 MacOS 在 升級 到 12.3 時 了, 所以...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.