ESP32 & DIGIT 7 SEGMENTI con TPIC6C595

Buongiorno,
premesso che di elettronica e programmazione so poco e niente, ho appena iniziato a cercare di imparare qualcosa, volevo cercare di creare un segnapunti per le freccette usando dei digit che mi hanno regalato, di cui provo ad allegare foto. In realtà qualcosa sono riuscito a far funzionare, ovvero collegando un solo digit riesco a far girare le cifre in sequenza da 0 a 9 (con taaaanto aiuto da google)... Ora devo mettere vicini 10 digit, 3 per il punteggio casa, 3 per il punteggio ospiti e 2 per leg vinti (uno per casa e uno per ospiti).

Provo ad allegare qualche foto, sperando che qualcosa si capisca e possa qualcuno con tanta pazienza, riuscire a darmi una mano...

il codice che ho usato per far girare le cifre è questo:

#define DATA 15
#define LATCH 26
#define CLOCK 27
#define OE 25

// digit seq a b c d dp g f e
int digits[] = {
  B11110011, // 0
  B01100000, // 1
  B11010101, // 2
  B11110100, // 3
  B01100110, // 4
  B10110110, // 5
  B10110111, // 6
  B11100000, // 7
  B11110111, // 8
  B11110110, // 9
  };  

void setup() {
   pinMode(DATA, OUTPUT);
   pinMode(LATCH, OUTPUT);
   pinMode(CLOCK, OUTPUT);
}

void loop() {
   int i;
   for (i = 0; i < 10; i++) {
      digitalWrite(LATCH, LOW);
      shiftOut(DATA, CLOCK, LSBFIRST, digits[i]);
      digitalWrite(LATCH, HIGH);
      delay(1000);
   }
}



Che bel monofaccia VRNI PCB, mi sono sempre piaciuti

Puoi provare qualcosa del genere:

// Definisci i pin per i digit
#define DIGIT_COUNT 10
int digitPins[DIGIT_COUNT] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

// Definisci i pin per i segmenti
#define SEGMENT_COUNT 8
int segmentPins[SEGMENT_COUNT] = {10, 11, 12, 13, 14, 16, 17, 18};

// Definisci i pin per i controlli
#define DATA 15
#define LATCH 26
#define CLOCK 27
#define OE 25

// Cifre da 0 a 9
int digits[] = {
  B11110011, // 0
  B01100000, // 1
  B11010101, // 2
  B11110100, // 3
  B01100110, // 4
  B10110110, // 5
  B10110111, // 6
  B11100000, // 7
  B11110111, // 8
  B11110110, // 9
};

void setup() {
  // Imposta i pin per i digit come output
  for (int i = 0; i < DIGIT_COUNT; i++) {
    pinMode(digitPins[i], OUTPUT);
  }

  // Imposta i pin per i segmenti come output
  for (int i = 0; i < SEGMENT_COUNT; i++) {
    pinMode(segmentPins[i], OUTPUT);
  }

  // Imposta i pin di controllo come output
  pinMode(DATA, OUTPUT);
  pinMode(LATCH, OUTPUT);
  pinMode(CLOCK, OUTPUT);
}

void loop() {
  // Esempio di visualizzazione del punteggio 1234567890
  for (int i = 0; i < DIGIT_COUNT; i++) {
    displayDigit(i, digits[i]);
    delay(1000); // Puoi regolare la velocità di aggiornamento
  }
}

// Funzione per visualizzare una cifra su un digit specifico
void displayDigit(int digitIndex, int digitValue) {
  // Spegni tutti i digit
  digitalWrite(LATCH, LOW);
  for (int i = 0; i < DIGIT_COUNT; i++) {
    digitalWrite(digitPins[i], HIGH);
  }
  digitalWrite(LATCH, HIGH);

  // Visualizza la cifra desiderata sul digit specifico
  digitalWrite(LATCH, LOW);
  shiftOut(DATA, CLOCK, MSBFIRST, digitValue);
  digitalWrite(LATCH, HIGH);

  // Accendi il digit desiderato
  digitalWrite(digitPins[digitIndex], LOW);
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.