Je suis débutante en arduino et j'ai déjà plusieurs problèmes
Je travaille avec une carte avec un atmega328p qui fonctionne comme un arduino uno il me semble.
Je veux programmer un afficheur 7 segments allant de 0 à 9 avec un registre à décalage 74hc595.
J'ai trouvé de nombreux codes sur internet mais aucun ne fonctionne correctement (celui ci dessous affiche n'importe quoi sur le 7 segment).
De plus, je voudrais programmer 2 bouton poussoir pour qu'il puisse faire +1 ou -1 sur l'afficheur, comment faire?
Voici le code:
// pin 11 of 74HC595 (SHCP)
const int bit_clock_pin = 16;
// pin 12 of 74HC595 (STCP)
const int digit_clock_pin = 15;
// pin 14 of 74HC595 (DS)
const int data_pin = 14;
// digit pattern for a 7-segment display
const byte digit_pattern[16] =
{
B00111111, // 0
B00000110, // 1
B01011011, // 2
B01001111, // 3
B01100110, // 4
B01101101, // 5
B01111101, // 6
B00000111, // 7
B01111111, // 8
B01101111, // 9
B01110111, // A
B01111100, // b
B00111001, // C
B01011110, // d
B01111001, // E
B01110001 // F
};
unsigned int counter = 0;
void setup()
{
pinMode(data_pin, OUTPUT);
pinMode(bit_clock_pin, OUTPUT);
pinMode(digit_clock_pin, OUTPUT);
}
void update_one_digit(int data)
{
int i;
byte pattern;
// get the digit pattern to be updated
pattern = digit_pattern[data];
// turn off the output of 74HC595
digitalWrite(digit_clock_pin, LOW);
// update data pattern to be outputed from 74HC595
// because it's a common anode LED, the pattern needs to be inverted
shiftOut(data_pin, bit_clock_pin, MSBFIRST, ~pattern);
// turn on the output of 74HC595
digitalWrite(digit_clock_pin, HIGH);
}
void loop()
{
int i;
unsigned int digit_base;
counter++;
digit_base = 16;
// get the value to be displayed and update one digit
update_one_digit(counter % digit_base);
delay(500);
}
Merci d'avance je vous en serais très reconnaissante
D'après ce que je vois dans la table digit_pattern :
B00111111, // 0
Envoyer des 1 pour allumer les 6 LEDs du ZERO sur un afficheur semble correspondre plutôt à un afficheur à cathode commune.
Personnellement pour un afficheur à anode commune j'enverrais plutôt le contraire :
B01000000, // 0
La pin 10 du 74HC595 reliée au GND ? j'ai un doute, plutôt au +5V :
Effectivement, il y a sans doute une erreur de câblage. Tu es sure que tu n'a pas inversé les signaux SHCP et STCP.
Sinon essaies d'allumer les segments un par un pour voir s'il sont bien dans l'ordre attendu.
Si le n'importe quoi varie toutes les demi secondes, et qu'il y a une erreur de cablage, elle ne peut porter que sur les affectations de segments (liaison partie parallele du 495 -> segments)
essayez (par un programme séparé) d'envoyer :
B00000001
puis
B00000010, B00000100 etc (les vamleurs étant multipliées par 2 à chaque fois: 8 essais)
pour voir quel(s) segment(s) est/sont affecté(s) -kamil m'a doublé-
Donc, il affiche diverses sortes de n'importe quoi? Il ne vous reste "qu"'à tester les segments un par un (par logiciel, en envoyant des pussances de 2; c'est plus facile qu'avec des yeux), comme Kamil et moi avons suggéré independamment...