1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249
|
#include <PS2Keyboard.h> // importation bibliotheque
#include <EEPROM.h>
#define DataPin 4 // pins de sortie pour registre à décalage
#define WritePin 5
#define ShiftPin 2
const int data = 8; // initialisation variable pour clavier
const int pinClock = 3;
PS2Keyboard keyboard; // le clavier
const int supprimer = 127; // valeur ascii de la touche del
bool valsave[8]; // tableau à enregistrer dans l' eeprom
bool savetab; // variable qui indique qu' on peut enregistrer
bool savesup; // variable qui indique qu'on peut supprimer tout l'eeprom à l'aide d'une combinaison
int tour; // nombre de fois que l'on appuie sur la touche tab
bool demarrage; // variable pour l'enregistrement au demarrage
bool tabdemarrage[8]; // tableau pour l'enregistrement au demarrage
int val; // valeur pour fonction Affi7seg
int S = 10; // valeur correspondant à la ligne du tableau StAffi7 pour supprimer
int F = 11; // valeur correspondant à la ligne du tableau StAffi7 en cas d'erreur
int PinIndex; // variable pour fonction Affi7seg
struct saveeeprom // indique des valeurs à remplacer ou supprimer dans l'eeprom
{ int emplacement;
bool donnee[8];
};
saveeeprom chiffre[27] // sert à la mise à jour de l'eeprom
{
};
saveeeprom chiffrelue[27] // sert à la lecture de l'eeprom
{
};
struct StAffi7 // tableau structure pour la fonction Affi7seg
{ int Valeur;
bool segment[8] ; //
};
StAffi7 ChiffreAffi7[12]
{
0, {1, 1, 1, 1, 1, 1, 0, 0},
1, {0, 1, 1, 0, 0, 0, 0, 0},
2, {1, 1, 0, 1, 1, 0, 1, 0},
3, {1, 1, 1, 1, 0, 0, 1, 0},
4, {0, 1, 1, 0, 0, 1, 1, 0},
5, {1, 0, 1, 1, 0, 1, 1, 0},
6, {1, 0, 1, 1, 1, 1, 1, 0},
7, {1, 1, 1, 0, 0, 1, 0, 0},
8, {1, 1, 1, 1, 1, 1, 1, 0},
9, {1, 1, 1, 1, 0, 1, 1, 0},
S, {0, 0, 0, 0, 0, 0, 0, 0},
F, {1, 0, 0, 0, 1, 1, 1, 0},
};
void Affi7seg(int val) { // fonction qui permet d'etablir la valeur des sorties en fonction des données sur le tableau
for (PinIndex = 7; PinIndex >= 0; PinIndex--)
{
digitalWrite(DataPin, ChiffreAffi7[val - 48].segment[PinIndex]);
digitalWrite(ShiftPin, HIGH);
digitalWrite(ShiftPin, LOW);
}
}
void afficher()
{
digitalWrite (WritePin, HIGH); // afficher sur l'afficheur le chiffre
digitalWrite (WritePin, LOW);
}
void tampon ( bool memo[8], int clavier) // fonction tampon qui enregistre les valeurs des sorties pour chaque cycle
{
for (int index = 0; index <= 7; index ++)
{
memo[index] = ChiffreAffi7[clavier].segment[index];
}
}
void setup() {
delay(1000); // mise en marche du clavier
keyboard.begin(data, pinClock, PS2Keymap_French);
Serial.begin(9600);
Serial.println("----------------------------");
Serial.println("Clavier pret pour la saisie");
Serial.println("----------------------------\n");
pinMode(DataPin, OUTPUT); // donnee pour le registre
pinMode(ShiftPin, OUTPUT); // l'horloge du registre
pinMode(WritePin, OUTPUT); // activer les sorties du registre
EEPROM.get (0, chiffrelue); // mise à jour du programme pour savoir ce qu'il y a dans l'eeprom
for (int Index = 0; Index < 27; Index ++)
{
for (int index = 0; index <= 7; index++)
{
chiffre[Index].donnee[index] = chiffrelue[Index].donnee[index];
}
}
for (int Index2 = 7; Index2 >= 0; Index2--) // afficher ce qu'il y avait avant
{
digitalWrite(DataPin, chiffrelue[26].donnee[Index2]);
digitalWrite(ShiftPin, HIGH);
digitalWrite(ShiftPin, LOW);
tabdemarrage[Index2] = chiffre[26].donnee[Index2];
}
afficher();
demarrage = true;
}
void loop() {
if (keyboard.available()) {
int entreeClavier = keyboard.read();
switch (entreeClavier)
{
case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // dans le cas ou on a un chiffre selon le code ascii
Affi7seg(entreeClavier); // envoie de la commande binaire pour l'affichage
afficher();
tampon (valsave, entreeClavier - 48); // enregistrement dans la variable tampon
demarrage = false;
break;
case (supprimer): // dans le cas si la touche supprimer est pressé
Affi7seg(S + 48); //rien afficher sur l'afficheur
afficher();
tampon (valsave, S); // enregistrement dans la variable tampon
savesup = true;
demarrage = false;
break;
case 9: // dans le cas ou l'on a la touche d'enregistrement appuyé (tab)
savetab = true;
break;
case 97: case 98: case 99: case 100: case 101: case 102: case 103: case 104: case 105: case 106: case 107: case 108: case 109: case 110:
case 111: case 112: case 113: case 114: case 115: case 116: case 117: case 118: case 119: case 120: case 121: case 122: // dans le cas si on a une lettre de l'alphabet appuyée
if (savetab)
{
for (int index = 0; index <= 7; index++)
{
}
}
else
{
demarrage = false;
}
EEPROM.get (0, chiffrelue); // lire ce qui il y a d'enregistrer dans la touche et l'afficher
for (int Index = 7; Index >= 0; Index--)
{
digitalWrite(DataPin, chiffrelue[entreeClavier - 97].donnee[Index]);
digitalWrite(ShiftPin, HIGH);
digitalWrite(ShiftPin, LOW);
}
afficher();
for (int index = 0; index < 8; index ++) // enregistrer pour afficher l'ancien chiffre lors de la mise en tension
{
chiffre[26].donnee[index] = chiffrelue[entreeClavier - 97].donnee[index];
}
EEPROM.put(0, chiffre);
break;
default: // dans le cas si la touche ne correspond à rien
Affi7seg(F + 48);
afficher();
tampon (valsave, F);
demarrage = false;
break;
}
if (entreeClavier != 9 and savetab and not 0 <= entreeClavier <= 47 and not 58 <= entreeClavier <= 96 and not 123 <= entreeClavier <= 126) // dans le cas ou l'on veut enregistrer
{
if (demarrage) // enregistre apres avoir redemmarer
{
for (int index = 0; index < 8; index ++)
{
chiffre[entreeClavier - 97].donnee[index] = tabdemarrage[index]; //enregistrer la première valeur afficher lors du demarrage
}
EEPROM.put(0, chiffre);
demarrage = false;
savetab = false;
tour = 0;
}
else if (entreeClavier != supprimer) // enregistrer dans une des touches qui correspondent à une lettre de l'alphabet
{
for (int index = 0; index <= 7; index ++)
{
chiffre[entreeClavier - 97].donnee[index] = valsave[index];
chiffre[26].donnee[index] = valsave[index]; // enregistrer pour afficher l'ancien chiffre lors de la mise en tension
}
EEPROM.put(0, chiffre); // on enregistre sur une des lettres de l'alphabet
savetab = false;
tour = 0;
}
else if (supprimer) // on supprime tout les enregistrements
{
savetab = false;
savesup = false;
tour = 0;
for (int Index = 0; Index < 26; Index ++)
{
for (int index = 7 ; index >= 0; index --)
{
chiffre[Index].donnee[index] = 0;
chiffre[26].donnee[index] = 0; // enregistrer pour afficher l'ancien chiffre lors de la mise en tension
}
}
EEPROM.put(0, chiffre);
}
}
if (entreeClavier == 9)
{
tour ++;
}
if (tour == 2) // si touche tab appuyer 2 fois d'affiler arreter l'enregistrement
{
savetab = false;
tour = 0;
}
if (not (entreeClavier >= 97 and entreeClavier <= 122))
{
for (int Index = 7; Index >= 0; Index --) // enregistrer pour afficher l'ancien chiffre lors de la mise en tension
{
chiffre[26].donnee[Index] = valsave[Index];
}
EEPROM.put(0, chiffre);
}
}
} |
Partager