ciao a tutti, sembrava un programmino semplice e invece…
praticamente tramite un cd 4511 in configurazione classica piloto 6 display a 7 segmenti pero’ il risultato e’ alquanto strano
vi metto il linkl al video che faccio prima
il codice:
// Arduino pins connected to the 4511
const uint8_t LedA = 2;
const uint8_t LedB = 3;
const uint8_t LedC = 4;
const uint8_t LedD = 5;
// Arduino pins connected to the segment driver transistors
const uint8_t Led1 = 6;
const uint8_t Led2 = 7;
const uint8_t Led3 = 8;
const uint8_t Led4 = 9;
const uint8_t Led5 = 10;
const uint8_t Led6 = 11;
void setup()
{
// Let the Arduino know which pins go where
pinMode(LedA, OUTPUT);
pinMode(LedB, OUTPUT);
pinMode(LedC, OUTPUT);
pinMode(LedD, OUTPUT);
pinMode(Led1, OUTPUT);
pinMode(Led2, OUTPUT);
pinMode(Led3, OUTPUT);
pinMode(Led4, OUTPUT);
pinMode(Led5, OUTPUT);
pinMode(Led6, OUTPUT);
digitalWrite(Led1, LOW);
digitalWrite(Led2, LOW);
digitalWrite(Led3, LOW);
digitalWrite(Led4, LOW);
digitalWrite(Led5, LOW);
digitalWrite(Led6, LOW);
}
void loop()
{
print_number(012345);
}
void print_number(unsigned n) {
static int d = 380;
set_digit(Led1, d, n/100000);
set_digit(Led2, d, n/10000);
set_digit(Led3, d, n/1000);
set_digit(Led4, d, n/100);
set_digit(Led5, d, n/10);
set_digit(Led6, d, n/1);
}
void set_digit(const uint8_t led, const unsigned d, const unsigned value) {
set_number(value);
digitalWrite(led, HIGH);
delay(d);
digitalWrite(led, LOW);
}
void set_number(const unsigned n) {
static const struct number {
uint8_t d;
uint8_t c;
uint8_t b;
uint8_t a;
} numbers[] = {
{ LOW, LOW, LOW, LOW}, /* 0 */
{ LOW, LOW, LOW, HIGH}, /* 1 */
{ LOW, LOW, HIGH, LOW}, /* 2 */
{ LOW, LOW, HIGH, HIGH}, /* 3 */
{ LOW, HIGH, LOW, LOW}, /* 4 */
{ LOW, HIGH, LOW, HIGH}, /* 5 */
{ LOW, HIGH, HIGH, LOW}, /* 6 */
{ LOW, HIGH, HIGH, HIGH}, /* 7 */
{HIGH, LOW, LOW, LOW}, /* 8 */
{HIGH, LOW, LOW, HIGH}, /* 9 */
};
digitalWrite(LedA, numbers[n%10].a);
digitalWrite(LedB, numbers[n%10].b);
digitalWrite(LedC, numbers[n%10].c);
digitalWrite(LedD, numbers[n%10].d);
}