Why does port A2 receive a constant current with a value of 16 with that program?

Hello,
Can anyone tell me why the board detects a constant current of 16 through pin A2 with this program (which does not change when I connect ground or 5v)?

#include "Arduino_SensorKit.h"

const int switchPin = 6;
int switchState = 0;
int prevSwitchState = 0;
int reply; //cosas de la pantalla

int seconds = 0;
int ledPins[] = {8, 9, 10}; // Ajusta los números de pin según tu circuito
int numLeds = 3; // Número de LEDs en el circuito

unsigned long previousMillis = 0; // Variable para almacenar el tiempo anterior
const unsigned long interval = 250; // Intervalo deseado
int ledIndex = 0; // Variable para rastrear el índice del LED

	
#define BUZZER 5 //Altavoz pin 5 ocupado
unsigned long previousMillisBuzzer = 0;
const unsigned long intervalBuzzer = 750; // Intervalo deseado
bool buzzerState = false; // Estado actual del zumbador

String resultado = ""; //almacena el resultado
unsigned long tiempoUltimaCaptura = 0; // Tiempo de la última captura
bool capturaActiva = false; // Indica si se está capturando señales
unsigned long tiempoEspera = 10; // Tiempo de espera entre lecturas 

int vecesimpreso = 0;


void setup() {
  // put your setup code here, to run once:
  for (int i = 0; i < numLeds; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
  //pinMode(BUZZER, OUTPUT);
  Serial.begin(9600);

  capturaActiva = true;

}

void loop() {
  // put your main code here, to run repeatedly:
  unsigned long currentMillis = millis(); // Obtiene el tiempo actual

  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis; // Actualiza el tiempo anterior
    // Realiza la acción específica (encender o apagar el LED)
    digitalWrite(ledPins[ledIndex], !digitalRead(ledPins[ledIndex]));
    // Avanza al siguiente LED
    ledIndex = (ledIndex + 1) % numLeds;
  }
  unsigned long currentMillisBuzzer = millis(); // Obtiene el tiempo actual
  /*if (currentMillisBuzzer - previousMillisBuzzer >=intervalBuzzer) {
    previousMillisBuzzer = currentMillisBuzzer; //ACT Tiempo
    // Alterna el estado del zumbador
    buzzerState = !buzzerState;
    if (buzzerState) {
      tone(BUZZER, 4000); // Enciende el zumbador
    } else {
      noTone(BUZZER); // Apaga el zumbador
    }
  }*/
 
  if (capturaActiva) {
    unsigned long tiempoActual = millis();
    if (tiempoActual - tiempoUltimaCaptura >= tiempoEspera) {
      int senal = analogRead(A2);
      if (senal >= 1020) {
        resultado += "A";
        tiempoUltimaCaptura = tiempoActual;
      } else if (senal >= 990 && senal <= 1010) {
        resultado += "B";
        tiempoUltimaCaptura = tiempoActual;
      } else if (senal >= 490 && senal <= 520) {
        resultado += "C";
        tiempoUltimaCaptura = tiempoActual;
      } else if (senal >= 4 && senal <= 20) {
        resultado += "D";
        tiempoUltimaCaptura = tiempoActual;
    }
  }
  }
  if (resultado.length() == 4 && vecesimpreso == 0 ) {
    capturaActiva = false;
    Serial.println(resultado);
    vecesimpreso++;
  }
  Serial.println(A2);
}

And when I use this code it gives normal readings (0 or 1023)?

int pinA2 = A2; // Pin A2

void setup() {
  Serial.begin(9600); 
}

void loop() {
  int valor = analogRead(pinA2);
  Serial.print("Valor en A2: ");
  Serial.println(valor); 
  delay(500); 
}

In the first sketch you're printing the value of A2, which is 16 (A0 is pin 14, A1 is pin 15, A2 is pin 16, etc.). Print senal to see the value that you're reading from analog pin A2.

Because you are not printing senal but the value of a pin number A2 which equals 16

I am an idiot.

We've all been there...

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.