Ciao a tutti,
come partenza per un progetto che ho in mente ,vorrei iniziare per primo a visualizzare su un display 7 segmenti a 4 elementi il numero 1 7 1 7 .
http://www.brescianet.com/appunti/Elettronica/Arduino/corso/Esempio_7SEGMENTx4.htm
All’inizio ho voluto leggere i numeri 1717 pilotando ogni display con un delay di 1 secondo ottenendo il risultato sperato , poi ho provato leggerli in modo fisso. Per poter far questo ho pilotato ogni display con un delay di 5ms ma i segmenti A dei numeri [ 1 ] rimangono parzialmente accesi ,invece i segmenti dei numeri [ 7 ] sono accesi in modo regolare,vorrei capire il perché e dove sbaglio. Vi ringrazio in anticipo.
Guido
#define CLOCK_PIN 2 // pin 11 shift-register 74HC595
#define LATCH_PIN 3 // pin 12 shift-register 74HC595
#define DATA_PIN 4 // pin 14 shift-register 74HC595
#define digit1 5 // alimento digit 1 migliaia
#define digit2 6 // alimento digit 2 centinaia
#define digit3 7 // alimento digit 3 decine
#define digit4 8 // alimento digit 4 unita
byte unita = 7; // carico il N° 7 nelle unita
byte decine = 1; // carico il N° 1 nelle decine
byte centinaia = 7; // carico il N° 7 nelle centinaia
byte migliaia = 1; // carico il N° 1 nelle migliaia
byte tabella[10] = {0x03, 0x9F, 0x25, 0x0D, 0x99, 0x49, 0x41, 0x1F, 0x01, 0x09};
//--------------------------------------------------------------------------------
void setup() {
pinMode (digit1, OUTPUT);
pinMode (digit2, OUTPUT);
pinMode (digit3, OUTPUT);
pinMode (digit4, OUTPUT);
pinMode(LATCH_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
pinMode(DATA_PIN, OUTPUT);
digitalWrite(CLOCK_PIN, LOW);
digitalWrite (digit1, LOW);
digitalWrite (digit2, LOW);
digitalWrite (digit3, LOW);
digitalWrite (digit4, LOW);
unita = 7;
decine = 1;
centinaia = 7;
migliaia = 1;
}
//----------------------------------------------------------------------------------
void loop() {
for (int i = 0; i < 4; i++) {
switch (i) {
case 0 :
digitalWrite (digit4, LOW);
digitalWrite (digit1, HIGH);
digitalWrite(LATCH_PIN, LOW);
shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, tabella[migliaia]);
digitalWrite(LATCH_PIN, HIGH);
break;
case 1 :
digitalWrite (digit1, LOW);
digitalWrite (digit2, HIGH);
digitalWrite(LATCH_PIN, LOW);
shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, tabella[centinaia]);
digitalWrite(LATCH_PIN, HIGH);
break;
case 2 :
digitalWrite (digit2, LOW);
digitalWrite (digit3, HIGH);
digitalWrite(LATCH_PIN, LOW);
shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, tabella[decine]);
digitalWrite(LATCH_PIN, HIGH);
break;
case 3 :
digitalWrite (digit3, LOW);
digitalWrite (digit4, HIGH);
digitalWrite(LATCH_PIN, LOW);
shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, tabella[unita]);
digitalWrite(LATCH_PIN, HIGH);
break;
}
delay (5);
}
}