2017-06-26 9 views
0

私はRaspberry Piでプログラムを作成しようとしています。このプログラムはC言語で書かれています。このプロジェクトでは、2つのLEDがあります。第1は「EV1」、第2はポップ「P1」です。私がコンソールでchar "S"をクリックすると、プロジェクトはEV1で始まります。コンソール "g"をクリックすると、EV1停止とポップが60秒間始まります。 60年代にコンソールに "C"チャーを入れても、60年代後にはポップはまだ止まらずに動きます。そうでなければ、コンソールに何か文字を入れないか、 "C"と違うものを置いてしまえば、60年代後にはポップは動作を続行せず停止します。ラズベリーのCでクロックを使用する

print()scanf()の引数をコンソールに入れても、ユーザーがcharを入力するのを待っているので、charを置いた後に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

私は正直言ってあなたが何を言っているのか分かりません...いくつかの説明を加えてください。 – ForceBru

+0

ようこそ。これは質問と回答のサイトですので、あなたの質問は何ですか? –

+0

「盛り上がり」とは何ですか?英語では、それは形容詞です(Elgarの「Pomp and Occumstance March」、f'rinstance)。これは名詞として使用している場所では適用されません。あなたの言語から英語への翻訳を確認してください。 –

答えて

0

ご迷惑をおかけして申し訳ございません。

は、基本的には、(同時に)、同時に2つのことをしたい:scanf関数を介してユーザとの対話のための

  • 待ちを

    1. コントロールのLED
    私は2つのオプションはどちらか、ここにあると言うだろう

    あなたのUI(scanf)を別のスレッドに分けたり、非ブロッキングモードでstdioを使うようにするには、scanfの代わりに読み込みを行います。

  • +0

    こんにちはtgregory感謝の返答しかし、 -ブロックモード ? – Sekmani52

    +0

    @ Sekmani52この[質問](https://stackoverflow.com/questions/717572/how-do-you-do-non-blocking-console-io-on-linux-in-c)をご覧ください回答、O_NONBLOCKを使っている人は、標準モードを非ブロッキングモードに切り替えます。これをブロッキングモードにすることを期待している他のコードが壊れる可能性があることに注意してください。 – tgregory

    関連する問題