पुनरारंभ करने के बाद केवल पहले संदेश पर विफल रहता है मेरे पास एक Arduino डिवाइस और पीसी है।Arduino के साथ सीरियल संचार
gpsdata data;
char needtosend;
void setup() {
Serial.begin(9600);
Serial.flush();
data.id = 0;
data.src= 500;
data.lat= 1;
data.lon= 2;
data.alt= 3;
strcpy(data.date, "test date format");
}
void loop() {
if(Serial.available() > 0)
{
needtosend = Serial.read();
if (needtosend == '2')
{
data.id = ++data.id % 10;
}
byte* buff = (byte*)&data;
Serial.write(buff, sizeof(data));
}
delay (200);
}
पीसी आवेदन सी में लिखा है ++ और Arduino डिवाइस के साथ संवाद करने के लिए बढ़ावा लाइब्रेरी का उपयोग करता: मैं बोर्ड पर निम्नलिखित कोड की कोशिश की। यह पीसी कोड है:
Serial serial("/dev/ttyUSB0",9600);
gpsdata *data;
char *values = new char[sizeof(gpsdata)];
while(true)
{
try {
serial.writeString("2",1);
serial.read(values,sizeof(gpsdata));
data = (gpsdata *)values;
cout<<data->id<<endl;
}
catch(boost::system::system_error& e)
{
cout<<"Error: "<<e.what()<<endl;
}
catch(timeout_exception& e)
{
cout<<"Error: "<<e.what()<<endl;
}
}
delete[] values;
Serial::Serial(std::string port, unsigned int baud_rate): io(), serial(io,port)
{
serial.set_option(boost::asio::serial_port_base::baud_rate(baud_rate));
}
void Serial::read(char *data, size_t size)
{
boost::asio::read(serial,boost::asio::buffer(data,size));
}
void Serial::writeString(const char* s, int length)
{
boost::asio::write(serial,boost::asio::buffer(s,length))<<std::endl;
}
जब मैं उपकरण को चालू और उसके बाद पहली बार के लिए पीसी आवेदन शुरू, यह स्ट्रिंग "2" डिवाइस तो पढ़ने के लिए (भेजता है) ब्लॉक और कभी नहीं से डेटा प्राप्त Arduino। अगर मैं एप्लिकेशन को मारता हूं और फिर से शुरू करने के बिना इसे फिर से शुरू करता हूं, तो सबकुछ ठीक काम करने लगता है। मैंने एसिंक पढ़ने के साथ प्रयास किया और परिणाम वही था, पहले संदेश पर पढ़ने के समय और फिर सब कुछ ठीक काम करना शुरू कर दिया। पीसी एप्लिकेशन में प्राप्त किया गया दूसरा संदेश आईडी 1 के साथ है जिसका अर्थ है कि Arduino को पहला संदेश नहीं मिला है। कोई विचार मेरी गलती कहां है?
लूप() में कोड का कोई मतलब नहीं है। पढ़ने के बाद(), उपलब्ध() होने के बाद 0 होगा। जब तक पीसी एक और बाइट भेजता है। –
क्षमा करें। पेस्ट त्रुटि कॉपी करें। वास्तविक कोड उपलब्ध होने के बाद पढ़ना है। मैंने पिछली पोस्ट अपडेट की। तो कोई विचार क्यों यह काम नहीं कर रहा है? –
हम्म, कोड जो ** बिल्कुल ** समस्या बताता है शायद ही कभी एक कॉपी/पेस्ट गलती है। –