传感器的 C 代码仅打印输出一次并退出
C code for sensor prints output only once and exits
我是 C 菜鸟,我有这段代码,应该使用 raspberry pi 上的红外传感器测量体温。
代码工作正常,但它不能在循环模式下工作,只打印一次温度然后退出。
虽然我希望它连续 运行 直到用户按下一些中断 key/killed 由用户。
//gcc mlx90614.c -o mlx90614 -l bcm2835
#include <stdio.h>
#include <bcm2835.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <time.h>
#define AVG 1 //averaging samples
int main(int argc, char **argv)
{
unsigned char buf[6];
unsigned char i,reg;
double temp=0,calc=0, skytemp,atemp;
bcm2835_init();
bcm2835_i2c_begin();
bcm2835_i2c_set_baudrate(25000);
// set address
bcm2835_i2c_setSlaveAddress(0x5a);
printf("\ndevice is working!!\n");
calc=0;
reg=7;
for(i=0;i<AVG;i++)
{
bcm2835_i2c_begin();
bcm2835_i2c_write (®, 1);
bcm2835_i2c_read_register_rs(®,&buf[0],3);
temp = (double) (((buf[1]) << 8) + buf[0]);
temp = (temp * 0.02)-0.01;
temp = temp - 273.15;
calc+=temp;
sleep(1);
}
skytemp=calc/AVG;
calc=0;
reg=6;
for(i=0;i<AVG;i++){
bcm2835_i2c_begin();
bcm2835_i2c_write (®, 1);
bcm2835_i2c_read_register_rs(®,&buf[0],3);
temp = (double) (((buf[1]) << 8) + buf[0]);
temp = (temp * 0.02)-0.01;
temp = temp - 273.15;
calc+=temp;
sleep(1);
}
atemp=calc/AVG;
printf("ambient temperature = %04.2f\n", atemp);
printf("object temperature = %04.2f\n", skytemp);
printf("done\n");
return 0;
}
编译
gcc mlx90614.c -o mlx90614 -l bcm2835
sudo ./mlx90614
输出
device is working!!
ambient temperature = 30.06
object temperature=31.04
done
你需要一个无限循环。例如:
printf("\ndevice is working!!\n");
while(1)
{
calc=0;
reg=7;
...
printf("ambient temperature = %04.2f\n", atemp);
printf("object temperature = %04.2f\n", skytemp);
}
printf("done\n");
我是 C 菜鸟,我有这段代码,应该使用 raspberry pi 上的红外传感器测量体温。 代码工作正常,但它不能在循环模式下工作,只打印一次温度然后退出。 虽然我希望它连续 运行 直到用户按下一些中断 key/killed 由用户。
//gcc mlx90614.c -o mlx90614 -l bcm2835
#include <stdio.h>
#include <bcm2835.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <time.h>
#define AVG 1 //averaging samples
int main(int argc, char **argv)
{
unsigned char buf[6];
unsigned char i,reg;
double temp=0,calc=0, skytemp,atemp;
bcm2835_init();
bcm2835_i2c_begin();
bcm2835_i2c_set_baudrate(25000);
// set address
bcm2835_i2c_setSlaveAddress(0x5a);
printf("\ndevice is working!!\n");
calc=0;
reg=7;
for(i=0;i<AVG;i++)
{
bcm2835_i2c_begin();
bcm2835_i2c_write (®, 1);
bcm2835_i2c_read_register_rs(®,&buf[0],3);
temp = (double) (((buf[1]) << 8) + buf[0]);
temp = (temp * 0.02)-0.01;
temp = temp - 273.15;
calc+=temp;
sleep(1);
}
skytemp=calc/AVG;
calc=0;
reg=6;
for(i=0;i<AVG;i++){
bcm2835_i2c_begin();
bcm2835_i2c_write (®, 1);
bcm2835_i2c_read_register_rs(®,&buf[0],3);
temp = (double) (((buf[1]) << 8) + buf[0]);
temp = (temp * 0.02)-0.01;
temp = temp - 273.15;
calc+=temp;
sleep(1);
}
atemp=calc/AVG;
printf("ambient temperature = %04.2f\n", atemp);
printf("object temperature = %04.2f\n", skytemp);
printf("done\n");
return 0;
}
编译
gcc mlx90614.c -o mlx90614 -l bcm2835
sudo ./mlx90614
输出
device is working!!
ambient temperature = 30.06
object temperature=31.04
done
你需要一个无限循环。例如:
printf("\ndevice is working!!\n");
while(1)
{
calc=0;
reg=7;
...
printf("ambient temperature = %04.2f\n", atemp);
printf("object temperature = %04.2f\n", skytemp);
}
printf("done\n");