gpt4 book ai didi

c++ - 函数调用不会多次工作,Raspbian 上的 C/C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:32 24 4
gpt4 key购买 nike

我在用 Raspbian 为 Raspberry Pi 编写的这个 C/C++ 程序中遇到问题。这是下载 cpp 文件的链接 UltraSonicTest.cpp :

#include <wiringPi.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int trigger = 4; //GPIO pin 23
int echo = 5; //GPIO pin 24

double readValue();
void continuousRead();

int main(){

printf("Raspberry Pi Sonar Test\n");

if (wiringPiSetup() == -1)
return 1;

printf("WiringPi Setup Successful\n");

pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);

digitalWrite(trigger, 0); //GPIO pin 23 in the off position

for (int i=0; i<10; i++){
printf("Calling ContinuousRead\n");
continuousRead();
}

return 0;
}

double readValue(){
printf("Entering ReadValue...");
double start=0, end=0, elapsed=0, distance=0;
struct timespec gettime_now;
// Send 10us pulse to trigger
digitalWrite(trigger, 1);
delayMicroseconds(0.00001);
digitalWrite(trigger, 0);
clock_gettime(CLOCK_REALTIME, &gettime_now);
start = gettime_now.tv_nsec;

while (digitalRead(echo)==0){
clock_gettime(CLOCK_REALTIME, &gettime_now);
start = gettime_now.tv_nsec;
}

while (digitalRead(echo)==1){
clock_gettime(CLOCK_REALTIME, &gettime_now);
end = gettime_now.tv_nsec;
}

elapsed = (end-start);

//printf("Start: %lf\n", start);
//printf("Stop: %lf\n", end);
//printf("Time in milliseconds: %lf\n", elapsed/1000000);
//printf("Elapsed: %lf seconds\n", elapsed = elapsed/1000000000);
elapsed = elapsed/1000000000;
//printf("%lf seconds * 34029 cm = %lf cm/s\n", elapsed, distance = elapsed*34029);
distance = elapsed*34029;
//printf("Distance = %lf cm\n",distance = distance/2);
distance = distance/2;
//printf("%lf cm = %lf inches\n",distance, distance/2.54);

printf("Leaving ReadValue\n");
return distance;
}

void continuousRead(){
printf("..Starting ContinuousRead..");
delay(1000);
printf("Calling ReadValue\n");
double distance= readValue();
printf("Distance: %lf cm \n", distance);
}

我在 for 循环中多次调用函数调用,但调用只进行了 1-3 次。

sudo ./a.out  
Raspberry Pi Sonar Test
WiringPi Setup Successful
Calling ContinuousRead
..Starting ContinuousRead..Calling ReadValue
Entering ReadValue...Leaving ReadValue
Distance: 2.194802 cm
Calling ContinuousRead
..Starting ContinuousRead..Calling ReadValue

知道我做错了什么吗?

最佳答案

来自nonsensickle的评论!
delayMicroseconds(0.00001);
似乎降低了性能和其他副作用。更改为 delay(1);
现在速度是可以接受的。现在它经历了整个循环。

关于c++ - 函数调用不会多次工作,Raspbian 上的 C/C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20831428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com