5

私はArduino Mega 2560プロジェクトに取り組んでいます。 Windows 7 PCでは、Arduino1.0 IDEを使用しています。私は115200のボーレートでシリアルブルートゥース通信を確立する必要があります。私は、RXでデータが利用できるときに割り込みを受け取る必要があります。私が見たすべてのコードはArduinoのループの中でSerial.availableの条件を設定している "ポーリング"を使用しています。どのようにして、割り込みとそのサービスルーチンのArduinoのループでこのアプローチを置き換えることができますか? attachInterrupt()はこの目的のために用意されていないようです。私はスリープモードからArduinoを目を覚ますために割り込みに依存します。Arduinoシリアル割り込み

私はこの問題は、サブルーチンが提供されないことであるピンに接続されたLED 13

#include <avr/interrupt.h> 
    #include <avr/io.h> 
    void setup() 
    { 
     pinMode(13, OUTPUT);  //Set pin 13 as output 

     UBRR0H = 0;//(BAUD_PRESCALE >> 8); // Load upper 8-bits of the baud rate value into the high byte of the UBRR register 
     UBRR0L = 8; // Load lower 8-bits of the baud rate value into the low byte of the UBRR register 
     UCSR0C |= (1 << UCSZ00) | (1 << UCSZ10); // Use 8-bit character sizes 
     UCSR0B |= (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0); // Turn on the transmission, reception, and Receive interrupt  
    } 

    void loop() 
    { 
     //Do nothing 
    } 

    ISR(USART0_RXC_vect) 
    {  
     digitalWrite(13, HIGH); // Turn the LED on   
    } 

をオンにすることになっているこの単純なコードを開発しました。

+0

あなたの質問はブルートゥースと何が関係していますか?普通のUARTと割り込みの使い方を聞いているようですね。 – TJD

答えて

6

最後に私の問題が見つかりました。割り込みベクトル "USART0_RXC_vect"をUSART0_RX_vectで変更しました。また、グローバル割り込みを有効にするためにinterrupts();を追加しました。非常にうまく動作しています。

コードは次のとおりです。返信用

#include <avr/interrupt.h> 
#include <avr/io.h> 
void setup() 
{ 
    pinMode(13, OUTPUT); 

    UBRR0H = 0; // Load upper 8-bits of the baud rate value into the high byte of the UBRR register 
    UBRR0L = 8; // Load lower 8-bits of the baud rate value into the low byte of the UBRR register 
    UCSR0C |= (1 << UCSZ00) | (1 << UCSZ10); // Use 8-bit character sizes 
    UCSR0B |= (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0); // Turn on the transmission, reception, and Receive interrupt  
    interrupts(); 
} 

void loop() 
{ 

} 

ISR(USART0_RX_vect) 
{ 
    digitalWrite(13, HIGH); // set the LED on 
    delay(1000);    // wait for a second 
} 

感謝!!!!

1

あなたはそのコードを試しましたが、うまくいきませんでしたか?問題はあなたが割り込みをオンにしていないことだと思います。 setup機能でsei();またはinterrupts();と呼ぶことができます。

関連する問題