Чтение абсолютного энкодера с выводом серого кода - PullRequest
0 голосов
/ 08 июня 2019

У меня есть абсолютный энкодер (Hengstler AD36), который выдает 12-битное значение позиции с серым кодом.Я пытаюсь преобразовать это значение в десятичное, то есть в градусах от 0 до 360.

У меня есть 12-битное значение в сером коде с помощью Arduino. Я прочитал порт 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 градусов)?

Основная проблема, которую я не мог решить, я нашел некоторые функции, которые преобразуют серый код в двоичный, а затем легко преобразовать его в десятичный.Однако эти функции принимают ввод в виде строки или целого числа, и я понятия не имею о преобразовании значения data в int .

Любая помощь будет принята с благодарностью,Спасибо.

...