Diferencia entre revisiones de «bitRead()»

De ArduWiki
Saltar a: navegación, buscar
m (Tiene retorno y agregué un ejemplo)
(Ejemplo 4)
 
(No se muestran 17 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
 
== Descripción ==
 
== Descripción ==
Lee un bit de una variable.
+
Lee un bit especifico de una variable.
  
 
== Sintaxis ==
 
== Sintaxis ==
Línea 9: Línea 9:
 
== Parámetros ==
 
== Parámetros ==
 
;variable: variable a evaluar.
 
;variable: variable a evaluar.
;n: bit a leer.
+
;n: bit a leer. Empezando en 0 el menos significativo (derecha).
  
 
== Retornos ==
 
== Retornos ==
Línea 17: Línea 17:
 
Nada.
 
Nada.
  
== Ejemplo ==
+
== Ejemplo 1 ==
Revisar el bit más significativo es una manera alternativa para detectar un valor entero negativo.
+
Revisar el bit más significativo (izquierda) es una manera alternativa para detectar un valor entero negativo en un numero tipo [[char]].
<pre>
+
 
 +
<syntaxhighlight lang="c++">
 
char c = 200; // Al ser un tipo de dato con signo, 200 se traduce a -56
 
char c = 200; // Al ser un tipo de dato con signo, 200 se traduce a -56
if (bitRead(c, 7)) Serial.println("Es negativo");
+
if (bitRead(c, 7)){
else Serial.println("Es positivo");
+
  Serial.println("Es negativo");
</pre>
+
}else{
 +
  Serial.println("Es positivo");
 +
}
 +
</syntaxhighlight>
 +
 
 +
== Ejemplo 2 ==
 +
Leer un [[byte]] e imprimirlo al reves (izquierda a derecha).
 +
 
 +
<syntaxhighlight lang="c++">
 +
void setup() {
 +
  Serial.begin(9600);
 +
  byte pinState = B10101010;
 +
  for (byte i=0; i<8; i++) {
 +
      Serial.print(bitRead(pinState, i));
 +
  }
 +
}
 +
 
 +
void loop(){
 +
  //Nada
 +
}
 +
</syntaxhighlight>
 +
 
 +
== Ejemplo 3 ==
 +
En este ejemplo usamos un 74x595 para manejar 7 LED con 3 pines de Arduino. En los LEd se mostraran los numero de 0~255 en binario.
 +
 
 +
<syntaxhighlight lang="c++">
 +
void setup(){
 +
  Serial.begin(115200);
 +
  pinMode(9, OUTPUT);  //STC (12), Latch pin
 +
  pinMode(10, OUTPUT);  //SHC (11), Shift register
 +
  pinMode(11, OUTPUT);  //DS (14), Data in
 +
}
 +
void loop(){
 +
  for (byte n=0; n<256; n++){
 +
      Serial.println(n);
 +
      for (byte i=0; i<8; i++){
 +
        digitalWrite(11, bitRead(n,i));  //Ingresamos bit uno a uno
 +
        digitalWrite(10, HIGH);  //Pulso de Shift
 +
        digitalWrite(10, LOW);
 +
      }
 +
      digitalWrite(9, HIGH);  //Pulso de Latch
 +
      digitalWrite(9, LOW);
 +
      delay(500); 
 +
  }
 +
}
 +
</syntaxhighlight>
 +
 
 +
== Ejemplo 4 ==
 +
Tenemos 8 LEDs (2 al 9) y un pulsados (pin 10). Cada vez que pulsamos avanzamos '''n''' en una unidad y mostramos '''n''' en binario.
 +
 
 +
<syntaxhighlight lang="c++">
 +
const byte LED[] = {2, 3, 4, 5, 6, 7, 8, 9};
 +
const byte boton = 10;
 +
bool actual,anterior;
 +
byte n;
 +
 
 +
void setup() {
 +
  for (byte i=0; i<8; i++) {
 +
      pinMode(LED[i], OUTPUT);
 +
  }
 +
  pinMode(boton, INPUT);
 +
}
 +
 
 +
void loop() {
 +
  actual = digitalRead(boton);
 +
  if (actual && !anterior){
 +
      n++;
 +
      for (byte i=0; i<8; i++) {
 +
        digitalWrite(LED[i], bitRead(n, i));
 +
      }
 +
  }
 +
  anterior = actual;
 +
}
 +
</syntaxhighlight>
  
 
== Vea también ==
 
== Vea también ==
* [[bit()]]
+
<categorytree mode=all>Funciones bit y byte</categorytree>
* [[bitClear()]]
+
<categorytree mode=all>Operador bit a bit</categorytree>
* [[bitSet()]]
 
* [[bitWrite()]]
 
* [[highByte()]]
 
* [[lowByte()]]
 
  
== Referencias ==
+
== Referencias externas ==
 
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
 
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
  
[[Category:Funciones]]
+
[[Category:Funciones bit y byte]]

Revisión actual del 23:53 17 jul 2019

Descripción

Lee un bit especifico de una variable.

Sintaxis

bitRead(variable, n);

Parámetros

variable
variable a evaluar.
n
bit a leer. Empezando en 0 el menos significativo (derecha).

Retornos

1 o 0 dependiendo del valor de dicho bit

Advertencias

Nada.

Ejemplo 1

Revisar el bit más significativo (izquierda) es una manera alternativa para detectar un valor entero negativo en un numero tipo char.

char c = 200; // Al ser un tipo de dato con signo, 200 se traduce a -56
if (bitRead(c, 7)){
   Serial.println("Es negativo");
}else{
   Serial.println("Es positivo");
}

Ejemplo 2

Leer un byte e imprimirlo al reves (izquierda a derecha).

void setup() {
   Serial.begin(9600);
   byte pinState = B10101010;
   for (byte i=0; i<8; i++) {
      Serial.print(bitRead(pinState, i));
   }
}

void loop(){
   //Nada
}

Ejemplo 3

En este ejemplo usamos un 74x595 para manejar 7 LED con 3 pines de Arduino. En los LEd se mostraran los numero de 0~255 en binario.

void setup(){
   Serial.begin(115200);
   pinMode(9, OUTPUT);   //STC (12), Latch pin
   pinMode(10, OUTPUT);  //SHC (11), Shift register
   pinMode(11, OUTPUT);  //DS (14), Data in
}
void loop(){
   for (byte n=0; n<256; n++){
      Serial.println(n);
      for (byte i=0; i<8; i++){
         digitalWrite(11, bitRead(n,i));  //Ingresamos bit uno a uno
         digitalWrite(10, HIGH);  //Pulso de Shift
         digitalWrite(10, LOW);
      }
      digitalWrite(9, HIGH);  //Pulso de Latch
      digitalWrite(9, LOW);
      delay(500);  
   }
}

Ejemplo 4

Tenemos 8 LEDs (2 al 9) y un pulsados (pin 10). Cada vez que pulsamos avanzamos n en una unidad y mostramos n en binario.

const byte LED[] = {2, 3, 4, 5, 6, 7, 8, 9};
const byte boton = 10;
bool actual,anterior;
byte n;

void setup() {
   for (byte i=0; i<8; i++) {
      pinMode(LED[i], OUTPUT);
   }
   pinMode(boton, INPUT);
}

void loop() {
   actual = digitalRead(boton);
   if (actual && !anterior){
      n++;
      for (byte i=0; i<8; i++) {
         digitalWrite(LED[i], bitRead(n, i));
      }
   }
   anterior = actual;
}

Vea también


Referencias externas