Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
67 lines (54 sloc) 1.79 KB
/*******************************************************************************
Raspberry Pi用 SPI K熱電対センサ MAXIM社 MAX6675 raspi_max6675
本ソースリストおよびソフトウェアは、ライセンスフリーです。(詳細は別記)
利用、編集、再配布等が自由に行えますが、著作権表示の改変は禁止します。
SPI接続のK熱電対センサの値を読み取る
MAXIM社 MAX6675
0℃~1024℃の測定に対応
エラー時は-999.9℃を応答
Copyright (c) 2017 Wataru KUNINO
https://bokunimo.net/raspi/
*******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// #include "../libs/soft_spi.h"
// #define DEBUG
typedef unsigned char byte;
int _getReg(byte ch){
char s[16];
int val;
FILE *pp;
char wipi[]="/usr/local/bin/gpio gbr 0";
if(ch) wipi[strlen(wipi)-1]='1';
pp = popen(wipi, "r");
if(pp==NULL) return -1;
fgets(s, 15, pp);
pclose(pp);
val=atoi(s);
if(val < 0 && val >= -32768) val += 65536;
if(val < 0 || val > 65535) return -1;
return val;
}
float getTemp(int ch){
int ret;
ret = _getReg((byte)ch);
if(ret<0) return -999.9;
#ifdef DEBUG
printf("Channel = %d\n",ch&1);
printf("b0 state = %d\n",ret&1);
printf("b1 devID = %d\n",(ret&2)>>1);
printf("b2 input = %d\n",(ret&4)>>2);
#endif
return (float)(ret>>3)/4.;
}
int main(int argc,char **argv){
int ch=0;
if( argc >= 2 ) ch=(byte)strtol(argv[1],NULL,16);
if( argc < 1 || argc > 2 ){
fprintf(stderr,"usage: %s <ch>\n",argv[0]);
return -1;
}
printf("%4.1f\n",getTemp(ch));
return 0;
}