cancel
Showing results for 
Search instead for 
Did you mean: 

Point to a char array for displaying on LCD?

Bogdan
Senior
Posted on May 24, 2014 at 16:27

Hi, i have a bmp085 bosch pressure&temp sensor, wich i want to show my data in format 4 degree

The raw readings are ok, i have the following code going

uint8_t tlsb;
uint8_t tmsb;
uint16_t temp;
char txt[10];
tmsb=i2c_rdack(I2C1);
tlsb=i2c_rdNack(I2C1);
temp=(tmsb<<8)+tlsb;
sprintf(txt,''%d'',temp); // converts int to string
char *ch1;
char *ch2;
char *ch3;
ch1=&txt[0];
ch2=&txt[1];
ch3=&txt[2];

UB_LCD_2x16_String(0,1,txt); // if i use only this, it shows me 254 value, wich is corect since i have 4 degree but i wanna split the chars so i can add comma''.'', the result i wanted to be like this UB_LCD_2x16_String(0,1,ch1); // displays first digit ( 2) UB_LCD_2x16_String(0,1,ch2); // displays second digit (5) UB_LCD_2x16_String(0,1,''.''); // displays only a dot (.) UB_LCD_2x16_String(0,1,ch3); // displays the last digit (4) The problem is at the pointing trough the txt char array. I`m not so familiar to standard c, used only mikroc builtin libs. Have any idea how to point Thanks #string #c-learning #c-string
3 REPLIES 3
Posted on May 24, 2014 at 17:12

sprintf(txt,''%d.%d'',temp/10,temp%10); // converts 10x int to string

xx.x
Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
Andrew Neil
Evangelist III
Posted on May 24, 2014 at 20:28

The the thing you need to remember is that a ''string'' in 'C' means ''an array of characters terminated by a NUL''

char txt[10];
char *ch1;
char *ch2;
char *ch3;
:
ch1=&txt[0];
ch2=&txt[1];
ch3=&txt[2];

So what this actually gives you, in a function expecting a string, is a set of strings starting at different points through the original string. If txt is the string ''123'', then ch1 isthe string ''123''; ch2 isthe string ''23''; ch3 isthe string ''3''. ''I`m not so familiar to standard c, used only mikroc builtin libs'' I can't imagine that this would be any different? Here's some standard 'C' learning resources:

http://blog.antronics.co.uk/2011/08/08/so-youre-thinking-of-starting-with-c/

Trev
Associate II
Posted on May 25, 2014 at 16:19

Not related to the display issue but

temp=(tmsb<<8)+tlsb;

Should be

temp=((uint16_t)tmsb<<8)+tlsb;

as tmsb is only 8 bits