analogRead (0) o analogRead (A0)

14

La referencia de arduino indica que usaría el siguiente código para leer el valor del pin analógico # 5:

int val1 = analogRead(5);

Sin embargo, para leer el pin digital número 5, pasaría el mismo número de pin a digitalRead :

int val2 = digitalRead(5);

¿No deberías usar analogRead(A5) en lugar de analogRead(5) ?

Si no es así, ¿qué hace el siguiente código:

int val3 = analogRead(A5);
    
pregunta Tyilo

1 respuesta

25

Para responder a las preguntas específicas de Tyilo:

analogRead(5) y digitalRead(5) leerán desde dos lugares diferentes. El primero leerá del canal analógico 5 o A5 y el último leerá del pin 5 que sucede para ser un pin digital. Así que sí, si quieres leer un pin analógico con digitalRead deberías usar A5 .

¿Por qué ?

analogRead requiere un número de canal internamente, pero también le permitirá darle un número de pin. Si le da un número de pin, lo convertirá a su número de canal correspondiente. Por lo que sé, analogRead es la única función que usa un número de canal internamente, es la única que permite un número de canal y es la única función con esta conversión de pin a canal no documentada. Para entender esto, comencemos con algunos ejemplos.

Si desea utilizar analogRead en el primer pin analógico A0 , puede hacer analogRead(0) que usa el número de canal o analogRead(A0) que usa el número de pin. Si utilizara la variante del número de pin, analogRead convertiría el número de pin A0 a su número de canal correcto 0 .

Si desea utilizar digitalWrite en el primer pin analógico A0 , solo puede hacer hacer digitalWrite(A0, x) . digitalWrite no usa canales analógicos internamente y no le permite pasar un número de canal. Bueno, le dejará a usted, pero seleccionará el pin incorrecto. Lo mismo se aplica a digitalRead e incluso a analogWrite .

¿Qué pasa con las conversiones de pin a canal realizadas por analogRead ? La fuente para esa función se puede encontrar en hardware/arduino/avr/cores/arduino/wiring_analog.c . Verás que hace una simple resta basada en el tipo de placa. El A0 / A1 / A2 / etc. las constantes representan el número de pin de los canales analógicos y se pueden utilizar en cualquier lugar donde necesite referirse a las entradas analógicas. Por esa razón, son la mejor opción para usar en tu código Arduino porque es muy obvio que estás usando el mismo puerto físico incluso cuando estás usando diferentes funciones. Las definiciones de esas constantes dependen de su tablero.

Por ejemplo, aquí está el código de definición de pin analógico para Arduino Uno en hardware/arduino/avr/variants/standard/pins_arduino.h

static const uint8_t A0 = 14;
static const uint8_t A1 = 15;
static const uint8_t A2 = 16;
static const uint8_t A3 = 17;
static const uint8_t A4 = 18;
static const uint8_t A5 = 19;
static const uint8_t A6 = 20;
static const uint8_t A7 = 21;

Para comparaciones aquí está el código de definición de pin analógico para Arduino Mega:

static const uint8_t A0 = 54;
static const uint8_t A1 = 55;
static const uint8_t A2 = 56;
[...]
static const uint8_t A13 = 67;
static const uint8_t A14 = 68;
static const uint8_t A15 = 69;

Más discusiones sobre EE en pines analógicos: ¿Puedo usar los pines analógicos en Arduino para mi proyecto como digital?

    
respondido por el Kevin Mark

Lea otras preguntas en las etiquetas