我有一个绝对编码器(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。
任何帮助将不胜感激。谢谢。