在Raspberry中使用C语言

时间:2017-06-26 20:33:41

标签: c raspberry-pi counter

我试图在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 */
    }
}

我想添加一个计数器,但这仍然是一个糟糕的解决方案,因为如果我使用计数器,程序将停止直到计数器停止。

如何解决这些问题?

1 个答案:

答案 0 :(得分:0)

很抱歉,如果我误解了你的问题。

基本上你想同时做两件事(同时):

  1. 控制LED
  2. 通过scanf等待用户交互
  3. 我想说这里有两个选项,要么将你的UI(scanf)分成一个单独的线程,要么在非阻塞模式下使用stdio,这样你就不会使用scanf了。