Buenas ante todo me presento ya que soy novato tanto en el mundo de la programación en c como en Arduino que me parece un invento genial y con el que se puede realizar casi cualquier proyecto que se te venga a la cabeza.
Bueno os propongo mi problema y es que tengo conectado el display a la placa arduino y consigo usar cada dígito por separado pero no se como puedo hacer para usarlos conjuntamente (creo que se llama multiplexado y que a pesar de que encuentro cosas por internet nada resuelve mi duda).
En principio el proyecto seria hacer un simple reloj con minutos y segundos --> mm : ss
Aqui os dejo un video de lo que consigo hacer de momento:
El circuito montado es el siguiente:
To build the circuit, attach the LED display’s (through a 220-ohm resistor) Pin 11, 7, 4, 2, 1, 10, 5, 3 to your Arduino board’s digital Pin 12, 11, 10, 9, 8, 7, 6, 5 .
Attach the LED display’s 12, 9, 8, 6 to the Ardiuno board’s digital Pin 4, 3, 2, 1 .
Y el código usado en el video:
int a = 12;
int b = 11;
int c = 10;
int d = 9;
int e = 8;
int f = 7;
int g = 6;
int dp = 5;
int ls1 = 1;
int ls2 = 2;
int ls3 = 3;
int ls4 = 4;
void digital_0(void)
{
unsigned char j;
digitalWrite(dp,LOW);
digitalWrite(g,LOW);
for(j=7;j<=12;j++)
digitalWrite(j,HIGH);
}
void digital_1(void)
{
unsigned char j;
digitalWrite(a,LOW);
for(j=5;j<=9;j++)
digitalWrite(j,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
}
void digital_2(void)
{
unsigned char j;
digitalWrite(c,LOW);
digitalWrite(f,LOW);
digitalWrite(dp,LOW);
for(j=11;j<=12;j++)
digitalWrite(j,HIGH);
for(j=8;j<=9;j++)
digitalWrite(j,HIGH);
digitalWrite(g,HIGH);
}
void digital_3(void)
{
unsigned char j;
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(dp,LOW);
for(j=9;j<=13;j++)
digitalWrite(j,HIGH);
digitalWrite(g,HIGH);
}
void digital_4(void)
{
digitalWrite(a,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(dp,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void digital_5(void)
{
unsigned char j;
digitalWrite(b,LOW);
digitalWrite(e,LOW);
digitalWrite(dp,LOW);
digitalWrite(a,HIGH);
for(j=6;j<=7;j++)
digitalWrite(j,HIGH);
for(j=9;j<=10;j++)
digitalWrite(j,HIGH);
}
void digital_6(void)
{
unsigned char j;
digitalWrite(b,LOW);
digitalWrite(dp,LOW);
digitalWrite(a,HIGH);
for(j=6;j<=10;j++)
digitalWrite(j,HIGH);
}
void digital_7(void)
{
unsigned char j;
for(j=5;j<=9;j++)
digitalWrite(j,LOW);
for(j=10;j<=12;j++)
digitalWrite(j,HIGH);
}
void digital_8(void)
{
unsigned char j;
digitalWrite(dp,LOW);
for(j=6;j<=12;j++)
digitalWrite(j,HIGH);
}
void digital_9(void)
{
unsigned char j;
digitalWrite(e,LOW);
digitalWrite(dp,LOW);
for(j=9;j<=12;j++)
digitalWrite(j,HIGH);
for(j=6;j<=7;j++)
digitalWrite(j,HIGH);
}
void Display(unsigned char mun)
{
switch (mun) {
case 0:
digital_0();
break;
case 1:
digital_1();
break;
case 2:
digital_2();
break;
case 3:
digital_3();
break;
case 4:
digital_4();
break;
case 5:
digital_5();
break;
case 6:
digital_6();
break;
case 7:
digital_7();
break;
case 8:
digital_8();
break;
case 9:
digital_9();
break;
default: return;
}
}
void setup()
{
int i;//????
for(i=1;i<=12;i++)
pinMode(i,OUTPUT);
}
void loop()
{
int k;
digitalWrite(ls3, LOW);
digitalWrite(ls4,HIGH);
digitalWrite(ls2,HIGH);
digitalWrite(ls1,HIGH);
for(k=0;k<10;k++){
Display(k);
delay(1000);
}
k=9;
digitalWrite(ls4, LOW);
digitalWrite(ls3,HIGH);
digitalWrite(ls2,HIGH);
digitalWrite(ls1,HIGH);
for(k=0;k<10;k++){
Display(k);
delay(500);
}