comment ça ? je suis obliger de garder ces dimensions, je dois en faire tenir 4 jauges sur mon afficheur.
comment ça ? je suis obliger de garder ces dimensions, je dois en faire tenir 4 jauges sur mon afficheur.
je suis restreint par la techno de mon afficheur, l'écriture des chiffres représentatif du soc traité différemment des graphiques, est plaçable sur 8 lignes de l'afficheur et là ils sont au plus haut.
De plus, l'ouverture ou est placer mon LCD limite légèrement les bords.
Pour le moment, j'essai surtout de remplir ... à la rigueur les bords des jauges c'est pas trop grave.
en corrigeant :désolé pour les indentations, il semblerait qu'ils ce modifie quand je colle mon code ...
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
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 void niveaux(uint8_t niveau_bat,unsigned char *tab_gauge) { //uint8_t nbr_data;//=niveau_bat/2; //valeur du soc compris entre 0 et 50 uint8_t i,k,l; uint8_t size=133,size_temp; //temp=21; for(l=2 ; l>size ; l++) {tab_gauge[l]=Image_batterie_vide[l];} //i=k=l=0; size_temp=size; //tab_gauge[0]=22; //tab_gauge[1]=48; //nbr_data = niveau_bat; //rendre en proportion du tableau for(k=0; k < 6 ; k++) { for(l=0;l<8; l++) { for(i=0; i<22 ; i++) // par ligne de 22 { size_temp=size_temp-i; tab_gauge[size_temp]=(tab_gauge[size_temp]>>1) | 0x80 ; //tab_gauge[size_temp]=(tab_gauge[size_temp] >>1) | 0x80 ; //nbr_data--; //if(nbr_data==0) {l=8; k=6;i=23;} } size=size+21; //nbr_data--; //if(nbr_data==0) {l=8; k=6;} } size=size-22; } tab_gauge[0]=22; tab_gauge[1]=48; }
Merci mais qu'est-ce que ça changerai au code, ça le simplifierai grandement ?...
et comment verrais tu ça, par ce que là moi je suis pommer ... je tatonne et pourtant je pensais avoir trouvé la solution ce matin au réveille
avec ça : tab_gauge[size_temp]=(tab_gauge[size_temp]>>1) | 0x80 ;
Dessine tes batteries vides (ou une), on verra pour le code ensuite.
leurs tableau en 26/48
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 unsigned char Image_batterie_vide2648[158] = { 26, 48, 255, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255 };
Il faut montrer ce que ça donne sur l'afficheur, avec le code associé.
Oups autant pour moi
le code associé ? le tableau c'est celui envoyé au précédent poste sinon le reste n'a pas changé, enfin malgré mais nombreuses modifs à chaque essai pour
J'ai donc la même chose qu'en post24 mais en plus large
Le code :
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
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 void niveaux(uint8_t niveau_bat,unsigned char *tab_gauge) { //uint8_t nbr_data;//=niveau_bat/2; //valeur du soc compris entre 0 et 50 uint8_t i,k,l; uint8_t size=156,size_temp; //temp=21; //for(l=2 ; l>size ; l++) {tab_gauge[l]=Image_batterie_vide[l];} for(l=2 ; l>size ; l++) {tab_gauge[l]=Image_batterie_vide2648[l];} //i=k=l=0; size_temp=size; //tab_gauge[0]=22; //tab_gauge[1]=48; //nbr_data = niveau_bat; //rendre en proportion du tableau for(k=0; k < 6 ; k++) { //ligne=size_temp-k; // tab_gauge[size_temp]=(tab_gauge[size_temp]>>1) | 0x80 ; for(l=0;l<8; l++) { for(i=0; i<22 ; i++) // par ligne de 22 { size_temp=size_temp-i; //tab_gauge[size_temp]=tab_gauge[size_temp]; tab_gauge[size_temp]=(tab_gauge[size_temp]>>1) | 0x80 ; //tab_gauge[size_temp]=(tab_gauge[size_temp] >>1) | 0x80 ; //nbr_data--; //if(nbr_data==0) {l=8; k=6;i=23;} } size=size+21; //nbr_data--; //if(nbr_data==0) {l=8; k=6;} } size=size-22; } tab_gauge[0]=22; tab_gauge[1]=48; }
Ok. Remplis donc la partie intérieur de ta batterie (depuis le point supérieur gauche) avec le tableau qui suit, et tel quel, pour voir ce que ça donne sur ton afficheur :
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part unsigned char image_niveau_batterie[140]= {24, 46, 255, 255, 255, 255, 255, 255, 0};
si j'ai bien compris, c'est d'afficher ce tableau
unsigned char image_niveau_batterie[140]= {24, 46, 255, 255, 255, 255, 255, 255, 0};
Bonjour David,
Peut être pourrais tu tester le code que je t'ai envoyé ? Manifestement tes verticales dépendent du n° de la verticale (hors bords de 1 à 20) ce qui n'est pas logique.
Je te conseille de dessiner ta batterie avec les divers octets, tu y verras beaucoup plus clair. Le début du tableau (hormis les deux premiers octets) représente le bas ou le haut de la batterie ?
Salutations
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)
Il y a peut-être un problème d'orientation là. Je m'attendais à 2 lignes horizontales.
Et si tu intervertis, permutes 24 et 46, ça donne quoi ?
unsigned char image_niveau_batterie[140]= {46, 24, 255, 255, 255, 255, 255, 255, 0};
Sinon qu'est-ce tu utilises comme bibliothèque pour ton écran, et quelle est la référence de ce dernier ?
Bonsoir,
le LCD est celui-ci
https://docs.rs-online.com/dc05/0900766b81384135.pdf
en 128/64
Ceci est le code pour afficher des graphiques que l'on peut généré à l'aide d'un outils sur le site du fabricant
"ELECTRONIC ASSEMBLY LCD-Tools Portable"
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 void picture(uint16_t column,uint16_t page, const uint8_t *pic_adress) { uint8_t c,p; unsigned int byte_cnt = 2; uint8_t width, page_cnt; width = pic_adress[0]; page_cnt =(pic_adress[1] + 7) / 8; //height in pages, add 7 and divide by 8 for getting the used pages (byte boundaries) //if(width + column > 128) width = 128 - column; // ecran postion normal if(width + column > 132) width = 132 - column; // ecran inversé if(page_cnt + page > 8)page_cnt = 8 - page; for(p=0; p<page_cnt; p++) { position(column, page + p); for(c=0; c<width; c++) // écran normal send_data(pic_adress[byte_cnt++]); } }
les pixels sont adressé par ligne de 8bits ou pixels, à raison de 8 lignes de 8pixels.
Ceci est le controleur : https://www.tme.eu/Document/f1dcdeee...ARDDOG7565.pdf
Merci
Un lien vers la bibliothèque complète, ce serait bien. Parce que là tu ne montres que la fonction picture(), et ce n'est pas suffisant.
D'ailleurs, dans celle-ci, il semble y avoir une contradiction entre le code et les commentaires: lignes 10, 11 et 19.
Quant à la documentation, elle "dit" que l'image doit être au format BLV, mais ne donne pas plus de détails à part renvoyer au programme que tu cites. On y trouve aussi une fonction rectangle(), elle est peut-être plus simple que picture(). Enfin essaye aussi le code de Guesset, s'il fonctionne alors ton problème est réglé.
Désolé, j'ai pas mal d'éléments depuis, les outils sont là
https://www.lcd-module.com/support/a...tion-note.html
je vais essayer le code de guesset, juste que j'ai du mal à tout comprendre pour le remettre en forme pour mon compilateur.
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 void DoImgLevel(uint8_t niveau_bat, uint8_t *tab_gauge) int ix, msk; uint8_t *pEmpty = pic_adress + 3; // Premier octet intérieur 0:W, 1:H, 2:bord,... uint8_t *pGauge = tab_gauge + 3; n = ???; if(n > 47) n = 47; // niveau de la batterie projeté entre 0 et 47 int ndiv8 = n >> 3; // Niveau = combien d'octets pleins en vertical for (int y8 = 0; y8 < 6; ++y) { // De 8 points en 8 points verticalement if (y < ndiv8) msk = 255 else if (y > ndiv8) msk = 0; else msk = (2 << (n & 7)) - 1; for (int ix = 20; ix; --ix, ++pGauge, ++pEmpty) *pGauge = uint8_t(msk) | *pEmpty; pGauge += 2; // Sauter le bord droit puis le bord pEmpty += 2; // gauche de la ligne suivante. }
pic_adress --> serait l'adresse du tableau gauge vide ? c'est bien ça
tab_gauge --> serait l'adresse du tableau gauge à remplir ?
n correspond à quoi ?
for (int ix = 20; ix; --ix, ++pGauge, ++pEmpty) là il y a plus que 3 arguments dans le for, dans lequel on a
--ix c'est pas comme ça plutôt ix-- pour décrémenter ? tout comme les autres
merci pour votre aide, mes délai diminue dangereusement en plus de problème hardware que je traverse et me dis qu'en attendant de faire mieux plus tard je ferais bien 10 tableaux de niveaux différent avec lesquels je ferais des comparaisons pour remplir ma jauge (: je sais c'est pas classe mais temporaire.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager