Ho comprato Arduino!
... per me è come far mangiare carne ad un vegetariano

Purtroppo ho dovuto cedere, stavolta con i miei amatissimi CMOS mi sarebbe venuta una cosa grande quanto una cassa di angurie


Premessa:
avevo, (avevo perchè dalla scatola, e partendo da sottozero, fino al lavoro finito ho impiegato,
studiando, scopiazzando ed adattando le mie conoscenze di C++, solo 4 pomeriggi e per me è una bella soddisfazione)
... mi sono talmente impegnato che non non ho ancora avuto tempo di far lampeggiare il primo fatidico Led
... ma spero di farlo entro Natale....
Dicevo, avevo necessità di un contatore su unico display seven-segment 8 Digit che mi contasse contemporaneamente
timecode orari con modulo diverso fra di loro alla cui commutazione in base al modulo impostato mi indicasse
di ciascuno il valore (ben 8 moduli orari di conteggio)
Come display ho utilizzato un "fattoapposta" preassemblato Max7219 a sette segmenti a Led
I timecode vengono contati in Up/Down da 0.00.00.00 a 9.59.59.xx oppure a -9.59.59.xx
(xx sono i fotogrammi in base ai moduli di conteggio).
Oltre tale valore non ho necessità di contare e, soprattutto, un Digit (quello più a sinista con ID 7)
dovevo riservarlo per il segno "-".
Fin qui tutto OK.
Vengo al dunque:
Ho la necessità del Blanking degli Zero iniziali (e successivamente, se non ci riesco da solo, anche lo shift del segno meno vesro destra)
L'idea è quella di usare un Array, e spegnere gli zero iniziali, tenendo conto che il primo Digit
da valutare è quello con ID 6, ovvero il secondo da sinistra, perchè il primo da sinistra al momento è riservato
all'eventuale segno -.
Pur avendo capito la logica, in base all'esempio fornito con la libreria LedControl.h
di cui allego solo la parte dello sketch di esempio e funzionante, non riesco (perchè non sono ancora capace)
ad adattarli al mio caso perché mentre nell'esempio i numeri aumentano o diminuiscono progressivamente,
(tutto molto semplice) nella mia applicazione i numeri cambiano progressivamente ma effettuano un conteggio orario Up/Down in base ai moduli utilizzati nelle formule e ciscun Digit visualizza il risultato di un calcolo diverso da quello degli altri Digit.
Ovviamente, ogni altra idea e suggerimento per una soluzione ottimale sono ben accetti!
Questo è lo sketch di esempio fornito con la libreria LedControl.h basato su Array:
Codice: Seleziona tutto
/*
* LedControl library: https://github.com/wayoda/LedControl
*
*/
#include "LedControl.h"
// Initialise the LedControl library
// pin 12 on DIN,
// pin 11 on Clk,
// pin 10 on LOAD
// number of displays: 1
LedControl lc = LedControl(12, 11, 10, 1);
int i = 0;
void setup() {
// On startup, the MAX72XX chip is in power-safe mode
// we are waking this chip for device 0 with the shutdown command
lc.shutdown(0, false);
// Set the intensity of the screen on device 0 with a value between 0 and 15
lc.setIntensity(0, 5);
// Clear the display of device 0
lc.clearDisplay(0);
}
void printNumber3(long number) {
// Array of 8 bytes for each postion on the LED display
// questi valori nella mia applicazione sono:
// {vuoto o segno -, da 0 a 9, da 0 a 5, da 0 a 9, da 0 a 5, da 0 a 9, da 0 a x, da 0 a x} in base al modulo di x
// Siccome questo esempio si basa sul conteggio progressivo della variabile i definita in testa al listato
// non so cosa metterci al posto della variabile number definita nel for
byte digits[8] = {0, 0, 0, 0, 0, 0, 0, 0};
// Loop over each position to determine the number to show
for (int i; i < 8; i++) {
digits[i] = number % 10;
number = number / 10;
}
// True when we've found the first non-zero digit
bool firstNonZeroFound = false;
// Loop backwards from 7 to 0
for (int i = 7; i >= 0; i--) {
// If the number is not equal to 0
if(digits[i] != 0) {
firstNonZeroFound = true;
}
// If the first non-zero number is found show this on the LED display
if (firstNonZeroFound) {
lc.setDigit(0, i, digits[i], false);
}
}
}
void loop() {
lc.clearDisplay(0);
printNumber3(i);
i++;
delay(100);
}
Bene, siccome è il mio primo post dopo la presentazione di qualche settimana fa,
ho voluto dirla tutta e farla lunga...
Difficilmente chiedo aiuti, non voglio pappe pronte perchè devo capire, preferisco sbattere la testa,
ma stavolta ho bisogno di essere instradato.
Grazie per la pazienza di aver letto.
...Adesso la soluzione, grazie !
