7 segment display et CD4511 sur Tikercad

a marqué ce sujet comme résolu.

Hello,

J’ai commencé Arduino sans Arduino, en découvrant Tinkercad. C’est un peu lent, mais c’est cool, et je risque pas de griller quelque chose. :D

Je suis en train de suivre le tutoriel, et j’en suis au chapitre sur l’afficheur 7 segments. Comme depuis le début je prends quelques libertés pour le code, mais cette fois-ci je reste bloqué.

Donc c’est ici : https://www.tinkercad.com/things/kvcCjMSiXDR-copy-of-level-display-with-4-leds-interrupt/editel?sharecode=cgNTDJbAJV6RTaxNzT-J0thUj-Agb74lziR1lZVK9tc=

  • J’ai un doute sur ma ligne 41, et de l’opérateur ! devant decToBin. Est-ce que les sorties doivent être en HIGH ou LOW ?
  • J’ai des affichages incohérents. Avec le ! j’ai un 8, sans j’ai -.
  • J’ai revérifié 1000 fois le branchement des segments.
  • Je veux bien des critiques sur le code en général.
  • Existe-t-il un moyen facile de convertir des décimaux en binaire, pour éviter d’utiliser de la mémoire avec une matrice ?
  • Existe-t-il une alternative plus rapide à Tinkercad ?

Voilà, votre aide est la bienvenue. :) Merci.

Salut !

Ton lien nécessite d’avoir un compte pour y accéder. Il faudrait le modifier ou alors poster directement ton code ici (dans un bloc secret s’il est long). :)

+0 -0
const unsigned char DI_button_more = 2;
const unsigned char DI_button_less = 3;

const unsigned char DO_decoder[] = {4, 5, 6, 7};

unsigned char level = 0;
bool decToBin[10][4] = {
  {0, 0, 0, 0},
  {0, 0, 0, 1},
  {0, 0, 1, 0},
  {0, 0, 1, 1},
  {0, 1, 0, 0},
  {0, 1, 0, 1},
  {0, 1, 1, 1},
  {1, 0, 0, 0},
  {1, 0, 0, 1},
  {1, 0, 1, 1}};

void setup() {
  // Set INPUTS
  pinMode(DI_button_more, INPUT);
  pinMode(DI_button_less, INPUT);
  digitalWrite(DI_button_more, HIGH); // pull-up
  digitalWrite(DI_button_less, HIGH); // pull-up
  
  for (char i = 0; i < 4; i++){
    pinMode(DO_decoder[i], OUTPUT);
    digitalWrite(DO_decoder[i], HIGH);
  }
  
  attachInterrupt(0, level_more, FALLING);
  attachInterrupt(1, level_less, FALLING);
}

void loop() {  
  display();
}

void display() {  
  for (char i = 0; i < 4; i++) {
    digitalWrite(DO_decoder[i], !decToBin[level][i]);
  }
}

void level_more() {
  if(level < 9) {
    level++;
   }
}

void level_less() {
  if(level > 0) {
    level--;
  }
}
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte