Bonjour,
je suis actuellement en cours de programmation d'un microcontroleur pic32mx795f512l afin de gérer des batteries lithium et j'ai donc besoin non seulement de récupérer leur état de charge via l'échange avec un composants dont le rôle est de mesurer le passage du courant et en déduit donc ce qui reste.
Pour ce faire, je dois récupérer l'info et l'afficher sur un afficheur 128/64 pixel, j'affiche donc le symbole d'une batterie vide sur mon afficheur par cette fonction
ça c'est donc ok et sa s'affiche bienCode:
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 #define Image_batterie_vide_LEN 134 unsigned char Image_batterie_vide[Image_batterie_vide_LEN] = { 22, 48, 255, 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,255,255, 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,255,255, 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,255 }; 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++]); } } picture(10,2,Image_batterie_vide);
ce que je souhaite faire, est de faire varier le remplissage en fonction du niveau de charge que je récupèrerais, j'ai donc commencer une fonction pour le faire, mais évidemment je n'arrive pas à remplir mon tableau comme je le souhaite puisqu'il reste à zéro (:
le remplissage par ligne ce trouve sur 22 chiffres du tableau de 132, c'est 22 chiffre peuvent prendre les valeurs suivante en fonction du nombre de ligneCode:
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 void niveaux(uint8_t niveau_bat, uint8_t *tab_gauge) { uint16_t j,k,i,l; uint8_t nbr_ligne; uint16_t b; j=132; k=0; i=0; l=0; b=1056; nbr_ligne=(niveau_bat*b)/100; essai=40; for(l=0 ; l<6 ; l++) { for (i=0; i < 23; i++) // sur 22 données du tableau { j=j-i ; for (k=0 ; k < 8; k++) { if(Image_batterie_vide[j]==tab_pixel[k]) { if(Image_batterie_vide[j]< 256) { essai=52; tab_gauge[j]=Image_batterie_vide[j];//+ puissance(2,(k-1)); //tab_gauge[j]=0; } k=11; } nbr_ligne--; if (nbr_ligne < 0){ k=8; i=23; l=6;}; } } } }
1er ligne 128
2ième ligne 192
3ième ligne 224
4ième ligne 240
5ième ligne 248
6ième ligne 252
7ième ligne 254
8ième ligne 255
pourriez vous m'orienter ou me dire mes erreur s'il vous plait ?
Merci pour votre aides