5

मैं एक Arduino मेगा 2560 परियोजना पर काम कर रहा हूँ। विंडोज 7 पीसी में मैं Arduino1.0 आईडीई का उपयोग कर रहा हूं। मुझे 115200 की बॉड दर के साथ एक सीरियल ब्लूटूथ संचार स्थापित करने की आवश्यकता है। आरएक्स पर डेटा उपलब्ध होने पर मुझे एक बाधा प्राप्त करने की आवश्यकता है। कोड के प्रत्येक टुकड़े मैंने "मतदान" का उपयोग किया है, जो सीरियल की स्थिति रख रहा है। Arduino के लूप के अंदर उपलब्ध है। एक इंटरप्ट और इसकी सेवा रूटीन के लिए मैं Arduino के लूप पर इस दृष्टिकोण को कैसे बदल सकता हूं? ऐसा लगता है कि संलग्न इंटरप्ट() इस उद्देश्य के लिए प्रदान नहीं करता है। मैं नींद मोड से Arduino जागने के लिए एक इंटरप्ट पर निर्भर करता हूं।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   
    } 

समस्या यह है कि सबरूटीन सेवा की कभी नहीं किया गया है से जुड़ा एक एलईडी चालू करने के लिए माना जाता है विकसित किया है।

+0

ब्लूटूथ के साथ आपके प्रश्न को क्या करना है? ऐसा लगता है कि आप केवल पूछ रहे हैं कि नियमित यूएआरटी को इंटरप्ट के साथ कैसे उपयोग करें? – TJD

उत्तर

6

अंततः मुझे मेरी समस्या मिली है। मैंने USART0_RX_vect द्वारा बाधा वेक्टर "USART0_RXC_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(); पर कॉल करने का प्रयास कर सकते हैं।