Salut , je compte réaliser une horloge composé de 6 afficheurs BCD , commandé par arduino uno ( 2 si il le faut car bcp de sortie ) , j'utilise également le registre 74C595 pour limité le nombre de sortie , et aussi un petit clavier pour entrer le temps .
Sincèrement ce projet n'est pas très utile mais mon ami passe son bac et a fait option projet et il a choisi montre BCD donc je l'aide comme je peux , je compte faire 3 mode ( 4 si possible )
le code :
#include <Keypad.h>
#define SHIFT 5
#define LATCH 6
#define DATA 7
#define SHIFT_2 8
#define LATCH_2 9
#define DATA_2 10
/*------------------------------------------------------------------------------------------*/
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'#','0','*','D'}
};
byte rowPins[ROWS] = {3, 2, A5, A4}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {A3,A2, A1, A0}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
/*------------------------------------------------------------------------------------------*/
const byte chars[10] = {
B00111111,//0
B00000110,//1
B01011011,//2
B01001111,//3
B01100110, //4
B01101101, //5
B01111101,//6
B00000111,//7
B01111111,//8
B01101111 //9
};
int aa = 0 ;
int i2 = 1 ;
/*------------------------------------------------------------------------------------------*/
void setup(){
Serial.begin(9600);
// On déclare les pins vers le 74HC595 en sortie
pinMode(SHIFT, OUTPUT);
pinMode(LATCH, OUTPUT);
pinMode(DATA, OUTPUT);
}
void loop(){
char mode = keypad.getKey();
while(mode!=NO_KEY){
char a = keypad.getKey();
while(a!=NO_KEY){
switch ( mode ) {
/*------------------------------------------------------------------------------------------*/
case 'A' :
{
int aa = a - '0' ; // on convertie aa en int
for ( int i = aa ; i<10 ; i++ ){
digitalWrite(LATCH, LOW);
shiftOut(DATA, SHIFT, MSBFIRST,chars[i]);
digitalWrite(LATCH, HIGH);
delay(1000);
if (i == 9 )
{
if(i2>5){i2=0;}
delay(1000);
digitalWrite(LATCH_2, LOW);
shiftOut(DATA_2, SHIFT_2, MSBFIRST, chars[i2]);
digitalWrite(LATCH_2, HIGH);
i2++;
}
}
a = '0' ; // on le fait pour qu'aprés le 9 on a 0 et pas revenir a l'état précédent
break ;
}
/*-------------------------------------------------------------------------------------------*/
case 'B' :
{
digitalWrite(LATCH, LOW);
shiftOut(DATA, SHIFT, MSBFIRST, B10001101);
digitalWrite(LATCH, HIGH);
delay(1000) ;
break ;
}
default :{
break ;
}
}
}
}
}
- Aider moi a ameliorer ce programme s'il vous plait .