Muy buenos días (o noches) a todos, dependiendo de la parte del planeta en la que os encontréis. Necesito ayuda con un proyecto en arduino que estoy haciendo. Tengo una protoboard con 2 displays de 7 segmentos controlados por dos pulsadores. Uno es para START/STOP y otro para PAUSE. Estos dos pulsadores controlan 2 los 3 displays , el primero de los digitos indica las decenas y el segundo las unidades, el tercero es fijo y muestra siempre el numero 0. El problema se me presenta porque además quiero añadir un potenciometro que al girarlo cambiase los dígitos de los 2 primeros displays entre 00 y 99 en cualquier momento de la simulación. La siguiente imagen muestra el proyecto montado con el potenciometro:
El código que tengo actualmente para el contador es el siguiente:
// --- Mapeado de Hardware ---
#define DISPLAY_1 9
#define DISPLAY_2 10
#define START_STOP 11
#define RESET 12
int display7seg(int number);
void reset();
void multiplex(int value);
bool hasClickStoped();
int dez, // decena
uni, // unidad
counter = 0;
bool stoped = false;
unsigned long timeStart, timeEnd = 0;
void setup()
{
for(char i= 0; i< 7; i++) pinMode(i, OUTPUT); // Salidas Display 7Seg (PORTD)
for(char k=11; k<13; k++) pinMode(k, INPUT_PULLUP); // Entrada pulsadores
for(char j= 9; j<11; j++) pinMode(j, OUTPUT); // Salidas (comutador display)
digitalWrite(DISPLAY_1, LOW);
digitalWrite(DISPLAY_2, LOW);
}
void loop()
{
timeStart = millis();
multiplex(counter);
verifyReset();
if(!hasStoped() && timeStart - timeEnd > 1000) {
if(counter < 59) {
counter++;
} else {
counter = 0;
}
timeEnd = timeStart;
}
}
int display7seg(int number)
{
//Declaracion e inicializacion del vector segmento
int segmento[10] = {0x3f, //Dato referente al BCD '0'
0x06, //Dato referente al BCD '1' 0x5b, //Dado referente ao BCD '2'
0x4f, //Dato referente al BCD '3'
0x66, //Dato referente al BCD '4'
0x6d, //Dato referente al BCD '5'
0x7d, //Dato referente al BCD '6'
0x07, //Dato referente al BCD '7'
0x7f, //Dato referente al BCD '8'
0x67}; //Dato referente al BCD '9'
return segmento[number];
}
void verifyReset() {
if(digitalRead(RESET)){
counter = 0;
timeEnd = timeStart;
}
}
bool hasStoped() {
if(digitalRead(START_STOP)){
stoped = !stoped;
delay(3);
}
return stoped;
}
void multiplex(int value)
{
dez = value/10;
PORTD = display7seg(dez);
digitalWrite(DISPLAY_1, HIGH);
delay(5);
digitalWrite(DISPLAY_1, LOW);
uni = value%10;
PORTD = display7seg(uni);
digitalWrite(DISPLAY_2, HIGH);
delay(15);
digitalWrite(DISPLAY_2, LOW);
}
Y el código del potenciometro que me querría añadir seria algo parecido a esto:
int unidade;
int dezena;
int pinounidade[]={8,7,6,5};
int pinodezena[]={12,11,10,9};
int numero[10][4] ={
{ 0, 0, 0, 0},//0
{ 0, 0, 0, 1},//1
{ 0, 0, 1, 0},//2
{ 0, 0, 1, 1},//3
{ 0, 1, 0, 0},//4
{ 0, 1, 0, 1},//5
{ 0, 1, 1, 0},//6
{ 0, 1, 1, 1},//7
{ 1, 0, 0, 0},//8
{ 1, 0, 0, 1} //9
};
void setup()
{
Serial.begin(960);
}
void loop()
{
int valor = analogRead(A1);
valor = map(valor, 0, 1024, 99, 0);
dezena = valor * 0.1;
unidade = valor % 10;
for( int i = 0; i < 4; i++){
digitalWrite(pinounidade[i],numero[unidade][i]);
digitalWrite(pinodezena[i],numero[dezena][i]);
}
delay(500);
}
Muchisimas gracias por adelantado a todos. Soy un neófito total y absoluto en el tema y seria de grandisima ayuda que alguien me echase un cable con esto. Intenté hacerlo mediante el CHAT de OPENAI pero no habia manera, con lo cual creo que mejor hablar con personas directamente que con maquinas