Не так давно занимаюсь электроникой и низкоуровневым программированием а с промышленными протоколами дела совсем не имел.
Есть двигатель он работает по протоколу rs-485, у меня связка ардуино уно + модуль rs-485 + мотор.
Я ним могу управлять и на него команды приходят, а вот обратной связи я добиться не могу. В тему добавлю код своего скетча.
Я не очень силен в работе с битами и регистрами, если есть хорошая литература которая даст понять как мне это все использовать - я буд только признательным. Потому что в данном протоколе есть старшие и младшие биты и я кое как понять как мне сделать скетч.
Добавлю фото с инструкцией к протоколу.
Код: Выделить всё
const int PIN_DIR = 2;
byte servoID_1 = 0x01;
//byte servoALL = 0x
int a=0;
void setup() {
pinMode(PIN_DIR,OUTPUT);
Serial.begin(115200);
digitalWrite(PIN_DIR,LOW);
Serial.flush();
}
void loop() {
a = analogRead(A0);
delay(100);
torque(0);
// moveServo_temp(a);
//delay(1000);
// torque_pol(0);
delay(1000);
printBuffer();
//delay(2000);
}
void printBuffer(){
unsigned char buf[5];
uint8_t cur;
byte notchecksum = (0xDC);
digitalWrite(PIN_DIR,HIGH);
buf[0]=0x3E;
buf[1]=0x9C;
buf[2]=0x01;
buf[3]=0x00;
buf[4]=0xDB;
Serial.write(buf,5);
Serial.flush();
digitalWrite(PIN_DIR,LOW);
while(Serial.available()>0){
cur=Serial.read();
delay(100);
}
Serial.print(cur,HEX);
}
void torque(int Position){
unsigned char buf[8];
char Position_H = Position >> 8;
char Position_L = Position % 256;
byte notchecksum = (Position_L+Position_H);
digitalWrite(PIN_DIR,HIGH);
buf[0]=0x3E;
buf[1]=0xA1;
buf[2]=0x01;
buf[3]=0x02;
buf[4]=0xE2;
buf[5]=Position_L;
buf[6]=Position_H;
buf[7]=notchecksum;
Serial.write(buf,8);
Serial.flush();
delay(100);
digitalWrite(PIN_DIR,LOW);
}
void moveServo(){
digitalWrite(2,HIGH);
delay(100);
Serial.write(0x3E);
Serial.write(0xA4);
Serial.write(0x01);
Serial.write(0x0C);
Serial.write(0xEF);
Serial.write(0x10);
Serial.write(0x27);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0xA0);
Serial.write(0x8C);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x63);
Serial.flush();
digitalWrite(2,LOW);
delay(100);
}
void moveServo4(int Position){
char Position_H = Position >> 8;
char Position_L = Position % 256;
byte notchecksum = (Position_L+Position_H+0x00+0x00+0x00+0x00+0x00+0x00+0xA0+0x8C+0x00+0x00);
//byte notchecksum = (0xA0+0x8C+0x00+0x00+0x00+0x00+0x00+0x00+0xA0+0x8C+0x00+0x00);
digitalWrite(2,HIGH);
delay(100);
Serial.write(0x3E);
Serial.write(0xA4);
Serial.write(0x01);
Serial.write(0x0C);
Serial.write(0xEF);
Serial.write(Position_H); // Serial.write(Position_L);
Serial.write(Position_L);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0xA0);
Serial.write(0x8C);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(notchecksum);
Serial.flush();
digitalWrite(2,LOW);
delay(100);
Serial.println(Position_H);
Serial.println(Position_L);
}
void moveServo2(){
byte notchecksum = (0x00+0x00+0x00+0x00+0x00+0x00+0x00+0x00+0xA0+0x8C+0x00+0x00);
digitalWrite(2,HIGH);
delay(100);
Serial.write(0x3E);
Serial.write(0xA4);
Serial.write(0x01);
Serial.write(0x0C);
Serial.write(0xEF);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0xA0);
Serial.write(0x8C);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(notchecksum);
Serial.flush();
digitalWrite(2,LOW);
delay(100);
}
void moveServo3(){
digitalWrite(2,HIGH);
delay(100);
Serial.write(0x3E);
Serial.write(0xA4);
Serial.write(0x01);
Serial.write(0x0C);
Serial.write(0xEF);
Serial.write(0xA0);
Serial.write(0x8C);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0xA0);
Serial.write(0x8C);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x58);
Serial.flush();
digitalWrite(2,LOW);
delay(100);
}
void moveServo_temp(int Position){
unsigned char ab;
char Position_H = Position >> 8;
char Position_L = Position % 256;
byte notchecksum = (0x00+0x00+0x00+0x00+0x00+0x00+0x00+0x00+0x00+0x00+0x00+0x00+0x00);
//byte notchecksum = (0xA0+0x8C+0x00+0x00+0x00+0x00+0x00+0x00+0xA0+0x8C+0x00+0x00);
digitalWrite(2,HIGH);
delay(100);
Serial.write(0x3E);
Serial.write(0xA4);
Serial.write(0x01);
Serial.write(0x07);
Serial.write(0xEA);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(notchecksum);
Serial.flush();
digitalWrite(2,LOW);
delay(100);
ab=Serial.read();
Serial.print("ab - ");
Serial.println(ab);
}