Muy buenas tardes, soy totalmente nuevo en este mundo, y ahora con el Covid y estar encerrados en casa me compre mi primer Arduino Mega para aprender con mis hijas. Estamos haciendo un proyecto usando casi todos los sensores y modulos que vienen en el KIT, para hacer como un Escape Room haciendo distintas pruebas.
Queremos incorporar el display de 4 digitos y 7 segmentos, y hemos colocado 74hc595 para no ocupar tantos pines.
El caso es que queremos mostrar un numero distinto en cada display, como si fuera un codigo, pero no se como hacerlo, y leido los manuales de comandos de arduino y no se cual usar, hemos probado con "shiftOut" pero este me muestra el mismo numero en los 4 digitos.
La intencion es que en el display ponga 2345, pero solo consigo poner 2222, o 3333...
¿que comando puedo usar?
int latch=33; //74HC595
int clock=31; //74HC595
int data=35; //74HC595
unsigned char table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c
,0x39,0x5e,0x79,0x71,0x00};
void setup() {
pinMode(latch,OUTPUT);
pinMode(clock,OUTPUT);
pinMode(data,OUTPUT);
}
void loop()
{
digitalWrite(latch,LOW);
shiftOut(data,clock,MSBFIRST,table[2]); /// CON ESTE COMANDO ME MUESTRA EL MISMO NUMERO EN LOS 4 DISPLAYS
digitalWrite(latch,HIGH);
delay(500);
digitalWrite(latch,LOW);
shiftOut(data,clock,MSBFIRST,table[3]); /// CON ESTE COMANDO ME MUESTRA EL MISMO NUMERO EN LOS 4 DISPLAYS
digitalWrite(latch,HIGH);
delay(500);
}
Hay varios temas similares en el foro que en un momento te indicaré para que te sirvan de ayuda.
Basicamente se usa una rutina que es llamada para que presente el número deseado en la ubicación asignada.
Acá tienes uno de los tantos temas similares que encuentras buscando en la LUPA (arriba derecha) buscando 74hc595
Controlar varios display con 74hc595
Muchas gracias por contestar, y perdon por ser tan novato, he visto y leido lo que me has indicado pero sigo sin ser capaz de hacer que muestre los digitos que yo quiero en cada display y no todos a la vez.
no soy capaz.
A ver si esto funciona? Adaptado de este link
// Demonstration code for 74HC595 16 bit output and 2x7 segment displays
int RCLKPin = 33; // pin 12 on the 74hc595 latch - nSS
int SRCLKPin = 31; // pin 11 on the 74hc595 shift register clock - SCK
int SERPin = 35; // pin 14 on the 74hc595 data - MOSI
unsigned long d; // Data to be sent to the shift reg.
int dir,num; // Direction of walking 1, output number.
char buf[12]; // General purpose buffer.
// Define an array to translate number to 7segment
char segment[10] = { // segment bit pos: dp g f e d c b a
0x3f, // zero
0x06, // one
0x5b, // two
0x4f, // three
0x66, // four
0x6d, // five
0x7c, // six
0x07, // seven
0x7f, // eight
0x67 // nine
};
void setup() {
Serial.begin(9600); // start serial port (debug).
pinMode(RCLKPin, OUTPUT); // Set 595 control PINs to output.
pinMode(SRCLKPin, OUTPUT);
pinMode(SERPin, OUTPUT);
Serial.println("74HC595 Demo 4xchips for 16 bit register and 2x7seg.");
d = 1;
num = 0;
}
void loop() {
unsigned char lnum,rnum;
if (num++>99)
num=0;
lnum = num / 10;
rnum = num % 10;
digitalWrite(RCLKPin, LOW);
shiftOut(SERPin, SRCLKPin, MSBFIRST, segment[lnum]);
shiftOut(SERPin, SRCLKPin, MSBFIRST, segment[rnum]);
shiftOut(SERPin, SRCLKPin, MSBFIRST, (0xff00 & d)>>8);
shiftOut(SERPin, SRCLKPin, MSBFIRST, 0x00ff & d);
digitalWrite(RCLKPin, HIGH);
Serial.println(ltoa(d,buf,16));
if (!dir)
d<<=1;
else
d>>=1; // Shift
if (d&0x8000)
dir=1; // Set direction.
if (d&0x1)
dir=0;
delay(200);
}