Tady je odkaz na dvě čidla .http://luv-i.net/?pg=pocasi_teplomer
Ve zdrojovém kodu jsou tam chyby.
Muj funguje
Teplomer.c
#include <stdio.h>
#include <unistd.h>
#include <sys/io.h>
#include <stdlib.h>
#define DATA 0x378
#define STATUS DATA+1
#define CONTROL DATA+2
float ZmerTo (unsigned short naportu, unsigned char odkud, int stav)
// funkce vraci teplotu ve st. Celsia
// parametry
// naportu - port na kterem se provadi mereni
// odkud - bite na ktery je pripojen teplomer
// stav - urcuje zda je vstup negovan
#define DelkaCyklu 0xffff
{
int t0, t1, t2;
int mask = (1 << odkud);
t1=0;
t2=0;
for (t0 = 0; t0 < DelkaCyklu; t0++)
// vlastní mereni
if ((inb (naportu) & mask) == 0) t1++ ;
// negace mereni v pripade, ze je port negovan
t2=DelkaCyklu-t1;
if (stav!=0){
t1=t2;
t2=DelkaCyklu-t1;
};
// vlastní vypocet teploty 16
return ((((double)t2 / ((double)DelkaCyklu)) - 0.32) / 0.0047 +16);
}
int main (void)
{
if (setuid (0) < 0)
{
printf ("Program musi byt spusten rootem\n");
exit (1);
}
if (ioperm (STATUS, 3, 1))
{
printf ("Program musi byt spusten rootem\n");
exit (1);
}
if (ioperm (CONTROL, 3, 1))
{
printf ("Neni pristup na port\n");
exit (1);
}
// nastaveni control portu na 1 tak aby na nem bylo +5V pro napajeni
outb (52, CONTROL);
// zmereni teploty
//pro LPT port a pro teplomer zapojeny na PIN 15
printf ("IN %4.1f \n", ZmerTo (STATUS, 3, 0));
//pro lpt port a pro teplomer zapojeny na pin 10
printf ("OUT %4.1f\n", ZmerTo (STATUS, 6, 0));
// nastaveni control portu na 0 tak aby bylo vypnute napajeni cidla
outb (55, CONTROL);
return (0);
}

