私はArduinoMega2560プロジェクトに取り組んでいます。Windows 7 PCでは、Arduino1.0IDEを使用しています。ボーレート115200のシリアルBluetooth通信を確立する必要があります。RXでデータが利用可能になったときに割り込みを受信する必要があります。私が見たすべてのコードは、Arduinoのループ内にSerial.availableの条件を配置する「ポーリング」を使用しています。割り込みとそのサービスルーチンのArduinoのループでこのアプローチをどのように置き換えることができますか?attachInterrupt()はこの目的を提供していないようです。Arduinoをスリープモードから復帰させるために割り込みに依存しています。
ピン13に接続されたLEDをオンにすることになっているこの単純なコードを開発しました。
#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
}
問題は、サブルーチンが提供されないことです。