Arduino Pro Micro: cómo acceder a A1

2

Tengo un tablero Arduino ProMicro 5V 16MHz de sparkfun.

Tengo un LiPo de 3Cell que alimenta todo el proceso (a través del regulador correspondiente que lo lleva a 5V). Esto es parte de un TriCopter. Presiono el pin positivo de 12 V a través de un dispositivo de selección de voltaje en el pin A1 (si el USB apunta hacia arriba y los pines se alejan de usted, este es el sexto pin de 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 esto es un foro de electrónica y estoy haciendo una pregunta de programación, pero esta es electrónica. Yo apreciaría cualquier puntero. 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 llenó con el voltaje de la batería que se lee desde BATTERY_PIN y deja la variable global de 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 cosa que vuelve locos a los programadores. El hardware es duro ... pfff! El hardware es difícil porque la mayoría del hardware ahora requiere software. ; -) ... que por supuesto está mal creado por wetware.

    
pregunta Gineer

1 respuesta

1

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

  

Sintaxis

     

analogRead (pin)

     

Parámetros

     

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

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

const int BatteryPin = A1;

A lo siguiente:

const int BatteryPin = 1;

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

#define BatteryPin 1

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

#define BATTERY_PIN 1
    
respondido por el PeterJ

Lea otras preguntas en las etiquetas