0

我有一个绝对编码器(Hengstler AD36),它提供 12 位位置值和格雷码。我正在尝试将该值转换为十进制,我的意思是 0 到 360 度。

我使用 Arduino 获得了格雷码的 12 位值。我已经读取了 Arduino 端口并将其转换为 Python,但我需要在 Arduino 中进行。但是,我无法将其转换为 Arduino 中任何有意义的数字。

///Pin setup for the Sensor
const int CLOCK_PIN = 18;
const int DATA_PIN = 19;
const int DATA_PIN2 = 17;
///12-bit sensor
const int BIT_COUNT = 12;

void setup() {
  //setup our pins
  pinMode(DATA_PIN, INPUT);
  pinMode(CLOCK_PIN, OUTPUT);
  //give some default values
  digitalWrite(CLOCK_PIN, HIGH);
  Serial.begin(9600);
}
void loop() {
  unsigned long reading1 = readPosition1();
  Serial.print(reading1,BIN);
  Serial.print(",");
  delay(50);
}

//read the current angular position
int readPosition1() {
  unsigned long sample1 = shiftIn(DATA_PIN, CLOCK_PIN, BIT_COUNT);

  delayMicroseconds(25);  // delay for clock
  return sample1;
  }


//read in a byte of data from the digital input of the board.
unsigned long shiftIn(const int data_pin, const int clock_pin, const int bit_count) {
  unsigned long data = 0;

  for (int i=0; i<bit_count; i++) {
    data <<= 1;
    digitalWrite(clock_pin, LOW);
    delayMicroseconds(1);
    digitalWrite(clock_pin, HIGH);
    delayMicroseconds(1);

    data |= digitalRead(data_pin);
  }

  return data;
}

如何将数据转换为十进制(0 到 360 度)?

我无法解决的主要问题,我找到了一些将格雷码转换为二进制的函数,然后将其转换为十进制很容易。但是,这些函数将输入作为字符串或 int,我不知道将数据值转换为int

任何帮助将不胜感激。谢谢。

4

0 回答 0