首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >传感器的C代码只打印输出一次,然后退出

传感器的C代码只打印输出一次,然后退出
EN

Stack Overflow用户
提问于 2020-06-30 21:40:08
回答 1查看 62关注 0票数 1

我是一个C新手,我有这个代码,它应该是用红外线传感器测量树莓派的体温。代码运行良好,但不能在循环模式下运行,它只打印一次温度,然后退出。而我想让它持续运行,直到用户按下某个中断键/被用户杀死。

代码语言:javascript
运行
复制
//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 (&reg, 1);
        bcm2835_i2c_read_register_rs(&reg,&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 (&reg, 1);
        bcm2835_i2c_read_register_rs(&reg,&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;
}

编译

代码语言:javascript
运行
复制
gcc mlx90614.c -o mlx90614 -l bcm2835
sudo ./mlx90614

输出

代码语言:javascript
运行
复制
device is working!!
ambient temperature = 30.06
object temperature=31.04
done
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-30 21:46:12

你需要一个无限循环。例如:

代码语言:javascript
运行
复制
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");
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62658799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档