2013-08-22 6 views
6

मेरा उद्देश्य एक पीसी और एक एंड्रॉइड डिवाइस के बीच एचसी-05 ब्लूटूथ मॉड्यूल का उपयोग कर संचार स्थापित करने के लिए Arduino का उपयोग करना है।Arduino: ब्लूटूथ मॉड्यूल के साथ सीरियल और सॉफ्टवेयर सीरियल का उपयोग

मैं पीसी और आर्डिनो (सीरियल मॉनिटर) और एचसी-05 से कनेक्ट करने के लिए एक सॉफ्टवेयर सर्जिकल के बीच यूएसबी संचार का उपयोग करता हूं।

मेरी समस्या यह है कि संचार बीटी से पीसी तक अच्छी तरह से काम करता है, लेकिन दूसरी तरफ अपेक्षित काम नहीं करता है। पीसी से बीटी में भेजते समय सभी पात्रों को बीटी डिवाइस द्वारा प्राप्त किया जाता है जब मैं पीसी पर सीरियल मॉनीटर बंद करता हूं या जब मैं Arduino को रीसेट करता हूं।

मैंने बीटी मॉड्यूल या एंड्रॉइड एप्लिकेशन के साथ एक समस्या को छोड़ दिया है क्योंकि अगर Arduino में मैं एक "ईसीएचओ" कोड (एंड्रॉइड में लिखना और एंड्रॉइड में भेजना) लागू करता हूं तो सब कुछ ठीक काम करता है।

अपेक्षित व्यवहार से नीचे पोस्ट किए गए Arduino कोड के साथ: Arduino रीसेट-> हैलो शब्द भेजा गया है, सीरियल मॉनीटर खोला-> कुछ भी नहीं होता है, सीरियल मॉनिटर पर लिखा चरित्र-> बीटी पर प्राप्त चरित्र, बीटी-> चरित्र पर लिखा चरित्र सीरियल मॉनिटर पर प्राप्त, सीरियल मॉनीटर बंद-> कुछ भी नहीं होता है।

असली व्यवहार है: Arduino रीसेट-> हैलो शब्द भेजा गया है, सीरियल मॉनीटर खोला गया है-> पीसी पर बीटी और 1 ("शुभरात्रि") पर हैलो शब्द, धारावाहिक मॉनीटर पर लिखा चरित्र-> कुछ नहीं, बीटी पर लिखा चरित्र -> सीरियल मॉनिटर पर प्राप्त चरित्र, सीरियल मॉनीटर बंद-> सीरियल मॉनिटर में पिछले लिखित चरित्र प्राप्त + हैलो वर्ड।

मैं इस समस्या को कैसे ठीक कर सकता हूं?

कोड:

#include <SoftwareSerial.h> 
SoftwareSerial mySerial(2, 3); // RX, TX 
int a=0; 
char c; 
char d; 
void setup() { 
    Serial.begin(9600); 
    Serial.println("Goodnight moon!"); 
    mySerial.begin(9600); 
    mySerial.println("Hello, world?"); 
} 
void loop() { 
    delay(10); 
    if (Serial.available()) { 
    c=Serial.read(); 
    delay(10); 
    Serial.write(c); 
    } 
    delay(10); 
    if (mySerial.available()) { 
    d=mySerial.read(); 
    delay(10); 
    mySerial.write(d); 

    } 
} 
+0

क्या आपने सॉफ़्टवेयर के लिए अलग-अलग पिन का उपयोग करने का प्रयास किया है? आप जिस बोर्ड का उपयोग कर रहे हैं उसके आधार पर सभी पिन समर्थित नहीं हैं: http://arduino.cc/en/Reference/SoftwareSerial – user2461391

+0

आपके सुझाव के लिए धन्यवाद, मैं एक Arduino Uno का उपयोग कर रहा हूं इसलिए कोई समस्या नहीं होनी चाहिए लेकिन मैंने कोशिश की वैसे भी, वही परिणाम। ध्यान दें कि केवल बीटी कार्यों के माध्यम से भेजना और प्राप्त करना, समस्या तब होती है जब बीटी के साथ यूएसबी सीरियल पोर्ट पक्ष का उपयोग किया जाता है। – user2706612

+0

क्या आपने अलग-अलग बाउड्रेट की कोशिश की है? क्या आप Arduino IDE में सही बंदरगाह का उपयोग कर रहे हैं? – ladislas

उत्तर

1

मैं Arduino ऊनो और पीसी और यह मेरा कोड था जो धारावाहिक संचार को लागू किया है, आशा है कि यह मदद कर सकते हैं:

int data; 
char character; 
int start_flag = 0; 

void setup() { 
    Serial.begin(921600); 
    pinMode(2, OUTPUT); 
} 
void loop() { 
    if(Serial.available() > 0){ 
    character = (char) Serial.read(); 
    if(character == 's') { 
     start_flag = 1; 
    } 
    if(character == 't') { 
     start_flag = 0; 
    } 
    } 
    if (start_flag == 1) { 
    Serial.print(data); //data that was acquired by internal ADC 
    } 
} 
+0

आपके उत्तर के लिए धन्यवाद, मुझे लगता है कि मेरी समस्या एचसी -05 ब्लूटूथ डिवाइस का उपयोग करके कम्यूनिकेशन से संबंधित है क्योंकि सीरियल कम्यूनिकेशन अकेले काम करता है। – user2706612

2

इस कोड को एक पर मेरे लिए काम कर रहा है एक एचसी-05 के साथ Arduino मिनी प्रो (यूएनओ के समान होना चाहिए)। मेरे पास एचसी-05 है जो मेरे लैपटॉप के साथ जोड़ा गया है। एचसी -05 और आर्डिनो सीरियल कंसोल से जुड़े COM पोर्ट पर हाइपरटर्मिनल का उपयोग करके, मैं संदेशों को द्विपक्षीय रूप से भेज सकता हूं। Serial.println कथन हाइपरटेरमिनल विंडो में दिखाई देता है जैसे उन्हें चाहिए।

#include <SoftwareSerial.h> 

#define rxPin 8 
#define txPin 7 

SoftwareSerial mySerial(rxPin, txPin); // RX, TX 
char myChar ; 

void setup() { 
    Serial.begin(9600); 
    Serial.println("Goodnight moon!"); 

    mySerial.begin(9600); 
    mySerial.println("Hello, world?"); 
} 

void loop(){ 
    while(mySerial.available()){ 
    myChar = mySerial.read(); 
    Serial.print(myChar); 
    } 

    while(Serial.available()){ 
    myChar = Serial.read(); 
    mySerial.print(myChar); 
    } 
} 
0

आप this को आजमा सकते हैं। Arduino ब्लूटूथ < -> सी # संचार का परीक्षण करते समय यह सबसे सरल कोड है जिसका आप उपयोग कर सकते हैं। नोट: कोड को पिन 1 (TX) < -> मॉड्यूल आरएक्स, पिन 2 (आरएक्स) < -> मॉड्यूल TX से कनेक्ट करके और मॉड्यूल को खिलाने से पहले पिन 1 (TX) 5V से 2,5V को विभाजित करके परीक्षण किया गया था।

उम्मीद है कि यह सब कोशिश कर रहे हैं!

0

इस धारावाहिक सेटअप का उपयोग करें।इस कोड के साथ मैं प्राप्त करते हैं और सीरियल मॉनिटर

void setup(){ 
    Serial.begin(9600); // Begin the serial monitor at 9600bps 
    bluetooth.begin(115200); // The Bluetooth Mate defaults to 115200bps 
    bluetooth.print("$"); // Print three times individually 
    bluetooth.print("$"); 
    bluetooth.print("$"); // Enter command mode 
    delay(100); // Short delay, wait for the Mate to send back CMD 
    bluetooth.println("U,9600,N"); // Temporarily Change the baudrate to 9600, no parity 
    // 115200 can be too fast at times for NewSoftSerial to relay the data reliably 
    bluetooth.begin(9600); // Start bluetooth serial at 9600 
    pinMode(led, OUTPUT); 
    pinMode(buttonPin1, INPUT); 
    pinMode(buttonPin2, INPUT); 
} 

अधिक जानकारी के लिए से ब्लूटूथ के लिए तिथि भेज सकते हैं, पर जाएँ http://www.circuitmagic.com/arduino/arduino-and-bluetooth-hc-06-to-control-the-led-with-android-device/

0

मैं परीक्षण के लिए इस एप्लिकेशन का उपयोग करने के लिए सलाह देते हैं:

https://play.google.com/store/apps/details?id=com.vagoscorp.virtualterminal

यह आपको बाइट्स को बाइट्स के रूप में देखने और भेजने देता है (0b00000000 से 0b11111111 (0 से 255 दशमलव में)) ताकि आप परीक्षण करने के लिए एक सरल इको फर्मवेयर बना सकें यदि यो उर baudrate सही है और काम कर के साथ,/बंद कुछ एल ई डी

इस एक गूंज कोड उदाहरण है को चालू करने के आदेशों भेजना शुरू:

char dato = 0; 

void setup() { 
Serial.begin(9600);//9600 is the default baudrate of the HC-05 (you can change it by AT commands, google it if you want) 
//pinMode(13, OUTPUT); //enable this pin if you want to use de LED idea 
//digitalWrite(13, HIGH); 
} 
////////////////////////////////////////////////////////////////////////// 
void serialEvent() { //if you have received serial data 
    while (Serial.available() > 0) { 
     char dato = (byte)Serial.read();//save the byte 
     Serial.write(dato);//send the just received byte (echo) 
    } 
} 
/////////////////////////////////////////////////////////////////////////// 
void loop() { 

} 

मुझे आशा है कि यह मदद करता है आप

0

एक ही समस्या थी , आपको बीटी मॉड्यूल को वायर्ड साइड और रेडियो पक्ष पर 2 अलग-अलग बॉड दरों के रूप में देखना होगा। रेडियो पक्ष जो भी आप पुटी के माध्यम से कनेक्ट करते हैं, उसके द्वारा सेट किया जाता है, वायर्ड साइड एटी कमांड के माध्यम से प्रोग्राम किया जाता है। एचसी -05 38400 पर डिफ़ॉल्ट।

संबंधित मुद्दे