Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
Fonctionnement des "FONT" sur écran OLED
Fonctionnement des "FONT" sur écran OLED
Bon je pense avoir compris le Kerning, c'est la table qui contient la largeur de ta matrice de caractères et je suppose au vue du nombre que tu dois pouvoir mettre d'autreS typeS de matrice avec la même table. Tout cela tourne, Bien sous MICROC pas chez moi
A+
PS: tu as le temps que tu mets pour faire la conversion du chiffre 4 ?
A+
PS: tu as le temps que tu mets pour faire la conversion du chiffre 4 ?
Fonctionnement des "FONT" sur écran OLED
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Tout cela tourne, Bien sous MICROC pas chez moi
Non il faut modifier quelques trucs de mon coté aussi !
PS: tu as le temps que tu mets pour faire la conversion du chiffre 4 ?
Non je ne sais pas faire encore. Faut vraiment que je trouve le temps pour apprendre l'IDE de MikroC
Fonctionnement des "FONT" sur écran OLED
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour,
Bon je m'embrouille encore avec ces maudits tableaux et pointeurs !
Avec ce code il ne detecte pas la fin de mon tableau, la boucle continue "ad vitam æternam" .
Savez vous comment faire, car j'ai essayer des centaines combinaisons .
Programme simplifié :
Bon je m'embrouille encore avec ces maudits tableaux et pointeurs !
Avec ce code il ne detecte pas la fin de mon tableau, la boucle continue "ad vitam æternam" .
Savez vous comment faire, car j'ai essayer des centaines combinaisons .
Programme simplifié :
Code : Tout sélectionner
//########################## DECLARATION #############################
unsigned int tempo, position, valeur, i=0, j=0, k=0, m=0 ;
unsigned int ecart, lettre, x, y;
void affichage_Lettre2(unsigned int lettre);
void affichage_Texte(unsigned int x, unsigned int y, unsigned char txt[]);
Code : Tout sélectionner
efface_ecran(); // On efface l'écran et la RAM
affichage_Texte(32,1,"QRSD");
delay_ms(5000);
//############################ BOUCLE INFINIE ##############################
while(1){
}
}
//##################################################################################
//######################### PROGRAMME SECONDAIRE ############################
//##################################################################################
void affichage_Texte(unsigned int x, unsigned int y, unsigned char txt[]){
unsigned char index=0 ;
while ( (txt[index]) != 0 ){
zone_ecran(x,x+15,y,y+1);
lettre = txt[index];
lettre = ( (lettre-33)*2)+1;
affichage_Lettre2 (descriptors[lettre]);
x += 17 ;
}
}
Fonctionnement des "FONT" sur écran OLED
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Impossible d’arrêter le défilement de mon texte !
Si le texte ne s’arrête pas, c'est que la valeur txt[index] n'est jamais égale à "NUL" donc à mon terminateur de string !
Pourtant je stocke bien mon texte dans un tableau ! le terminateur de string est rajouté automatiquement ?
Sinon c'est que ma valeur index n'est pas bonne et ne pointe jamais vers le terminateur de string. pourtant je ne vois pas pourquoi elle n’atteindrais jamais le terminateur. Comme c'est une variable locale, est-elle remise à zéro quand j’exécute la fonction affichage_Lettre2 (descriptors[lettre]);?
Je comprends vraiment pas ! en manuelle ca fonctionne impeccable, dès que je veut faire avec le terminateur de string ca tourne en boucle sans jamais s'arreter
Si le texte ne s’arrête pas, c'est que la valeur txt[index] n'est jamais égale à "NUL" donc à mon terminateur de string !
Pourtant je stocke bien mon texte dans un tableau ! le terminateur de string est rajouté automatiquement ?
Sinon c'est que ma valeur index n'est pas bonne et ne pointe jamais vers le terminateur de string. pourtant je ne vois pas pourquoi elle n’atteindrais jamais le terminateur. Comme c'est une variable locale, est-elle remise à zéro quand j’exécute la fonction affichage_Lettre2 (descriptors[lettre]);?
Je comprends vraiment pas ! en manuelle ca fonctionne impeccable, dès que je veut faire avec le terminateur de string ca tourne en boucle sans jamais s'arreter
Fonctionnement des "FONT" sur écran OLED
Fonctionnement des "FONT" sur écran OLED
- Claudius
Passioné- Messages : 260
- Âge : 69
- Enregistré en : septembre 2015
- Localisation : ELANCOURT (78 - YVELINES)
- Contact :
Bonjour,
Effectivement ...
Étant en charge de l'écriture de guidelines pour le Langage C (et autres langages ;-), j'ai été amené à mettre en garde voire "interdire" l'utilisation de la structure while(condition) au profit de la structure for (initialisation; incrément ou décrément; condition fin) sauf dans un et un seul cas; à savoir: while (true) avec naturellement une éventuelle condition de break mais pas toujours nécessaire dans un logiciel embarqué
Dans ton cas, cette structure while (condition fin) peut alors être écrite et ce d'une manière "auto-documentée" par:
De plus, si les textes à afficher sont manifestement de taille inférieure à une valeur connue (disons 80 par exemple), il est conseillé de rajouter une sécurité avec:
Code qui n'accroit pas la durée d'exécution mais ô combien sécurisé, tout cela en une seule ligne qui se lit comme un poème
Effectivement ...
Étant en charge de l'écriture de guidelines pour le Langage C (et autres langages ;-), j'ai été amené à mettre en garde voire "interdire" l'utilisation de la structure while(condition) au profit de la structure for (initialisation; incrément ou décrément; condition fin) sauf dans un et un seul cas; à savoir: while (true) avec naturellement une éventuelle condition de break mais pas toujours nécessaire dans un logiciel embarqué
Dans ton cas, cette structure while (condition fin) peut alors être écrite et ce d'une manière "auto-documentée" par:
Code : Tout sélectionner
unsigned char index;
for (index = 0; txt[index] != 0; index++) {
...
}
De plus, si les textes à afficher sont manifestement de taille inférieure à une valeur connue (disons 80 par exemple), il est conseillé de rajouter une sécurité avec:
Code : Tout sélectionner
unsigned char index;
for (index = 0; txt[index] != 0 && index < 80; index++) {
...
}
Code qui n'accroit pas la durée d'exécution mais ô combien sécurisé, tout cela en une seule ligne qui se lit comme un poème
Enregistreur de traces GPS & Boussole GPS parlante (PIC & Arduino)
Fonctionnement des "FONT" sur écran OLED
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
@Claudius : pour ce conseil !
Le but est d’empêcher un blocage dans une boucle n'est ce pas ?
Je viens de tester et ça fonctionne parfaitement (je n'en doutais pas ).
Voila je viens de finir ma petite libraire de convertion , à but pédagogique . Encore pas mal de choses apprises avec ceci.
Y'a-t-il une convention concernant l’écart entre deux lettres consécutives ? par exemple ici j'ai mis 2 pixels vides entre deux lettres, ce qui me parait pas trop mal!
Je sais pas si j'ai mis plus de temps à faire la "font" plutôt que d'essayer de la convertir mais bon . Je dispose maintenant de cette font qui est d'une taille intermédiaire pour cette écran.
Je ferais peut-être un tuto dès que j'aurais 5 minutes ( c'est pas gagné ) . Me contacter si le code vous intéresse et si voulez des explications, car du coup ça offre pas mal de font toute faites !
Le but est d’empêcher un blocage dans une boucle n'est ce pas ?
Je viens de tester et ça fonctionne parfaitement (je n'en doutais pas ).
Voila je viens de finir ma petite libraire de convertion , à but pédagogique . Encore pas mal de choses apprises avec ceci.
Y'a-t-il une convention concernant l’écart entre deux lettres consécutives ? par exemple ici j'ai mis 2 pixels vides entre deux lettres, ce qui me parait pas trop mal!
Je sais pas si j'ai mis plus de temps à faire la "font" plutôt que d'essayer de la convertir mais bon . Je dispose maintenant de cette font qui est d'une taille intermédiaire pour cette écran.
Je ferais peut-être un tuto dès que j'aurais 5 minutes ( c'est pas gagné ) . Me contacter si le code vous intéresse et si voulez des explications, car du coup ça offre pas mal de font toute faites !
Code : Tout sélectionner
affichage_Texte(32,1,"0123456789");
affichage_Texte(32,3,"AaBbCcDd");
//############################ BOUCLE INFINIE ##############################
while(1){
}
}
//##################################################################################
//######################### PROGRAMME SECONDAIRE ############################
//##################################################################################
//------------------ affiche le texte ----------------------------------
// Paramétres d'entrée : 1) position du début du texte en X de 32 à 95
// Paramétres d'entrée : 2) position du haut du texte en Y de 0 à 4
// Paramétres d'entrée : 3) le texte à afficher
void affichage_Texte(unsigned int x, unsigned int y, unsigned char txt[]){
unsigned char index=0, ecart=0 ;
for (index = 0; txt[index] != 0 && index < 255; index++){
if (txt[index]==32) txt[index]=128;
ecart = descriptors[((txt[index]-33)*2)] ; // calcul la largeur d'une lettre pour ajuster l'espace entre chaques lettres
lettre = ((txt[index]-33)*2) + 1; // calcul l'emplacement de la matrice lettre
if (ecart>=9){ // si lettre sur 32 octets
zone_ecran(x,x+15,y,y+1);
affichage_Lettre2 (descriptors[lettre]);
}
else{ // Si lettre sur 16 Octets
zone_ecran(x,x+7,y,y+1);
affichage_Lettre (descriptors[lettre]);
}
x += ecart+2 ; // Positionne le curseur pour la prochaine lettre avec 2 espaces entre chaque lettres
}
}
//------------------Convertit une lettre composée de 32 Octets -----------------
// Paramètre d'entrée : la position dans le tableau "alphabet" du premier des 32 Octets
void affichage_Lettre2(unsigned int position){
i = j = k = m = valeur = 0;
for (k=0;k<=1;k++){
for (m=0;m<=1;m++){
position += m;
for (i=0;i<=7;i++){
for (j=0;j<=7;j++){
valeur += ( (((font16x8[(position+(k*15)+(j*2))])>>(7-i)) & (0x01)) << j ) ;
}
OLED_M_data(valeur);
valeur = 0 ;
}
}
}
}
//------------------Convertit une lettre composée de 16 Octets -----------------
// Paramètre d'entrée : la position dans le tableau "alphabet" du premier des 16 Octets
void affichage_Lettre(unsigned int position){
i = j = k = m = valeur = 0;
for (k=0;k<=1;k++){
for (i=0;i<=7;i++){
for (j=0;j<=7;j++){
valeur += ( (((font16x8[(position+(k*8)+j)])>>(7-i)) & (0x01)) << j ) ;
}
OLED_M_data(valeur);
valeur = 0 ;
}
}
}
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Fonctionnement des "FONT" sur écran OLED
Fonctionnement des "FONT" sur écran OLED
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Hello,
Oui c'est plutôt cool, car cela ouvre énormément de possibilité .
je viens de travailler sur une re-fonte de ma librairie, mais je n'arrive pas à la simplifier ! A part le remplacement des variables par leur valeur calculé , ce qui évitera de rechercher une variable . Mais en dur dans la formule je ne vois pas comment faire .
j'ai essayé en traitant les lettres de 32 Octets de différentes manières mais ça reviens toujours au même ! car les caractères en 32 Octets et en 16 Octet ne sont pas traités de la même façon .
Je vais m’arrêter la !!!!
La librairie convertit toutes les caractères, du moment qu'ils fassent 16x16 pixels max ! ( 16 en hauteur et 16 en largeur)
sylvain54 a écrit :Source du message Une chose de faite.
Oui c'est plutôt cool, car cela ouvre énormément de possibilité .
je viens de travailler sur une re-fonte de ma librairie, mais je n'arrive pas à la simplifier ! A part le remplacement des variables par leur valeur calculé , ce qui évitera de rechercher une variable . Mais en dur dans la formule je ne vois pas comment faire .
j'ai essayé en traitant les lettres de 32 Octets de différentes manières mais ça reviens toujours au même ! car les caractères en 32 Octets et en 16 Octet ne sont pas traités de la même façon .
Je vais m’arrêter la !!!!
La librairie convertit toutes les caractères, du moment qu'ils fassent 16x16 pixels max ! ( 16 en hauteur et 16 en largeur)
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 62 invités