Arduino Pro Micro: cómo acceder a A1

Tengo una placa Arduino ProMicro 5V 16MHz de sparkfun.

Tengo un LiPo de 3 celdas que lo alimenta todo (a través del regulador relevante que lo reduce a 5V). Esto es parte de un TriCopter. Toco el pin positivo de 12 V a través de un divisor de voltaje en el pin A1 (si el USB está apuntando hacia arriba y los pines lejos de usted, este es el sexto pin desde la parte inferior derecha).

¿Cómo me refiero a este pin en mi programa? A1 es: static const uint8_t A1 = 19U. Esto lee 0V de mi batería.

Mi código es el siguiente:

/*
 * Battery Sensor
 * Battery Voltage monitor 
 */
const float ReferenceVoltage = 5;   //default reference on a 5-volt board
const float R1 = 54350;//49200;             //55K2 Ohm resister
const float R2 = 32600;//31000;             //32K6 Ohm resister
const float ResistorFactor = 1023.0*(R2/(R1+R2));
const int BatteryPin = A1;          // V(out) of Voltage devider circuit is attached to analog pin A1


/// <summary>
/// Reads the current Battery voltage
/// </sumary>
void ReadBatteryVoltage()
{
    int Value = analogRead(BatteryPin); //read the value from the Analog Pin
    //Serial.println(Value);
    float BatteryVoltage = (Value/ResistorFactor)*ReferenceVoltage; //Calculate the ratio
}

Sé que este es un foro de electrónica y estoy haciendo una pregunta de programación, pero esto es electrónica. Apreciaría cualquier sugerencia. Esto me está volviendo loco.

actualización: Gracias a PeterJ por ayudarme a confirmar lo que sabía sobre qué Pin leer y también por la sintaxis mejorada. Sin embargo, el problema estaba en la línea 8 a continuación:

1: /// <summary>
2: /// Reads the current Battery voltage
3: /// </sumary>
4: void ReadBatteryVoltage()
5: {
6:  int Value = analogRead(BATTERY_PIN);    //read the value from the Analog Pin
7:  //Serial.println(Value);
8:  BatteryVoltage = (Value/ResistorFactor)*ReferenceVoltage;   //Calculate the ratio
9: }

Esa variable local fue la que se completó con el voltaje de la batería que se leyó desde BATTERY_PIN, dejando la variable global con un nombre similar, en otra parte de mi aplicación en su estado predeterminado de 0.0;

Acabo de eliminar la declaración de tipo que hizo que usara la variable global como debería y todo funcionó bien.

Este es el tipo de cosas que vuelven locos a los programadores. El hardware es difícil... ¡pfff! el hardware es difícil porque la mayoría del hardware ahora requiere software. ;-)... que, por supuesto, está mal creado por el software húmedo.

Respuestas (1)

Puede haber otros problemas, pero de acuerdo con la documentación de Arduino analogRead

Sintaxis

lectura analógica (pin)

Parámetros

pin: el número del pin de entrada analógica para leer (0 a 5 en la mayoría de las placas, 0 a 7 en Mini y Nano, 0 a 15 en Mega)

Entonces, como A1 se define como 19U, debe cambiar:

const int BatteryPin = A1;

A lo siguiente:

const int BatteryPin = 1;

Personalmente, también echaría un vistazo al uso de declaraciones #define del preprocesador en esos casos en lugar de constantes, que pueden consumir memoria adicional dependiendo de las optimizaciones del compilador, por lo que podría usar lo siguiente:

#define BatteryPin 1

Aunque por convención para preprocesador define normalmente sería:

#define BATTERY_PIN 1
Cuando cambio "const int BatteryPin = 1" a "#define BATTERY_PIN 1", aparece un error en la línea donde hago la lectura analógica que dice "Error: ¿Se esperaba un ')'"?!?
¿Supongo que no habrá puesto un punto y coma al final de la línea por costumbre? Si es así, el resultado terminaría como analogRead(1;)
Estaba a punto de venir y publicar exactamente eso. Se eliminó el punto y coma y todo se compila.