Buenas tardes
Soy un aficionado al tema de arduino y me gustaría saber si alguien puede ayudarme.
Estoy intentando emular una apertura de caja fuerte con dos combinaciones, utilizo dos potenciometros de 10k y lo que pretendo es que dada una determinada clave (en este caso de tres digitos para cada uno de los potenciometros), se abra un cajón (ahora suena un wav)..... es para un escape room
El caso, es que cuando leo el valor analogico del potenciometro los valores son indeterminados..... he mapeado la lectura para que devuelva un valor entre 0 y 9 y si muevo el potenciometro a una posición igual me lee 1, que 7 que otro valor..... Sólo lee correcto el 0 y el 9 (que corresponde con el 1023).
He intentado de todo, cambiar potenciometros, hacer un for de 10 (y más) lecturas y hallar la media, pero pasa lo mismo..... No se muy bien por donde meterle mano.
A lo mejor es que estoy intentando hacer algo con un sensor que no está pensado para eso pero no se me ocurre otra manera.
Me podeis ayudar?.
Muchas gracias
#include <SPI.h>
#include <SD.h>
#include <pcmConfig.h>
#include <pcmRF.h>
#include <TMRpcm.h>
#define SD_ChipSelectPin 53
TMRpcm audio;
//Declaración de variables antes del setup:
int potenciometro1=2; //El potenciómetro1 está conectado al pin ANALÓGICO 2.
int potenciometro2=3; //El potenciómetro2 está conectado al pin ANALÓGICO 3.
int leer=0; //Variable en la que se almacenará el valor leído en el potenciómetro.
//se trata de un valor analógico (de 0 a 1023).
int total=0;
int media=0;
int ledOK1=13;
int convert=0; //Variable que contendrá el valor leído, convertido con función map() [rango de 0 a 9]
int convert_anterior=0; //Variable que almacena el número correspondiente a la anterior conversión.
int secreto1[]={9, 2, 7}; //Vector que contiene el primer número secreto
//que se compone de 3 cifras.
int secreto2[]={1, 5, 9}; //Vector que contiene el segundo número secreto
//que se compone de 3 cifras.
void setup()
{
pinMode(potenciometro1,INPUT); //El potenciómetro1 es una entrada.
pinMode(potenciometro2,INPUT); //El potenciómetro2 es una entrada.
Serial.begin(9600); //Se inicializa el puerto serial.
audio.speakerPin=11;
if(!SD.begin(SD_ChipSelectPin)){
Serial.println("SD fails");
return;
}
Serial.println("Prueba sonido");
audio.setVolume(5);
//audio.quality(1);
audio.play("3.wav");
delay(2000);
}
void playOK(){
Serial.println("suena audio");
//audio.stopPlayback();
audio.play("3.wav");
delay(2000);
return;
}
void playFIN(){
Serial.println("suena audio");
//audio.stopPlayback();
audio.play("tachan.wav");
delay(10000);
return;
}
void loop()
{
// Bucle for para el potenciometro
for (int i=0;i < 3;i++)
{
Serial.println("POTENCIOMETRO 1");
Serial.print("Adivina el primer numero secreto de la posicion ");
Serial.print(i+1);
Serial.println();
// Leer potenciometro1 (izquierda)
convert_anterior=0;
leer=analogRead(potenciometro1);
convert=map(leer, 0 , 1023 , 0 , 9);
delay(1000);
while(convert!=secreto1[i])
{
leer=analogRead(potenciometro1);
convert=map(leer, 0 , 1023 , 0 , 9); //Se cambia el rango. Ahora el máximo es 9.
if(convert!=convert_anterior && convert!=secreto1[i])
{
Serial.print(convert);
Serial.println(" no es el numero correcto");
delay(1000);
} else
{
//no hacer nada
}
convert_anterior=convert;
}
//Cuando sale del bucle anterior es porque hemos adivinado un número.
Serial.println();
Serial.print("Bien hecho! Has adivinado del potenciometro1 el numero de la posicion ");
Serial.print(i+1);
Serial.print(", que era el numero ");
Serial.print(convert);
Serial.println();
playOK();
Serial.println("POTENCIOMETRO 2");
Serial.print("Adivina el primer numero secreto de la posicion ");
Serial.print(i+1);
Serial.println();
// Leer potenciometro2 (derecha)
convert_anterior=0;
leer=analogRead(potenciometro2);
convert=map(leer, 0 , 1023 , 0 , 9);
delay(1000);
Serial.println(leer);
Serial.println(convert);
Serial.println(secreto2[i]);
while(convert!=secreto2[i])
{
leer=analogRead(potenciometro2);
convert=map(leer, 0 , 1023 , 0 , 9); //Se cambia el rango. Ahora el máximo es 9.
if(convert!=convert_anterior && convert!=secreto2[i])
{
Serial.print(convert);
Serial.println(" no es el numero correcto");
delay(1000);
} else
{
//no hacer nada
}
convert_anterior=convert;
}
//Cuando sale del bucle anterior es porque hemos adivinado un número.
Serial.println();
Serial.print("Bien hecho! Has adivinado del potenciometro2 el numero de la posicion ");
Serial.print(i+1);
Serial.print(", que era el numero ");
Serial.print(convert);
Serial.println();
playOK();
}
//Cuando salimos del último bucle es porque hemos acertado todos los números secretos.
playFIN();
Serial.println("____________________________________________");
Serial.println("Enhorabuena, has adivinado el numero secreto!");
Serial.println("____________________________________________");
Serial.println("Puedes volver a empezar pulsando el botón de RESET");
}
Os hago una copia del código para ver si alguien puede ayudarme.