-1

我正在为我的 Raspberry Pi 编写一个用 C 语言编写的程序,根据它是否连接到 Internet 来打开和关闭一些灯。

我完成并按我想要的方式工作的代码是这样的:

int doPing() {
  int stat = system("ping -c 1 google.com");
  return stat;
}

int main() {
  int status;
  int prev_status, isdif;

  status = doPing();
  if(status==0)
    system("sudo /home/pi/goingWellBlink &");
  else
    system("sudo /home/pi/errorBlink &");

  prev_status = status;

  for(;;) {
    status=doPing();

    if(status!=prev_status)
      isdif=1;
    else
      isdif=0;

    if(isdif && status==0) {
      system("sudo pkill errorBlink &");
      system("sudo /home/pi/goingWellBlink &");
    }
    if(isdif && status!=0) {
      system("sudo pkill goingWellBlink &");
      system("sudo /home/pi/errorBlink &");
    }

    prev_status=status;
    sleep(10);
  }

  return 0;
}

我已经编译的程序在哪里errorBlink和是在无限循环中运行的程序,每个程序执行一些不同的光序列。goingWellBlink

基本上,主程序开始询问 ping 的返回状态,并基于此启动其中一个灯序列。除非检测到 ping 的返回状态发生变化,否则该灯序列不会改变。

出于可移植性的目的,而不是依赖于两个文件确实存在,我想插入代码中,errorBlinkgoingWellBlink作为 void 函数并执行相同的代码,但使用线程。而不是启动一个外部程序,用光序列启动一个线程,我怎么能做到这一点?

4

1 回答 1

0

这必须在c中吗?因为看起来任务可以更容易地执行。例如,您可以使用每分钟运行一次的 bash 脚本来检查互联网的状态,然后使用 python 脚本与 gpio 引脚交互以打开 LED。

于 2015-05-05T01:41:50.990 回答