Tak vycházím ze stránek co mi byly doporučeny:
http://svetelektro.com/clanky/praca-s-d ... 0-525.html
A snažím se o to, jak dostat do nějaké proměnné, třeba 'char teplota' hodnotu rovnou celočíselné hodnotě teploty.
Upravuju DS18B20.c
Kód: Vybrať všetko
void ds18b20_get_temp(char* buff)
{
unsigned char low_byte;
unsigned char high_byte;
unsigned char sign;
unsigned int decimal;
unsigned int integer;
ds18b20_reset_pulse();
ds18b20_write(DS18B20_SKIPROM);
ds18b20_write(DS18B20_CONVERTTEMP);
ds18b20_wait_to_convert();
ds18b20_reset_pulse();
ds18b20_write(DS18B20_SKIPROM);
ds18b20_write(DS18B20_RSCRATCHPAD);
low_byte = ds18b20_read();
_delay_us(5);
high_byte = ds18b20_read();
ds18b20_reset_pulse();
if (high_byte & (0xF0)) sign = 1;
else sign = 0;
decimal = (low_byte & 0x0F)*625;
high_byte &= 0x07;
high_byte <<= 4;
low_byte >>= 4;
low_byte &= 0x0F;
integer = low_byte | high_byte;
if(sign == 0) sprintf(buff,"%u.%04u",integer,decimal);
else if(sign == 1) sprintf(buff,"-%u.%04u",integer,decimal);
}
zde si nejsem tak zcela jist, jestli mi bude stačit tato úprava.
Kód: Vybrať všetko
if(sign == 0) sprintf(buff,"%u",integer);
else if(sign == 1) sprintf(buff,"-%u",integer);
Potom v hlavním programu, zavolám fci, pro měření teploty, pojmenovanou jako ' char text[17]; '..
Kód: Vybrať všetko
{
char text[17];
char teplota;
lcd_init();
while(1)
{
ds18b20_get_temp(text);
lcd_position(1,1);
lcd_puts(text);
_delay_ms(200);
}
}
no a zde mi asi chybí nějaký převod, abych v hodnotě 'teplota' dostal číslo rovno např: 26. No a zde jsem se nějak zadrhl.
Snad jsem svůj drobný problém popsal maximálně přehledně a pochopitelně.
Najde se někdo, kdo by mi pomohl?