Что то никак не соображу как сделать. В конце строки ИБП есть массив статуса в виде 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 не получается, а хотелось бы.
ua6em
22.Апрель.2023 08:27:55
24
selan61:
через bool
что bool что uint8_t занимают ровно один байт
Так то оно так, но с bool как то удобнее, это же флаги состояния ИБП, и там 0 или 1. Сразу из scanf в bool не получается, если тока int перевести в bool.
ua6em
22.Апрель.2023 08:32:31
26
да какая разница?
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 лайк
Это то понятно, а разница в чем?
ua6em
22.Апрель.2023 08:34:33
28
я и говорю, никакой разницы для нас не настоящих сталеваров нет, а вот настоящие щас встрепенутся
Наверняка можно закастовать указатель на bool к uint8 и сканфу скормить.
Типа:
bool var;
...
sscanf("....", (uint8_t*)&var);
1 лайк
Спасибо, уже запустил с интами. Работает, устраивает, зачем ему мешать.