c - Reading from an Arduino tty with FILE* -
जहाँ तक मैं देख सकता हूं, हालांकि, उसका मैंने इस दृष्टिकोण की कोशिश की है के साथ पढ़ने की कॉल विफल हो गई है: init code: कार्य लेखन और पढ़ना: रीडिंग कोड: कोई भी विचार क्यों पढ़ना असफल हो सकता है? धन्यवाद। मैंने इसे हल किया। कई समस्याएं थीं: / Dev / serial / by-id / * arduino * dev नोड यह लिंक है:
serialport_read_until संदिग्ध बदबू आ रही है
serialport_read_until (fd, buf, '\ n') वैसे ही
fgets (buf, bufsize, fptr) जैसा नहीं है? दूसरे शब्दों में, मुझे
FILE * fptr प्राप्त करने के लिए फ़ाइल डिस्क्रिप्टर पर
fdopen का उपयोग करने से रोकना है, और फिर
fgets /
का उपयोग करके Fscanf /
fgetc ?
fputc काम की तरह कॉलिंग कॉल, लेकिन
errno = 0 ।
devfd = open (dev, O_RDWR | O_NOCTTY | O_NDELAY); Int devfl = fcntl (devfd, F_GETFL); // सीरियल / टर्मिनल विकल्प टर्मॉइस टॉर्पेट्स; अगर (टीसीगेट्टर (डेवफड, और टाईपॉप्ट्स)) थ्रो; // कोई समानता नहीं; कोई प्रवाह नियंत्रण नहीं; एक स्टॉप बिट // 8 डेटा बिट चुनें / स्थानीय स्वामित्व; सक्षम wordopts.c_cflag = CS8 | क्लासिक | CREAD; // कोई विहित विशेषताएं; कच्चा मोड; No गूंज termopts.c_lflag = 0; // कोई इनपुट प्रोसेसिंग फीचर्स नहीं; कच्चे मोड termopts.c_iflag = 0; // कोई आउटपुट प्रोसेसिंग फीचर्स नहीं; कच्चा मोड termopts.c_oflag = 0; अगर (cfsetispeed (और शब्दशः, B115200)) / 115200 बॉड फेंक में; अगर (cfsetospeed (और शब्दशः, B115200)) / 115200 बॉड बाहर फेंक; // पढ़ें टाइमआउट शब्द टाइप करें- c_cc [VTIME] = 10; // 1s termopts.c_cc के बाद का समय समाप्त [VMIN] = 0; // प्रत्येक चरित्र की प्रतीक्षा करें अगर (टीसीसेटएटट्रेटर (डीफ़्फ़डी, टीसीएसएएनएओ, और टाईपॉप्ट्स)) फेंक; Devf = fdopen (devfd, "r +"); अगर (! Devf) फेंक;
शून्य dputc (char comm) {if (fputc (comm, devf) == EOF) फेंक; अगर (फ्ल्फ़ुस (डीएफएफ)) फेंक दिया; } शून्य dputs (const char * str) {if (fputs (str, devf) & lt; 0) थ्रो; अगर (फ्ल्फ़ुस (डीएफएफ)) फेंक दिया; } शून्य dprintf (const char * str ...) {va_list एपी; Va_start (एपी, एआरआर); Int n = vfprintf (devf, str, एपी); va_end (एपी); यदि (n & lt; 1) फेंक; अगर (फ्ल्फ़ुस (डीएफएफ)) फेंक दिया; }
अहस्ताक्षरित छोटा एफ; यदि (fscanf (devf, "% hu", & amp; एफ) & lt; 1) फेंक;
/ var / lock के लिए समूह गलत है यह
रूट पर सेट है जब यह
ताला होना चाहिए।
लॉक और
डायलआउट का हिस्सा था समूह।
/ dev / ttyACM * पीछे एक नया फ़ाइल संभाल देखता है, तो Arduino स्वतः रिबूट करता है इस Arduino Uno को काफी समय लगता है क्योंकि संभाल सुलभ (& gt; 1 एस) के लिए खुला है यह निश्चित है कि Arduino से एक बूट संदेश भेजकर और फ़ाइल संभाल खोलने के बाद लिनक्स क्लाइंट में इसके लिए प्रतीक्षा कर रहे हैं।
FILE * फ़ंक्शंस काम हालांकि, यह पढ़ने के साथ खुश नहीं है और उसी संभाल पर लिखता है; यह चाहता है screws ऊपर मुझे दो अलग-अलग वर्णलेखकों और दो अलग-अलग
FILE * s। था
O_NONBLOCK को अक्षम करना पड़ा। < P> Arduino ड्राइवर प्रोग्रामर को चेतावनी दी गई है!
Comments
Post a Comment