6 축 로봇 팔에 연결된 Arduino Mega가 있습니다. 6 개의 모든 인터럽트는 인코더에 연결됩니다 (인터럽트에 하나의 인코더 핀, 바닐라 디지털 입력에 다른 하나의 인코더 핀). 인터럽트는이 코드로 처리됩니다이는 아두 이노 모터의 위치가 특정 임계 값으로 해제되어 있음을 감지하면 특정 위치 -에서 고정 팔을 유지하도록 설계되어Arduino 인코더가 직렬 데이터 손상을 방해합니다.
void readEncoder1(){
//encoders is a 2d array, where the first d is the axis, and the two pin numbers
//first pin is on an interrupt (CHANGE), and second is a standard digital in
if (digitalRead(encoders[0][0]) == digitalRead(encoders[0][1])) {
positions[0]++;
} else {
positions[0]--;
}
if(servoEnable){
updatePositions(); //// compares positions[] to targets[] and adjusts motor speed accordingly
}
}
, 그것은가는 힘을 업데이트 팔을 제 위치에 유지하기 위해 모터에 연결하십시오.
문제는 다음과 같습니다. 두 개 또는 세 개의 (또는 그 이상) 축이로드되어 있거나 (일정한 위치에 유지되기 위해 계속 업데이트해야하는 경우) 이동 중이면 Arduino는 직렬 입력에서 손쉽게 명령을받는 것을 중지합니다. 문자가 삭제됩니다. 인터럽트는 분명히 매우 빠르게 실행되고 있으며, 어떤 이유로 명령이 손상 될 수 있습니다. 이 주위에 어떤 방법이 있습니까? 구조적으로, 내가이 일을 제대로하고 있는가? 필자의 본능은 주 실행 루프에서 updatePositions()를 호출하는 것입니다. 예를 들어 100ms 간격으로 인터럽트 오버 헤드를 크게 줄일 수 있습니까? 내 질문에 무슨 일이 일어나는 것 같아요 경우 모두 6 인코더 멀리 pulsing 경우에도 나는 Arduino에 안정적인 직렬 명령을 어떻게합니까?