7 segment display et CD4511 sur Tikercad

a marqué ce sujet comme résolu.
Auteur du sujet

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.

+0 -0

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). :)

“I don’t love studying. I hate studying. I like learning. Learning is beautiful.” – Natalie Portman

+0 -0
Auteur du sujet
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--;
  }
}
+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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