Работя върху проект Arduino Mega 2560. На компютър с Windows 7 използвам Arduino1.0 IDE. Трябва да установя серийна Bluetooth комуникация със скорост на предаване 115200. Трябва да получа прекъсване, когато има налични данни при RX. Всяка част от кода, която съм виждал, използва „polling“, което поставя условие на Serial.available в цикъла на Arduino. Как мога да заменя този подход в цикъла на Arduino за прекъсване и неговата сервизна рутина? Изглежда, че attachInterrupt() не осигурява тази цел. Разчитам на прекъсване, за да събудя Arduino от режим на заспиване.
Разработих този прост код, който трябва да включи светодиод, свързан към пин 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
}
Проблемът е, че подпрограмата никога не се обслужва.