2016-11-21 57 views
0

即時通訊工具使用指輪。我只需要將數據發送到串口一次,這樣接收者就可以對其進行處理。然而,我做的代碼不斷地向串口發送數據,請有人啓發我嗎?並且,即時通訊使用AVR btw。將指輪數據發送到串口只需一次

這裏是我的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

「只是一次」可能也不是你想要的。也許你想在其中一個引腳改變時發送數據? –

+0

是的..這就是我的男人先生 –

+0

你能幫助我嗎? –

回答

1

它應該是足夠的,如果你每次都送fii當它改變。所以使用這樣的東西:

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

,再次檢查我的代碼 –