【发布时间】:2017-06-26 20:33:40
【问题描述】:
我正在尝试在 Raspberry Pi 中创建一个程序。这个程序是C语言的。在项目中,我有两个 LED。第一个用于“EV1”,第二个用于排场“P1”。当我在控制台中单击字符“S”时,项目以 EV1 开始。当我在控制台“g”中单击时,EV1 停止并且盛况开始 60 秒。如果在 60 年代您将“C”字符放入控制台,那么排场在 60 年代后仍然可以正常工作;否则,如果您没有在控制台中放置任何字符或与“C”不同的内容,则排场将不会继续工作并在 60 秒后停止。
问题是如果我在我的代码中输入print() 和scanf() 参数,控制台仍然等待用户输入一个字符,所以在我输入一个字符后排场工作,在我的情况下我需要排场工作使得我可以同时放入一个字符。
这是我的代码:
#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 */
}
}
我想添加一个计数器,但这仍然是一个不好的解决方案,因为如果我使用计数器,程序会停止,直到计数器停止。
我该如何解决这些问题?
【问题讨论】:
-
我真的不知道你在说什么......请添加一些说明。
-
欢迎来到 SO。这是一个问答网站,那么您的问题是什么?
-
什么是“盛况”?在英语中,它是一个形容词(Elgar 的“Pomp and Circumstance March”,f'rinstance),在这里你将它用作名词时并不适用。请检查从您的语言到英语的翻译。
-
几乎可以肯定,行缓冲输入存在某种问题。我不知道你是如何在 Raspberry Pi 上解决这个问题的。但很可能有一种方法可以做到这一点,即记录在案且随时可用。
-
伙计们谢谢,我很抱歉我的英语不好我会尝试用其他感觉问我的问题,所以在我的程序 1/我需要一个时钟或计时器与其他功能同时工作,在我的情况下,如果我在控制台中放入“C”字符,则使用“printf”语句,程序仍在工作,否则停止工作,所以我的问题是如何放置这个时钟或计数器或计时器? 2/我需要同时运行 2 个或多个动作,那么我该怎么做?最后我的程序没有任何问题,但他没有按照我喜欢的方式工作,所以我该如何解决它如何放置时钟或同时运行多个功能
标签: c raspberry-pi counter