2016-11-21 6 views
0

私のprjectでサムホイールを使用しています。私は受信機がそれで何かをすることができるようにシリアルにデータを一度送る必要があります。しかし、私が作ったコードはシリアルに連続してデータを送っています。誰かが私に啓発してもらえますか? AVR btwを使用しています。Thumbwheelデータをシリアルに一度だけ送信します

は、ここではそれが変化したときに毎回fii送信する場合それは十分なものでなければならない私のcode`

uint8_t fii = 0; 
uint8_t previousfii = 0; 


int main(void) 
{ 
    setUp32MhzInternalOsc(); 
    setUpSerial(); 

    stdout = &usart_output; 
    stdin = &usart_input; 


    //thumbwheel 2B 
    PORTF.DIRCLR  = PIN1_bm; 
    PORTF.PIN1CTRL = PORT_OPC_PULLUP_gc; 

    PORTF.DIRCLR  = PIN2_bm; 
    PORTF.PIN2CTRL = PORT_OPC_PULLUP_gc; 

    PORTF.DIRCLR  = PIN3_bm; 
    PORTF.PIN3CTRL = PORT_OPC_PULLUP_gc; 


while(1) 
{ 


    //thumbwheel 2B 
    if (!(PORTF.IN&PIN3_bm)) 
    { 
     if (fii != 1) 
     { 
      fii = fii+1; 
     } 
    } 

    if (!(PORTF.IN&PIN1_bm)) 
    { 
     if (fii != 2) 
     { 
      fii = fii+2; 
     } 
    } 

    if (!(PORTF.IN&PIN2_bm)) 
    { 
     if (fii != 4) 
     { 
      fii = fii+4; 
     } 
    } 


    printf("%d\n", fii); 
    fii = 0; 
    //_delay_ms(500); 

} 


      } 
+0

「1回だけ」はおそらくあなたが望むものではありません。ピンの1つが変わったときにデータを送信したいのですか? –

+0

はい..それは私の男の先生 –

+0

私を助けることができますか? –

答えて

1

です。したがって、次のようなものを使用してください:

int main(void) { 
    uint8_t fii = 0; 
    uint8_t previousFii = 0; 

    // < other init code here > 

    while(1) { 
     // < your other code here > 

     if (fii != previousFii) { 
      previousFii = fii; 
      printf("%d\n", fii); 
     } 
    } 
} 
+0

どのようなinitコードが必要ですか? –

+0

私の答えに関連するものはありません。あなたは完全なコードを表示していないので、PORTの方向の初期化や他のものをどこかに持っていると仮定しました。 –

+0

が編集されました。私のコードをもう一度チェックしてください。 –

関連する問題