我试图在Raspberry Pi中创建一个程序。这个程序是用C语言编写的。在项目中,我有两个LED。第一个用于" EV1"第二个是排场" P1"。当我在控制台中单击char" S"时,项目以EV1开始。当我在控制台中点击" g"时,EV1停止并且pomp启动60秒。如果在60年代你把控制台放在" C" char,盛况仍然在60年代后不停地运作;否则,如果你没有在控制台中放置任何字符或与C"不同的东西,那么盛大不会继续工作并在60秒后停止。
问题是,如果我在代码中放入print()
和scanf()
参数,控制台仍然等待用户输入一个字符,以便在我放入一个字符后放入pomp我的情况我需要大量工作,以便同时我可以放入一个字符。
所以这是我的代码:
#include <stdio.h>
#include <bcm2835.h>
#include <string.h>
#define FAN 16
#define P1 17
#define P2 27
#define GPP 22
#define GPN 20
#define EV1 21
#define EV2 13
#define LAN 19
void LampOn(int a)
{
bcm2835_gpio_set(a);
}
void LampDel(int a,int b)
{
unsigned int del=1000;
bcm2835_gpio_set(a);
bcm2835_delay(del * b);
bcm2835_gpio_clr(a);
}
void LampOff(int a)
{
bcm2835_gpio_clr(a);
}
void OUTPUT(int c)
{
bcm2835_gpio_fsel(c, BCM2835_GPIO_FSEL_OUTP);
}
char Taper()
{
char v;
printf("put a char: ");
scanf("%c",&v);
return v;
}
int main(int argc, char **argv)
{
if(!bcm2835_init())
return 1;
OUTPUT(17);
OUTPUT(27);
OUTPUT(22);
OUTPUT(13);
OUTPUT(19);
OUTPUT(20);
OUTPUT(21);
OUTPUT(16);
LampOff(EV1);
do
{
Taper();
}while(Taper()!='s');
while(1)
{
LampOn(EV1);
Taper();
if(Taper()=='g')
{
LampOff(EV1);
LampDel(P1,60);
}
}
while(1)
{
/* Infinite loop */
}
}
我想添加一个计数器,但这仍然是一个糟糕的解决方案,因为如果我使用计数器,程序将停止直到计数器停止。
如何解决这些问题?
答案 0 :(得分:0)
很抱歉,如果我误解了你的问题。
基本上你想同时做两件事(同时):
我想说这里有两个选项,要么将你的UI(scanf)分成一个单独的线程,要么在非阻塞模式下使用stdio,这样你就不会使用scanf了。