Go Down

Topic: Contador 0-9 display 7 segmentos (Read 6837 times) previous topic - next topic

rega

Apr 10, 2011, 04:45 am Last Edit: Apr 10, 2011, 04:46 am by rega Reason: 1
Hola amigos, soy nuevo en esto y quiero aprender. Un amigo que es programador me ayudó con un programa para el arduino que cuente del 0 al 9 en un display de 7 segmentos. Al momento de cargarlo realiza la cuenta de manera correcta, pero después algunos números ya no se ven bien y después de un rato más se vuelve loco y muestra datos muy rápido en el display que no se alcanzan a distinguir. Este es el código:

char numero[10][8]={"1000000","1111001","0100100","0110000","0011001","0010010","0000010","1111000","0000000","0010000"};
int puerto[7]={2,3,4,5,6,7,8};

void setup() {
 int i;
 for (i=2; i<=8; i++)
   pinMode(i, OUTPUT);
}

void loop() {
 int i=0, p=0;
 for(p=0;p<10;p++)
 {
   for(i=0;i<8;i++){
     if(numero[p]=='1') digitalWrite(puerto, HIGH);
     else digitalWrite(puerto, LOW);
   }
   delay(1000);
 }
}

¿Qué es lo que está mal en el programa, por qué hace eso?


Yo hice otro programa sacando los datos necesarios para que encienda cada segmento y si me funcionó sin problema, pero es mucho más largooo.

De antemano gracias por su ayuda!

nayma

¿Nos puedes decir porque no te funciona? A mi me parece que solo se te pone en estado HIGH cuando p es igual a 1. Además puerto es una tabla de los 7 elementos del display, por lo tanto tendrás que poner puerto[1] por ejemplo.

SrDonGato

se le puede pasar un array de int a digitalwrite ??

en los FOR anidados haces el recorrido por la matriz pero no haces el recorrido por el pin que debes activar o no,

aprovecha la variable i en cada momento.

     if(numero[p]=='1') digitalWrite(puerto{i], HIGH);
      else digitalWrite(puerto, LOW);

Un cordial saludo


riscking

Prueba este codigo funciona de maravilla,

http://www.hacktronics.com/Tutorials/arduino-and-7-segment-led.html

un saludo.

rega

#4
Apr 16, 2011, 07:03 pm Last Edit: Apr 16, 2011, 07:11 pm by rega Reason: 1
Gracias por su ayuda, ya quedó solucionado el problema. Se cambió el tipo de variable y listo! Les pongo el programa.


char numero[10][8]={"1000000","1111001","0100100","0110000","0011001","0010010","0000010","1111000","0000000","0010000"};
byte puerto[7]={2,3,4,5,6,7,8};

void setup() {
 byte i;
 for (i=2; i<=8; i++)
   pinMode(i, OUTPUT);
}

void loop() {
 byte i, p;
 for(p=0;p<10;p++)
 {
   for(i=0;i<8;i++){
     if(numero[p]{i]=='1') digitalWrite(puerto{i], HIGH);
     else digitalWrite(puerto{i], LOW);
   }
   delay(50);
 }
}

NOTA: Al publicar en el foro no aparece la i entre corchetes, por tal motivo le puse {i].

riscking

Me legro, cuando publiques en el foro un codigo hay un boton de almoadilla encima que q es para escribir codigo y que no haya problemas.
un saludo

rega

Muchas gracias por el TIP, saludos!

Go Up