Bonjour,
à la base j'ai trouvé :
https://github.com/tehniq3/VFD_FG209M2_2MAX6921/blob/master/README.md
d'apres ce que j'ai compris : il envoie une série de 20 bits pour la position du caractere + 20 bits pour le caractere qui est défini dans la table au début dans 2 max6921.
ce que j'ai réussi à faire : alterner des "phrases" de 20 caracteres max
est-il possible de définir une phrase plus longue et faire défiler les caracteres de droite à gauche ?
ou de se servir du moniteur série comme "entrée", cad écrire une phrase sur le moniteur série et envoyer pour qu'elle s'affiche "à la volée" ?
Merci
code adapté :
/*affiche message sur vfd itron 20 carat 14 segments+ point+virgule
MAX6921 -> datasheet: http://datasheets.maximintegrated.com/en/ds/MAX6921-MAX6931.pdf
original sketch from https://github.com/echox/arduino-test/blob/master/max6921.ino
current sketch by Nicu FLORICA (aka niq_ro)
https://github.com/tehniq3/VFD_FG209M2_2MAX6921
affichage de texte sans defilement
test ok
*/
int clk = 3; // 6921 : 15
int load = 5; // 6921 : 16
int din = 4; // 6921 : 27
int led = 13;
int blank = 7; // 6921 : 13
//etoile
byte ics[20] = { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
byte zero[20] = { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1};
byte un[20] = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0};
byte deux[20] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1};
byte trois[20] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1};
byte quatre[20] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0};
byte cinci[20] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1};
byte cinq[20]= { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1};
byte six[20] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1};
byte sept[20] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1};
byte huit[20] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1};
byte neuf[20] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1};
// alphabet majuscules
byte literaA[20] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1};
byte literaB[20] = { 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1};
byte literaC[20] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1};
byte literaD[20] = { 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1};
byte literaE[20] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1};
byte literaF[20] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1};
byte literaG[20] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1};
byte literaH[20] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0};
byte literaI[20] = { 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1};
byte literaJ[20] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0};
byte literaK[20]= { 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0};
byte literaL[20]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0};
byte literaM[20]= { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0};
byte literaN[20]= { 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0};
byte literaO[20]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1};
byte literaP[20]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1};
byte literaQ[20]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1};
byte literaR[20]= { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1};
byte literaS[20]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1};
byte literaT[20]= { 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
byte literaU[20]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0};
byte literaV[20]= { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0};
byte literaW[20]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
byte literaX[20]= { 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
byte literaY[20]= { 1, 0, 1, 0, 0 , 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
byte litezaZ[20]= { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1};
//espace
byte gol[20] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
byte minus[20]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0};
byte plus[20]= { 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0};
byte grad[20]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1};
byte arond[20]= { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1};
byte egal[20]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0};
int p;
int s;
// diff delais duree affichage
int delaiaf2 = 300;
int timeaf=700; //
void setup() {
pinMode(din, OUTPUT);
pinMode(load, OUTPUT);
pinMode(clk, OUTPUT);
pinMode(led, OUTPUT);
pinMode(blank, OUTPUT);
digitalWrite(blank, HIGH);
delay(50);
//digitalWrite(blank, LOW);
digitalWrite(clk, LOW);
digitalWrite(load, LOW);
digitalWrite(din, LOW);
}
void loop()
{
digitalWrite(blank, LOW);// display on
// le texte s'affiche en une fois pendant la duree timeaf
for(int k=0; k < timeaf; k++) {
affichcar0(19, ics);// position a gauche 1er caractere
affichcar0(18, ics); // etoile
affichcar0(17, ics);
affichcar0(16, gol); // espace
affichcar0(15, literaJ); //
affichcar0(14, literaO);
affichcar0(13, literaY);
affichcar0(12, literaE);
affichcar0(11, literaU);
affichcar0(10, literaX); //
affichcar0(9, gol);
affichcar0(8, literaN);
affichcar0(7, literaO);
affichcar0(6, literaE);
affichcar0(5, literaL);
affichcar0(4, gol);
affichcar0(2, ics);
affichcar0(1, ics);
affichcar0(0, ics);
/*
affichcar0(7, literaA); // position 7 caract A
affichcar0(6, literaD);
affichcar0(5, literaO);
affichcar0(4, literaR);
affichcar0(3, literaA);
affichcar0(2, literaB);
affichcar0(1, literaL);
affichcar0(0, literaE);
*/
}
//delay(500);
digitalWrite(blank, HIGH);// display off
delay(50);
// comme çà n'efface pas le buffer, on pourrait charger
// la nouvelle phrase dans le buffer display off
// et remettre display on apres
// ou faire défiler une phrase plus longue
//delay(100);
//deleteline();
// nouveau texte avec duree différente
digitalWrite(blank, LOW);// display on
for(int k=0; k < delaiaf2; k++) {
affichcar0(19, literaM); // position 19
affichcar0(18, literaE);
affichcar0(17, literaI);
affichcar0(16, literaL);
affichcar0(15, literaL);
affichcar0(14, literaE); // position 14
affichcar0(13, literaU);
affichcar0(12, literaR);
affichcar0(11, literaS);
affichcar0(10, gol);
affichcar0(9, literaV);
affichcar0(8, literaO); //
affichcar0(7, literaE);
affichcar0(6, literaU);
affichcar0(5, literaX);
affichcar0(4, gol);
affichcar0(3, deux);
affichcar0(2, zero);
affichcar0(1, deux);
affichcar0(0, trois);
}
//delay(400);
digitalWrite(blank, HIGH);// display off
delay(20);
}
// fonction affichage
void affichcar0 (byte placecar, byte caracter[20]) {
// first put position of character
for(int i=0;i<20;i++) {
if (i == placecar) digitalWrite(din, 1);
else digitalWrite(din, 0);
digitalWrite(clk, HIGH);
digitalWrite(clk, LOW);
}
// digitalWrite(clk, LOW);
// second put letter/character
for(int i=19;i>=0;i--) {
digitalWrite(din, caracter[i]);
digitalWrite(clk, HIGH);
digitalWrite(clk, LOW);
}
// digitalWrite(clk, LOW);
// load the changes
digitalWrite(load, HIGH);
digitalWrite(load, LOW);
}
// fonction effacement ligne remplir avec des espaces
void deleteline(){
for(p=19; p>=0; p--);{
affichcar0(p, gol); }
}
// fonction affichage qui ajoute virgule au caractere
/*
void affichcar1 (byte placecar, byte caracter[20]) {
// first put position of character
for(int i=0;i<20;i++) {
if (i == placecar) digitalWrite(din, 1);
else digitalWrite(din, 0);
digitalWrite(clk, HIGH);
digitalWrite(clk, LOW);
digitalWrite(led, LOW);
}
// second put letter/character
for(int i=19;i>=0;i--) {
if (i == 7) digitalWrite(din, 1); // la virgule ?
else
digitalWrite(din, caracter[i]);
digitalWrite(clk, HIGH);
digitalWrite(clk, LOW);
}
// load the changes
digitalWrite(load, HIGH);
digitalWrite(load, LOW);
digitalWrite(led, HIGH);
}*/saisissez ou collez du code ici
Merci