Hola amigos soy nuevo en arduino y me encuentro en proceso de autoaprendizaje.
Les pido disculpas si me equivoco de sección en el foro, para publicar mi inquietud.
La cosa es sencilla, quiero hacer un contador de 0 - 9999, con un display siete segmentos de cátodo común. claro con multiplexación. El contador es automatico, o sea, no depende de un pulsador o una señal externa que le brinde los pulsos para contar
Disculpas también, por lo extenso del código y sus redundancias, después trabajaré en reducirlo.
El problema que tengo, es que la primera cifra, avanza con mucha velocidad, lo que me hace que sea poco práctico, sin más, le dejo:
//PARA SIETE SEGMENTOS DE KATODO COMÚN 9999
int A=2;
int B=3;
int C=4;
int D=5;
int E=6;
int F=7;
int G=8;
int cont1=0;
int cont2=0;
int cont3=0;
int cont4=0;
int Delay=0;
int k=0;
void setup() {
for(int i=2;i<=12;i++){ // put your setup code here, to run once:
pinMode(i,OUTPUT); //pines de salida, del 2 al 8
}
}
void cero(){
digitalWrite(A,1);// escribir 0
digitalWrite(B,1);
digitalWrite(C,1);
digitalWrite(D,0);
digitalWrite(E,1);
digitalWrite(F,1);
digitalWrite(G,1);
}
void uno(){
digitalWrite(A,0);// escribir 1
digitalWrite(B,0);
digitalWrite(C,1);
digitalWrite(D,0);
digitalWrite(E,0);
digitalWrite(F,0);
digitalWrite(G,1);
}
void dos(){
digitalWrite(A,1);// escribir 2
digitalWrite(B,1);
digitalWrite(C,0);
digitalWrite(D,1);
digitalWrite(E,0);
digitalWrite(F,1);
digitalWrite(G,1);
}
void tres(){
digitalWrite(A,0);// escribir 3
digitalWrite(B,1);
digitalWrite(C,1);
digitalWrite(D,1);
digitalWrite(E,0);
digitalWrite(F,1);
digitalWrite(G,1);
}
void cuatro(){
digitalWrite(A,0);// escribir 4
digitalWrite(B,0);
digitalWrite(C,1);
digitalWrite(D,1);
digitalWrite(E,1);
digitalWrite(F,0);
digitalWrite(G,1);
}
void cinco(){
digitalWrite(A,0);// escribir 5
digitalWrite(B,1);
digitalWrite(C,1);
digitalWrite(D,1);
digitalWrite(E,1);
digitalWrite(F,1);
digitalWrite(G,0);
}
void seis(){
digitalWrite(A,1);// escribir 6
digitalWrite(B,1);
digitalWrite(C,1);
digitalWrite(D,1);
digitalWrite(E,1);
digitalWrite(F,0);
digitalWrite(G,0);
}
void siete(){
digitalWrite(A,0);// escribir 7
digitalWrite(B,0);
digitalWrite(C,1);
digitalWrite(D,0);
digitalWrite(E,0);
digitalWrite(F,1);
digitalWrite(G,1);
}
void ocho(){
digitalWrite(A,1);// escribir 8
digitalWrite(B,1);
digitalWrite(C,1);
digitalWrite(D,1);
digitalWrite(E,1);
digitalWrite(F,1);
digitalWrite(G,1);
}
void nueve(){
digitalWrite(A,0);// escribir 9
digitalWrite(B,0);
digitalWrite(C,1);
digitalWrite(D,1);
digitalWrite(E,1);
digitalWrite(F,1);
digitalWrite(G,1);
}
void siete_segmentos(){
switch (cont4){
case 0:
cero();
break;
case 1:
uno();
break;
case 2:
dos();
break;
case 3:
tres();
break;
case 4:
cuatro();
break;
case 5:
cinco();
break;
case 6:
seis();
break;
case 7:
siete();
break;
case 8:
ocho();
break;
case 9:
nueve();
break;
}
}
void siete_segmentos1(){
switch (cont3){
case 0:
cero();
break;
case 1:
uno();
break;
case 2:
dos();
break;
case 3:
tres();
break;
case 4:
cuatro();
break;
case 5:
cinco();
break;
case 6:
seis();
break;
case 7:
siete();
break;
case 8:
ocho();
break;
case 9:
nueve();
break;
}
}
void siete_segmentos2(){
switch (cont2){
case 0:
cero();
break;
case 1:
uno();
break;
case 2:
dos();
break;
case 3:
tres();
break;
case 4:
cuatro();
break;
case 5:
cinco();
break;
case 6:
seis();
break;
case 7:
siete();
break;
case 8:
ocho();
break;
case 9:
nueve();
break;
}
}
void siete_segmentos3(){
switch (cont1){
case 0:
cero();
break;
case 1:
uno();
break;
case 2:
dos();
break;
case 3:
tres();
break;
case 4:
cuatro();
break;
case 5:
cinco();
break;
case 6:
seis();
break;
case 7:
siete();
break;
case 8:
ocho();
break;
case 9:
nueve();
break;
}
}
void cifra(){
switch (k){
case 0:
siete_segmentos();
digitalWrite(12,1);
digitalWrite(11,0);
digitalWrite(10,0);
digitalWrite(9,0);
break;
case 1:
siete_segmentos1();
digitalWrite(12,0);
digitalWrite(11,1);
digitalWrite(10,0);
digitalWrite(9,0);
break;
case 2:
siete_segmentos2();
digitalWrite(12,0);
digitalWrite(11,0);
digitalWrite(10,1);
digitalWrite(9,0);
break;
case 3:
siete_segmentos3();
digitalWrite(12,0);
digitalWrite(11,0);
digitalWrite(10,0);
digitalWrite(9,1);
break;
}
}
void loop() {
while(Delay>100){
Delay=0;
if(cont4>9){
cont4=0;
cont3++;
if(cont3>9){
cont3=0;
cont2++;
if(cont2>9){
cont2=0;
cont1++;
if(cont1>9){
cont1=0;
}
}
}
}
}
Delay++;
for(k=0;k<=3;k++){
cifra();
delay(1);
}
cont4++;
}