Diferencia entre revisiones de «digitalRead()»
(→Vease también) |
(→Descripción) |
||
Línea 1: | Línea 1: | ||
== Descripción == | == Descripción == | ||
Lee el valor del pin digital dando un resultado. Los valores pueden ser [[HIGH / LOW]]. | Lee el valor del pin digital dando un resultado. Los valores pueden ser [[HIGH / LOW]]. | ||
+ | |||
+ | {{Tip|Los pines tanto analógicos como digitales de '''entrada''' no necesitan ser definidos con [[pinMode()]].}} | ||
== Sintaxis == | == Sintaxis == |
Revisión del 22:20 12 jun 2019
Contenido
Descripción
Lee el valor del pin digital dando un resultado. Los valores pueden ser HIGH / LOW.
Tip: Los pines tanto analógicos como digitales de entrada no necesitan ser definidos con pinMode().
Sintaxis
digitalRead(pin);
Parámetros
- pin
- es el numero del pin digital a usar (0~13 + 14~19). Puedes usar const byte para de definir el numero de pin.
Retorno
Devuelve el valor del pin: HIGH / LOW.
Comentarios
Tip: Este comando tarda 58 ciclos de CPU en salidas digitales sin PWM y 72 ciclos en salidas digitales con PWM.
Advertencias
En muchos ejemplo se ve que usan una variable de tipo int para definir el pin a usar. Esto es un grave error por dos motivos:
- La variable sera almacenada en memoria SRAM porque se espera que su valor cambie durante la ejecución del boceto, pero normalmente en los pines esto nunca ocurre, por lo que es preferible usar const que es almacenada en flash.
- El tipo int ocupa 2 byte. Es suficiente usar el tipo byte (0~255) que solo ocupa 1 byte.
Ejemplo
Cuando presionamos el pulsador el LED a bordo se prende, soltamos y se apaga. Poner un pulsador entre pin digital 3 y GND.
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
pinMode(3, INPUT_PULLUP);
}
void loop(){
if (digitalRead(3) == LOW){
digitalWrite(LED_BUILTIN, HIGH); //Prende LED
}else{
digitalWrite(LED_BUILTIN, LOW); //Apaga LED
}
}
Nota: digitalRead() retorna un verdadero mientas no estas pulsando el botón gracias a su configuración INPUT_PULLUP, asi que es exactamente lo mismo si pones !digitalRead(3) como condición.
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
pinMode(3, INPUT_PULLUP);
}
void loop(){
if (!digitalRead(3)){
digitalWrite(LED_BUILTIN, HIGH); //Prende LED
}else{
digitalWrite(LED_BUILTIN, LOW); //Apaga LED
}
}
Otra manera de hacer lo mismo es:
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
pinMode(3, INPUT_PULLUP);
}
void loop(){
if (!digitalRead(3)){
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); //Conmuta LED
}
}
Vease también
Referencias externas
- Niveles lógicos en Arduino
- Playground
- Entradas y salidas - Luis del Valle
- Pull-Up y Pull-Down - Laylamp
- Digital input/output - ITP Informatica Fisica
- Puertos Arduino - Kike_GL