Diferencia entre revisiones de «bitRead()»
De ArduWiki
(→Ejemplo 4) |
|||
(No se muestran 18 ediciones intermedias de 2 usuarios) | |||
Línea 1: | Línea 1: | ||
== Descripción == | == Descripción == | ||
− | + | 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 == | ||
− | + | 1 o 0 dependiendo del valor de dicho bit | |
== Advertencias == | == Advertencias == | ||
Nada. | Nada. | ||
− | == Ejemplo == | + | == Ejemplo 1 == |
− | < | + | Revisar el bit más significativo (izquierda) es una manera alternativa para detectar un valor entero negativo en un numero tipo [[char]]. |
− | </ | + | |
+ | <syntaxhighlight lang="c++"> | ||
+ | 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"); | ||
+ | } | ||
+ | </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 == | ||
− | + | <categorytree mode=all>Funciones bit y byte</categorytree> | |
− | + | <categorytree mode=all>Operador bit a bit</categorytree> | |
− | |||
− | |||
− | |||
− | |||
− | == 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
Contenido
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