Skip to main content
Bogdan
Senior
May 24, 2014
Question

Point to a char array for displaying on LCD?

  • May 24, 2014
  • 3 replies
  • 1282 views
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
    This topic has been closed for replies.

    3 replies

    Tesla DeLorean
    Guru
    May 24, 2014
    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 (See Profile) Up vote any posts that you find helpful, it shows what's working..
    Andrew Neil
    Super User
    May 24, 2014
    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/

    A complex system that works is invariably found to have evolved from a simple system that worked.A complex system designed from scratch never works and cannot be patched up to make it work.
    Trev
    Associate II
    May 25, 2014
    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