У меня есть абсолютный энкодер (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 .
Любая помощь будет принята с благодарностью,Спасибо.