Я работаю над приложением Qt / C ++.Я хочу показать состояние трех датчиков Холла, поэтому я читаю его с микроконтроллера следующим образом:
uint8_t state = getState(whichMotor);
int numChars = sprintf(sBuff, "%d", state);
HAL_UART_Transmit_DMA(&huart3, sBuff, numChars);
Состояние может быть любым 1, 5, 4, 6, 2 или 3.
Тогда в моем приложении Qt у меня есть 3 метки, и я хочу показать, установлен ли соответствующий бит в числе, которое я получаю от UART.Я уверен, что получаю правильное число, когда я показываю его как целое число, это хорошо.Но разбить его на 3 бита на три метки я не могу, так как он просто показывает 1 1 1 или 0 0 0.
Вот мой код на ПК:
const void MotorWidget::setHallState(const QString& s)
{
int hallState = s.toInt();
ui->lbValueHallC->setText(hallState & 0b100 > 0 ? "1" : "0");
ui->lbValueHallB->setText(hallState & 0b010 > 0 ? "1" : "0");
ui->lbValueHallA->setText(hallState & 0b001 > 0 ? "1" : "0");
}
Например,если я получу hallState
как 5, метка C должна показать «1», метка B должна показать «0», а метка A должна показать «1» ... но, как я уже сказал, я получаю только 111 или 000 независимо от того, что я получаю.
Я подозреваю, что это может быть последовательность байтов с прямым порядком байтов ... но я понятия не имею, как это исправить