Go Down

Topic: mostrar mas de un digito con leds 7 digitos 7219 [SOLUCIONADO] (Read 387 times) previous topic - next topic

Nunomarquina

hola buenas, pues me han llegado unos leds de 7 digitos con el integrado 7219 y he hecho pruebas y funcionan pero me gustaria saber si se puede escribir mas de un digito, quiero decir, con la libreria LedControl.h puedes usar esto:
Code: [Select]
dispositivo.setDigit (modulo, display, digito, punto);
pero el digito solo puede ser de 0 a 9, lo que me gustaria es si hay una funcion con la que yo le pueda meter una variable de mas de un digito y que me la muestre, si es 473 pues que el 4 vaya al display 0, el 7 al display 1 y el 3 al display 2.

surbyte

Estudiaste los ejemplos de tu librería? En ellos seguramente tienes tu respuesta.

Kike_GL

Quote from: Nunomarquina
hola buenas, pues me han llegado unos leds de 7 digitos con el integrado 7219 y he hecho pruebas y funcionan pero me gustaria saber si se puede escribir mas de un digito.
Creo que te refieres a los display de 7 segmentos, de varios digitos.

Code: [Select]

dispositivo.setDigit(modulo, display, digito, punto);


Quote from: Nunomarquina
pero el digito solo puede ser de 0 a 9, lo que me gustaria es si hay una función con la que yo le pueda meter una variable de mas de un digito y que me la muestre, si es 473 pues que el 4 vaya al display 0, el 7 al display 1 y el 3 al display 2.
Claro solo debes indicar donde debe ir cada numero y eso dependera de como este el cableado entre el MAX7219 y los display. Me refiero a que en los display se acostumbra numerar de izquierda a derecha, pero para el MAX el digito 0 (pin 2) es el menos significativo. Con un pequeño ejemplo lo sacas.

Code: [Select]

dispositivo.setDigit(0, 0, 3, false);
dispositivo.setDigit(0, 1, 7, false);
dispositivo.setDigit(0, 2, 4, false);


Revisa los métodos de LedControl

Saludos, Kike_GL

Nunomarquina

gracias por la ayuda pero he encontrado la solucion, y dejo aqui el codigo porque no he encontrado nada en español, lo que queria era mostrar una variable con un numero xxxx y que cada digito se mostrara automaticamente en su digito correspondiente.
Code: [Select]

#include "LedControl.h"    // Incluimos la libreria para el 7219
LedControl miled=LedControl(MAX7219DIN,MAX7219CLK,MAX7219CS,1);    // El ultimo numero representa cuantos 7219 tenemos en cascada, se pueden conectar varios por el mismo pin en cascada

int MAX7219DIN = 10;    // Pin digital donde estara conectado el Data in del 7219
int MAX7219CLK = 12;    // Pin digital donde estara conectado el CLK del 7219
int MAX7219CS = 11;    // Pin digital donde estara conectado el CS del 7219
int contador =0;

void setup() {
  miled.shutdown(0,false);    // Activamos los leds y apagamos el modo ahorro energia
  miled.setIntensity(0,8);    // Establecemos el brillo de los leds, puede ir de 0 a 15
  miled.clearDisplay(0);    // Dejamos los leds apagados
}

void loop() {
  contador++;
 
  unsigned long t = 12345678;  // aqui va el numero que deseamos mostrar, tambien podemos meter una variable, comentar esta linea para mostrar el contador
  //unsigned long t = contador;  // ejemplo de un contador sencillo que se ira mostrando en el led, descomentar esta linea para mostrar el contador
 
    int digitOne =    (t%10);
    int digitTwo =    (t/10)%10;
    int digitThree =  (t/100)%10;
    int digitFour =   (t/1000)%10;
    int digitFive =   (t/10000)%10;
    int digitSix =    (t/100000)%10;
    int digitSeven=   (t/1000000)%10;
    int digitEight =  (t/10000000)%10;

    //MSB digitEight, LSB digitOne

    miled.setDigit(0,7,digitEight,false);
    miled.setDigit(0,6,digitSeven,false);
    miled.setDigit(0,5,digitSix,false);
    miled.setDigit(0,4,digitFive,false);
    miled.setDigit(0,3,digitFour,false);
    miled.setDigit(0,2,digitThree,false);
    miled.setDigit(0,1,digitTwo,false);
    miled.setDigit(0,0,digitOne,false); 
}

surbyte

La página de tu librería link

Y esta es la parte que corresponde a los digitos que ya lograste

Quote
Print numbers on a 7-Segment display
The most common use of 7-segment displays is to print numbers. The LedControl library has a function that simply takes an argument of type byte and prints the corresponding digit on the specified column. Valid values for the digit are from 0 to 15 to allow displaying hex values . Values greater than 15 (or negative values) are silently discarded. The function also provides an argumment to switch decimal point on the column on or off.

Here is a code excerpt that prints an int value (-999..999) on a display with 4 digits.

Code: [Select]
void printNumber(int v) {  
    int ones;  
    int tens;  
    int hundreds;

    boolean negative=false;

    if(v < -999 || v > 999)  
        return;  
    if(v<0) {  
        negative=true;
        v=v*-1;  
    }
    ones=v%10;  
    v=v/10;  
    tens=v%10;  
    v=v/10; hundreds=v;  
    if(negative) {  
        //print character '-' in the leftmost column  
        lc.setChar(0,3,'-',false);  }
    else {
        //print a blank in the sign column  
        lc.setChar(0,3,' ',false);  
    }  
    //Now print the number digit by digit
    lc.setDigit(0,2,(byte)hundreds,false);
    lc.setDigit(0,1,(byte)tens,false);
    lc.setDigit(0,0,(byte)ones,false);
}

The prototype for the function:

Code: [Select]
/* Display a (hexadecimal) digit on a 7-Segment Display
 * Params:
 *  addr   address of the display
 *  digit  the position of the digit on the display (0..7)
 *  value  the value to be displayed. (0x00..0x0F)
 *  dp     sets the decimal point.  
*/  
void setDigit(int addr, int digit, byte value, boolean dp);
The digit-argument must be in the range 0..7 because the MAX72XX can control up to eight digits on a 7-segment display.

Go Up