Подключение к ИБП

Что то никак не соображу как сделать. В конце строки ИБП есть массив статуса в виде b7b6b5b4b3b2b1b0 например 00000001. Нужно каждый символ выделить в переменную типа bool, и в зависимости от их значения 0 или 1 выводить сообщение о состоянии ИБП. Типа такого:

char num[] = "00000001";
bool b7,b6,b5,b4,b3,b2,b1,b0;

void loop(){
b7 = (num[0]);b6 = (num[1]);b5 = (num[2]);b4 = (num[3]);
b3 = (num[4]);b2 = (num[5]);b1 = (num[6]);b0 = (num[7]);
  
  if(b7==1)Serial.println("Utility Fail"); 
  if(b6==1)Serial.println("Battery Low");   
  if(b5==1)Serial.println("Bypass Active");  
  if(b4==1)Serial.println("UPS Failed"); 
  if(b3==1)Serial.println("UPS is Standby");  
  if(b3==0)Serial.println("UPS is On_line"); 
  if(b2==1)Serial.println("Test in Progress");
  if(b1==1)Serial.println("Shutdown Active"); 
  if(b0==1)Serial.println("Beeper On");
}

Может направите на путь истинный?

Так scanf пусть и разберет.

1 лайк

Вроде получилось, но только через int, через bool не получается, а хотелось бы.

что bool что uint8_t занимают ровно один байт

Так то оно так, но с bool как то удобнее, это же флаги состояния ИБП, и там 0 или 1. Сразу из scanf в bool не получается, если тока int перевести в bool.

да какая разница?

  if(b7)Serial.println("Utility Fail"); 
  if(b6)Serial.println("Battery Low");   
  if(b5)Serial.println("Bypass Active");  
  if(b4)Serial.println("UPS Failed"); 
  if(b3)Serial.println("UPS is Standby");  
  if(!b3)Serial.println("UPS is On_line"); 
  if(b2)Serial.println("Test in Progress");
  if(b1)Serial.println("Shutdown Active"); 
  if(b0)Serial.println("Beeper On");
1 лайк

Это то понятно, а разница в чем?

я и говорю, никакой разницы для нас не настоящих сталеваров нет, а вот настоящие щас встрепенутся

Ясно.

Наверняка можно закастовать указатель на bool к uint8 и сканфу скормить.

Типа:

bool var;
...
sscanf("....", (uint8_t*)&var);
1 лайк

Спасибо, уже запустил с интами. Работает, устраивает, зачем ему мешать.