Issue: Open CR1.0, MX-64(2.0 protocol)
아래는 코드 일부입니다. 서보 TTL 연결하고 통신설정 다 해서 모터 동작은 원하는대로 잘 됩니다. 다만 readControlTableItem 값이 들어오질 않습니다. 왜그런걸까요?
#include “Dynamixel2Arduino.h”
#include “SPI.h”
#include “Adafruit_GFX.h” // 그래픽 라이브러리
#include “OpenCR_ILI9341.h” // ILI9341 디스플레이 라이브러리
// SPI 디스플레이 핀 설정
#define TFT_CS 10 // Chip Select 핀
#define TFT_DC 9 // Data/Command 핀
#define TFT_RST 8 // Reset 핀
// Servo Motor 통신 설정
#define DXL_SERIAL Serial3
#define DEBUG_SERIAL Serial
#define DXL_BAUDRATE 57600
const int DXL_DIR_PIN = 84; // OpenCR Board’s DIR PIN.
// 디스플레이 객체
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
//Servo 객체
Dynamixel2Arduino dxl(DXL_SERIAL, DXL_DIR_PIN);
//battery 상태 업데이트 시간차
const unsigned long interval = 1000; // 1분 = 60000ms
unsigned long previousMillis = 0;
int present_voltage=1;
#define PRESENT_VOLTAGE 144
#define CURRENT_LIMIT 38
// Servo Motor 회전 변환 단위 1rev = 4096분해능
#define DEGREE_TO_POSITION(d) ((d)*4096/360)
float servo_degrees[3];
int angle = 0;
int Direction = 1;
float s1 = 2.8-1.5;
float s2 = 2.8-2.5;
float s3 = 2.8-3.5;
//setup 영역------------------------------------------------------------------------------------------------------------------------------------------------------------
void setup() {
DEBUG_SERIAL.begin(115200);
//Display 초기 세팅
tft.begin();
Display_UI();
//Servo 초기 세팅
DXL_SERIAL.begin(DXL_BAUDRATE);
dxl.begin();
dxl.setPortProtocolVersion(2.0);//Servo Protocol 2.0 설정
for (int i = 0; i < 3; i++) {
dxl.setOperatingMode(i, OP_VELOCITY); //Servo 속도 제어 모드
dxl.torqueOn(i);
}
if (dxl.ping(1)) {
DEBUG_SERIAL.println(“ID 1 모터와 통신 성공!”);
} else {
DEBUG_SERIAL.println(“ID 1 모터와 통신 실패!”);
}
delay(1000); // 1초 대기
}
//loop 영역------------------------------------------------------------------------------------------------------------------------------------------------------------
void loop() {
int16_t present_temperature = dxl.readControlTableItem(43, 0); // 현재 온도 주소
DEBUG_SERIAL.print("현재 온도: ");
DEBUG_SERIAL.println(present_temperature);
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis; // 이전 시간을 현재 시간으로 갱신
present_voltage = dxl.readControlTableItem(PRESENT_VOLTAGE, 0);
DEBUG_SERIAL.print("현재 전압 : ");
DEBUG_SERIAL.println(present_voltage);
PROVIDE A THOUROUGH DESCRIPTION OF YOUR ISSUE, THE MORE DETAIL YOU PROVIDE THE EASIER IT WILL BE FOR THE COMMUNITY TO PROVIDE YOU ASSISTANCE
DYNAMIXEL Servo:
LIST ALL DYNAMIXEL SERVOS USED IN THIS PROJECT
DYNAMIXEL Controller:
LIST ALL DYNAMIXEL CONTROLLERS USED IN THIS PROJECT
Software Interface:
LIST ALL SOFTWARE INTERFACES USED IN THIS PROJECT