Hola buen día, me inscribí a este foro para ver si puedo recibir un poco de ayuda. Ya he buscado soluciones por internet pero no son lo que esperaba.
Resulta que tengo 4 displays de 7 segmentos de cátodo común todos conectados a la misma entrada del Arduino para simular un solo display de 4 dígitos, y lo que busco que haga que solo se prendan los display de acuerdo al numero, es decir, si tengo 0 se debe encender solo el ultimo display y no todos que se prenden en 0 de un inicio, 0000, otro ejemplo seria con el #10 queda 0010 y yo busco --10, o el numero 0999 pero solo quiero que enciendan los últimos tres displays -999. No se si me explico. Esto es lo que llevo
byte pins[7]={2,3,4,5,6,7,8};
byte display[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x00};
byte digitos[4]={9,10,11,12};
void setup() {
for (byte i=0; i<7; i++) {
pinMode(pins[i],OUTPUT);
}
for (byte i=0; i<4; i++) {
pinMode(digitos[i],OUTPUT);
}
pinMode(14,INPUT);
pinMode(15,INPUT);
}
int cont=0;
int resto;
int divisor;
byte millares;
byte centenas;
byte decenas;
byte unidades;
byte valor;
byte swDer=0;
byte swIzq=0;
byte bit=0;
void loop() {
if(cont >= 0 && cont <= 9/* && bit = 0 valor = unidades*/) {
// pinMode(digitos[0],OUTPUT);
digitalWrite(digitos[1,2,3],display[10]);
digitalWrite(digitos[0],LOW);
}else {
if(cont >= 10 && cont <= 99/* && bit = 1 valor = decenas*/){
// pinMode(digitos[0,1],OUTPUT);
digitalWrite(digitos[2,3],display[10]);
digitalWrite(digitos[0,1],LOW);
}else {
if(cont >= 100 && cont <= 999/* && bit = 2 valor = centenas*/){
// pinMode(digitos[0,1,2],OUTPUT);
digitalWrite(digitos[3],display[10]);
digitalWrite(digitos[0,1,2],LOW);
}else {
if(cont >= 1000 && cont <= 9999/* && bit = 3 valor = millares*/){
// pinMode(digitos[0,1,2,3],OUTPUT);
digitalWrite(digitos[0,1,2,3],HIGH);
}
}
}
}
for (byte i=0; i<4; i++) {
digitalWrite(digitos[i],HIGH);
}
for (byte i=0; i<7; i++)
digitalWrite(pins[i],display[10]>>i&1);
delay(5);
digitalWrite(digitos[bit],LOW);
millares=cont/1000;
resto=cont%1000;
centenas=resto/100;
resto=resto%100;
decenas=resto/10;
unidades=resto%10;
if (bit==0) valor=unidades;
if (bit==1) valor=decenas;
if (bit==2) valor=centenas;
if (bit==3) valor=millares;
for (byte i=0; i<7; i++)
digitalWrite(pins[i],display[valor]>>i&1);
delay(5);
bit++;
if (bit>3) bit=0;
if (digitalRead(15)) {
if (!swDer)
if (cont<9999) cont++; else cont=0;
swDer=1;
} else swDer=0;
if (digitalRead(14)) {
if (!swIzq)
if (cont>0) cont--; else cont=9999;
swIzq=1;
} else swIzq=0;
}
En donde inicia el void loop y antes del primer ciclo for es donde estoy tratando de hacer ese despapayo.
Agradezco su tiempo al que responda y un gran gracias