Hola a todos comunidad de developers ! mil saludos, recurro a este foro para plantear la siguiente situación : Tengo una pantalla con comunicación serial de la cual recibo datos, justamente estoy recibiendo los valores de 7 bits por ejemplo :
byte datos_pantalla = 0x7F;
// Lo que en binario seria 0b0111 1111
Ahora lo que necesito es crear un array booleano para almacenar cada bit independiente con su valor TRUE o FALSE de acuerdo a la variable "datos_pantalla" por ejemplo :
datos_pantalla = 0x75;
bool binario[7] = datos_pantalla;
Serial.println("El bit 0 es :") // En este ejemplo debe ser 1
Serial.println("El bit 1 es :") // En este ejemplo debe ser 0
Serial.println("El bit 2 es :") // En este ejemplo debe ser 1
Serial.println("El bit 3 es :") // En este ejemplo debe ser 0
Serial.println("El bit 4 es :") // En este ejemplo debe ser 1
Serial.println("El bit 5 es :") // En este ejemplo debe ser 1
Serial.println("El bit 6 es :") // En este ejemplo debe ser 1
De antemano muchas gracias se que es una cuestión simple aunque quiero aprender cosas nuevas y ver desde el punto de vista de otros expertos, cual es el método mas limpio, organizado y con el uso eficiente de los recursos en programación !
Hola de nuevo !, recién se me presento el caso contrario, ahora como puedo convertir el array booleano y transferirlo a la variable entera o byte ... por ejemplo :
bool binario[7] = {0,1,1,1,0,0,1};
byte transferir_binario = binario; // Tendría un valor de 57 decimal - 0b00111001
Pero no te dije que hagas eso.
La idea es que leas directamente los bits de la variable y no usar un array.
Ya tenés en un byte los 7 bits que necesitas, ¿para qué el array?
El array es para clasificar cada bit para el control individual, por ejemplo suponiendo que sean opciones al igual que al pulsar 7 botones diferentes, entonces cada bit representa la activación o desactivación de una opción por ejemplo bit 0 : Activar o no relé 1 , bit 1 : Activar o no relé 2 … etc. Ahora el entero solo lo necesito para poder enviar por el puerto serial por ejemplo ...
bool bites[8]; //bool donde se guardarán los true o false según peso (0 menor peso, 7 mayor peso)
byte valor; //variable que convertiremos a array de bits
int b; //para recorrer bucles
void setup() {
Serial.begin(9600);
valor=123;
Serial.print("Valor actual:");
Serial.println(valor);
//guardar valores en el array bool:
for (int b=0;b<8;b++){
if ((1<<b) & (valor)) bites[b]=true; else bites[b]=false;
}
//imprimimos valores OJO: están invertidas las posiciones
Serial.print("Valores bits:");
for (int b=0;b<8;b++) Serial.print(bites[b]);
Serial.println("\nAhora valor vale cero");
valor=0;
//ahora pasamos del array bool a "valor"
for (int b=0;b<8;b++){
if (bites[b]) valor=valor | (1<<b);
}
Serial.print("Ahora valor vale:");
Serial.println(valor);
Serial.println("fin");
}
void loop() {
}
Y esta es la salida:
Valor actual:123
Valores bits:11011110
Ahora valor vale cero
Ahora valor vale:123
fin