एक बार फिर 433 मेगाहर्ट्ज ट्रांसमीटर और रिसीवर के बारे में

433 मेगाहर्ट्ज आईएसएम रिसीवर और ट्रांसमीटर के सबसे सरल सेट ने इलेक्ट्रॉनिक्स प्रेमियों के बीच अच्छी-खासी लोकप्रियता अर्जित की है। किट सस्ते हैं (चिप-डीप में भी आप उन्हें 300 रूबल के लिए खरीद सकते हैं, और अली पर, वे कहते हैं, आम तौर पर एक पचास डॉलर के लिए), वे सरल और विश्वसनीय हैं। इसके अलावा (जिसे आप शायद संदेह नहीं करते हैं), यह वायरलेस डेटा विनिमय की सबसे लंबी दूरी और मर्मज्ञ विधि है - 433 मेगाहर्ट्ज की आवृत्ति पर एक संकेत बाधाओं से बहुत बेहतर गुजरता है और लोकप्रिय 2.4 गीगा बैंड (433) की तुलना में दूर की दूरी पर संचालित होता है आधा मीटर कंक्रीट की दीवार से मेगाहर्ट्ज पूरी तरह से विलंबित है , और वाई-फाई पहले से ही 10 सेंटीमीटर से मर रहा है)। मैं मानता हूँ कि हाल ही में MBee-868 मॉड्यूल दिखाई दिएएक उपयुक्त (दिशात्मक) एंटीना से लैस होने के कारण, वे आगे "शूट" करते हैं, लेकिन वे कम से कम परिमाण का एक ऑर्डर हैं जो अधिक महंगा, कनेक्ट करने में अधिक कठिन, ऊर्जा-बचत प्रबंधन और पूर्व-कॉन्फ़िगरेशन की आवश्यकता होती है। और इसके अलावा, 868 मेगाहर्ट्ज की आवृत्ति दो बार खराब बाधाओं से गुजरती है (हालांकि, निश्चित रूप से, यह 2.4 गीगाहर्ट्ज की आवृत्ति से बेहतर है)।



433 मेगाहर्ट्ज ट्रांसमीटर और रिसीवर ( हब पर सहित ) के बारे में बहुत कुछ लिखा गया है हालांकि, ऐसा लगता है कि किसी को नहीं पता कि इस किट को किसी अजीब कारण से सर्किट में सही तरीके से कैसे शामिल किया जाए। जब मैंने एक बार फिर यहां पढ़ा कि किट “ दृष्टि की रेखा के भीतर 8 मीटर की दूरी पर है, तो 9 वें मीटर में महारत हासिल नहीं की जा सकती है“, मेरा धैर्य टूट गया। क्या अन्य 8 मीटर?! 40-50 पर मुझे विश्वास होता, हालाँकि वास्तविकता में, शायद, रेंज और भी बड़ी है।

यह ध्यान देने योग्य है कि मैं आगे मनमाना डेटा स्थानांतरित करने के लिए एक लाइन बनाने की समस्या को हल करता हूं, और न केवल किसी स्मार्ट सॉकेट या मोटर मॉडल नौकाओं को नियंत्रित करना। मेरा कार्य अधिक जटिल है, लेकिन फिर भी विश्वसनीय संचालन की दूरी बहुत अधिक है। इसके अलावा, इस तरह के कार्य में यह न केवल महत्वपूर्ण है और दृष्टि की रेखा के भीतर इतनी दूरी नहीं है (यह केवल तुलना के लिए सेवा कर सकता है), लेकिन विभिन्न बाधाओं को भेदने की क्षमता।

मेरी किट शहर से बाहर लगभग 25-30 मीटर की दूरी पर एक तीव्र कोण से लॉग वॉल पर काम करती है, ताकि दीवारों और विभाजन के लगभग एक मीटर (कुल), आंशिक रूप से पन्नी इन्सुलेशन द्वारा परिरक्षित, सिग्नल पथ में हो। बहुत कम दूरी पर, लगभग सीधे दीवार के पीछे, वाईफाई पहले से ही पूरी तरह से सिग्नल खो रहा है। शहर में, सिग्नल तीन आंतरिक शहर के अपार्टमेंट के एक छोर से दूसरे तक दो आंतरिक विभाजनों के माध्यम से, साथ ही बालकनी से खत्म होता है, जहां ट्रांसमीटर और रिसीवर के बीच एक सीधी रेखा में कम से कम 80 सेंटीमीटर के ईंटवर्क और एक प्लास्टर विभाजन होता है। मैंने उपरोक्त समीक्षा में उल्लिखित किसी भी अधिक महंगे किट विकल्प का उपयोग नहीं किया।

किट का एक अतिरिक्त लाभ यह है कि ठहराव में ट्रांसमीटर किसी भी चीज का उपभोग नहीं करता है, और बिना किसी विशेष नींद मोड के, बस इसके उपकरण के सिद्धांत से (आराम की खपत वर्तमान में एक बंद ट्रांजिस्टर के कलेक्टर रिसाव धाराओं के बराबर है, अर्थात लगभग 100 एनए)।

आइए देखें कि क्या नुकसान हैं।

ट्रांसमीटर कनेक्शन


ट्रांसमीटर (इसे एफएस 1000 ए कहा जाता है), जैसा कि हम नीचे इसके आरेख से देखते हैं, 433 मेगाहर्ट्ज एसएडब्ल्यू गुंजयमान यंत्र पर आधारित सबसे सरल जनरेटर है। जनरेटर को ट्रांजिस्टर Q1 पर इकट्ठा किया जाता है, और ट्रांजिस्टर Q2, जिसके आधार पर डिजिटल डेटा की आपूर्ति की जाती है, बस एक कुंजी है जो इनपुट पर उच्च स्तर (तार्किक इकाई) की उपस्थिति में जनरेटर को बिजली (GND बस को) से जोड़ता है। पावर 5 से 12 वोल्ट तक हो सकता है, और, निर्माताओं के अनुसार, उच्च शक्ति, कनेक्शन काम करता है।



मैंने अपने कार्य के हिस्से के रूप में बढ़े हुए पोषण के मूलभूत लाभों पर ध्यान नहीं दिया है। फिर भी, किसी को इस तथ्य की उपेक्षा नहीं करनी चाहिए कि यहां कोई विशेष बिजली की आवश्यकता नहीं है, और वृद्धि हुई वोल्टेज के साथ डिवाइस केवल बेहतर काम करेगा। ट्रांसमीटर को सीधे 9-12 वोल्ट के एडॉप्टर, बैटरी या 6 बैटरी (विन अरुडु पिन) के सेट से वोल्टेज से जोड़ना सुविधाजनक है। एक अस्थिर बिजली की आपूर्ति के साथ, जो 12 वोल्ट (उदाहरण के लिए, बैटरी के साथ) से अधिक हो सकती है, मैं आमतौर पर एक अलग 9-वोल्ट स्टेबलाइज़र (सबसे सरल 78L09 हो सकता है) के साथ मुख्य सर्किट से ट्रांसमीटर को कम कर देता हूं, और मुझे 9 और 12 वोल्ट की बिजली आपूर्ति के बीच संचालन में कोई अंतर नहीं दिखता है। यूनो या नैनो के साथ, आप कंट्रोलर और अन्य सर्किट (उदाहरण के लिए, सेंसर) को पावर करने के लिए बिल्ट-इन 5-वोल्ट स्टेबलाइजर का उपयोग कर सकते हैं।और मिनी (विशेष रूप से इसके सस्ते क्लोन) के लिए, मैं आपको 5-वोल्ट पिन को जोड़ने के लिए एक अलग 5-वोल्ट स्टेबलाइज़र लगाने की सलाह दूंगा।

यह ध्यान दिया जाना चाहिए कि हाल ही में ट्रांसमीटरों ने दिखाई है कि कुछ गैर-मानक दिखते हैं (देखें। अंजीर। नीचे)। यह पता चला कि एल 1 थ्रोटल (तीन-मोड़) की अनुपस्थिति, जिसमें से केवल छेद बने रहे - एक कल्पना, यह बस इसी एसएमडी घटक द्वारा प्रतिस्थापित किया गया था। इस विकल्प में से भिन्न है: मैला मुद्रण डेटा पिन और बिजली के कनेक्शन के बारे में भ्रामक हो सकता है। सही कनेक्शन चित्र में दिखाया गया है, यह सभी विकल्पों के लिए समान है:



इस मामले में सबसे खास बात यह है कि जब डेटा और पावर को मिलाया जाता है, तो ट्रांसमीटर कम दूरी पर काम करना जारी रखता है! यदि आप सर्किट को देखते हैं, तो आप समझेंगे कि यह क्या है: रोकनेवाला के माध्यम से Q2 आधार शक्ति से जुड़ा हुआ है, ट्रांजिस्टर हमेशा खुला रहता है, और सर्किट के संचालन को प्रभावित नहीं करता है। पावर बस में एक तार्किक उच्च स्तर सही समय पर जनरेटर को शक्ति देता है। असावधानी कुछ दूरी पर शुरू होती है - यह स्पष्ट है कि तार्किक निष्कर्ष से, शक्ति स्रोत खराब है।

रिसीवर कनेक्शन


रिसीवर खरीदते समय (इसे MX-RM-5V या XD-RF-5V कहा जा सकता है), टर्मिनलों की लंबाई पर ध्यान दें - मैं किसी तरह छोटे पिंस के साथ एक पूरे बैच में आ गया, जिससे रिसीवर मानक पीबीएस कनेक्टर से थोड़ी सी भी दूरी पर गिर गया और इसके कारण मुझे विशेष रूप से बोर्ड से जुड़ना था।

रिसीवर सर्किट बहुत अधिक जटिल है (मैं इसे नहीं खेलूंगा, लेकिन आप इसे पा सकते हैं, उदाहरण के लिए, यहां )। इसे उच्च-आवृत्ति सिग्नल प्राप्त करना और बढ़ाना चाहिए, 433 मेगाहर्ट्ज की आवृत्ति को फ़िल्टर करें, फट को अलग करें और उन्हें तार्किक स्तरों में परिवर्तित करें। रिसीवर के पास एक ट्यूनिंग चोक है (बोर्ड के बीच में), लेकिन आयाम-आवृत्ति विशेषताओं को मापने के लिए सटीक उपकरणों के बिना, मैं इसे घुमा देने की सलाह नहीं देता - सबसे अधिक संभावना है, आप कुछ भी सुधार नहीं करेंगे, लेकिन केवल इसे खराब कर देंगे।

चूंकि पहले से ही एक छोटी दूरी पर सिग्नल बहुत कम हस्तक्षेप होगा, इसलिए यह स्पष्ट है कि हमें सभी मोर्चों पर हस्तक्षेप से निपटना होगा: और सर्किटरी और सॉफ्टवेयर तरीके। पुस्तकालय हमारे लिए आखिरी काम करते हैं, लेकिन कोई भी बात नहीं है कि सॉफ्टवेयर प्रोसेसिंग में गणित का उपयोग किया जाता है, यह सब कुछ पहले करने की सलाह दी जाती है ताकि आउटपुट पर तार्किक इकाई केवल तब दिखाई दे जब एक उपयोगी सिग्नल फट जाए और हस्तक्षेप की उपस्थिति में प्रकट न हो। दूसरे शब्दों में, रिसेप्शन के दौरान हस्तक्षेप से अग्रिम में अधिकतम रूप से ट्यून करना अच्छा होगा।

कम से कम एक रेडियो या एम्पलीफायर को इकट्ठा करने वाले प्रत्येक छात्र को मेरे समय में ज्ञात शोर में कमी का मानक तरीका यह है कि जो नोड्स हस्तक्षेप के प्रति संवेदनशील हैं, उनके लिए एक अलग बिजली की आपूर्ति करना आवश्यक है, जो अन्य सर्किट से अधिकतम से अलग हो। आप इसे विभिन्न तरीकों से कर सकते हैं: एक बार जब आप एक अलग जेनर डायोड स्थापित करते हैं, तो अब वे एलसी फिल्टर के साथ समस्या नोड की शक्ति को अलग करते हैं (यह अनुशंसित है, उदाहरण के लिए, एडीसी के लिए, AVR नियंत्रकों के लिए डेटाशीट देखें)। लेकिन हमारी स्थितियों में, जब आधुनिक घटक छोटे और सस्ते होते हैं, तो रिसीवर पर बाकी हिस्सों से अलग एक स्टेबलाइजर डालना आसान होता है।



एक स्टेबलाइज़र, उदाहरण के लिए, टाइप करें LP2950-5.0 प्लस इसके लिए दो आवश्यक कैपेसिटर सबसे सस्ते विकल्प में (जब दोनों कैपेसिटर सिरेमिक हैं, रेंज 1-3 माइक्रोफ़ारड में) आपके सर्किट की लागत में अधिकतम साठ जोड़ देगा। लेकिन मैं सहेजना नहीं पसंद करता हूं: आउटपुट पर मैंने एक साधारण सिरेमिक रखा, और इनपुट में मैंने एक इलेक्ट्रोलाइट (10-100 माइक्रोफ़ारड्स), इसके अलावा, सॉलिड-स्टेट (पॉलीमर) या टैंटलम डाला। सिरेमिक कैपेसिटर को वहां और वहां दोनों के साथ भेजा जा सकता है, अगर 7-12 वोल्ट का इनपुट वोल्टेज बैटरी-बैटरी से या किसी अन्य एनालॉग स्टेबलाइजर से आता है। स्पंदित स्थिर स्रोत और सबसे सरल अस्थिर रेक्टिफायर को अतिरिक्त फ़िल्टरिंग की आवश्यकता होती है। आप सस्ते एल्युमिनियम इलेक्ट्रोलाइट का उपयोग कर सकते हैं, यदि आप इसके समानांतर एक सिरेमिक 0.1 माइक्रोफ़ारड डालते हैं,मिलिग्री के कई अंशों या इकाइयों के इनपुट पर एक श्रृंखला उपपादन करना भी बेहतर है।

स्टेबलाइजर को सीधे रिसीवर के पास स्थापित किया जाना चाहिए, कंडक्टर की लंबाई न्यूनतम होनी चाहिए। LP2950 के बजाय, आप एक छोटे पास-थ्रू वोल्टेज के साथ LM2931 या समान ले सकते हैं (यह विशेष रूप से महत्वपूर्ण है यदि सर्किट बैटरी द्वारा संचालित होता है - एक नियमित LM78L05 के लिए, इनपुट वोल्टेज कम से कम 7.5 होना चाहिए, और 8-9 वोल्ट पसंद करते हैं)।

सीधे Arduino से रिसीवर को पॉवर देने के मामले की तुलना में, जैसा कि सभी प्रकाशनों में अनुशंसित है (मैंने कोई अपवाद नहीं देखा है), आप प्राप्त प्रभाव पर चकित होंगे - दीवारों के माध्यम से घुसने की सीमा और क्षमता तुरंत काफी बढ़ जाती है। रिसीवर, स्टेबलाइजर के साथ मिलकर, सुविधा के लिए एक अलग छोटे बॉक्स में किया जा सकता है। आप मुख्य बॉडी में नियंत्रक को इसके आउटपुट को किसी भी तीन-तार तार (दो बिजली की आपूर्ति और एक सिग्नल कंडक्टर) के साथ 3 मीटर तक लंबे, और शायद अधिक से कनेक्ट कर सकते हैं। यह अधिक सुविधाजनक है क्योंकि एंटेना की अभी भी आवश्यकता है, और नियमों के अनुसार यह बेहतर होगा यदि वे अंतरिक्ष में एक-दूसरे के समानांतर हैं, और बड़े मामलों को हमेशा रखा नहीं जा सकता है ताकि एंटेना सही अभिविन्यास में बाहर रहें।

एंटेना के रूप में सरलतम संस्करण में, आप सिंगल-कोर तार के स्क्रैप के साथ कम से कम 0.5 मिमी के क्रॉस सेक्शन और 17 सेमी mm 1-3 मिमी की लंबाई के साथ कर सकते हैं। फंसे बढ़ते तार का उपयोग न करें! अधिक कॉम्पैक्ट सर्पिल एंटेना बिक्री पर हैं, लेकिन मैंने व्यक्तिगत रूप से उनकी प्रभावशीलता का परीक्षण नहीं किया है। ट्रांसमीटर और रिसीवर दोनों के एंटीना टिप को बोर्ड के कोने में संबंधित छेद में सील किया जाता है (ट्रांसमीटर के उन्नत संस्करण में कोई गलती न करें - ANT शब्द भी वहां से बाहर है, अंजीर देखें। ऊपर)।

संचरित डेटा की उत्पत्ति और प्रसंस्करण


यह हमारे विषय पर सबसे अधिक समीक्षाओं का दूसरा बड़ा दोष है: लेखक अपने आप को कुछ स्थानीय समस्या के लिए निर्धारित करते हैं, इसे सामान्य तरीके से तैयार किए बिना, जैसे कि एक पैकेज में मनमाना डेटा स्थानांतरित करना। जैसा कि आप ऊपर वर्णित विवरण से समझ गए हैं, केवल बिट्स का एक सरल अनुक्रम हमारे सेट द्वारा प्रेषित किया जा सकता है। मानक वर्चुअलवायर लाइब्रेरी उन्हें एक विशेष तरीके से एनकोड करती है (प्रत्येक टेट्राड को 6 बिट्स के साथ एन्कोड किया गया है, सामने एक सिंक्रनाइज़ेशन हेडर जोड़ा जाता है, और पूरे पैकेट के लिए एक चेकसम जोड़ा जाता है) और आउटपुट को बाइट्स के अधिक परिचित अनुक्रम में बदल देता है। लेकिन प्रोग्रामर को पहले से ही अपने दम पर इससे निपटना होगा।

इसके अलावा, हम मानते हैं कि ट्रांसमीटर और रिसीवर Arduino से जुड़े हैं। वर्चुअलवायर के अलावा, "स्मार्ट घरों" के बूम के संबंध में, आरसी-स्विच या रिमोटस्विच जैसी कई अन्य चीजें हैं, लेकिन वे अन्य कार्यों पर केंद्रित हैं, और यह स्पष्ट रूप से मनमाना डेटा स्थानांतरित करने के लिए उनका उपयोग करने के लायक नहीं है।

वर्चुअलवायर में एक संदेश की अधिकतम लंबाई 27 बाइट्स ( प्रलेखन देखें ) है। 1200 बीपीएस की मेरी चुनी हुई गति पर एक पूर्ण संदेश का प्रसारण (यह स्वचालित रूप से एक हस्ताक्षर 0xb38, एक संदेश लंबाई मान और एक चेकसम) के साथ पूरक है।

अधिक, वैसे, चयनित ट्रांसमिशन गति, ट्रांसमिशन रेंज कम होगी। RS-232 का उपयोग करने के अनुभव से, यह ज्ञात है कि बढ़ती सीमा के साथ, अनुमेय संचरण की गति तेजी से कम हो जाती है: 19,200 की गति पर एक अनहेल्दी लाइन 15 मीटर तक चलती है, 9600 - 150 मीटर पर, और 1200 की गति से - एक किलोमीटर से अधिक। हमारे मामले के लिए प्रायोगिक रूप से इस निर्भरता की प्रकृति का पता लगाना दिलचस्प होगा, क्योंकि यहां बहुत कुछ इस्तेमाल किए गए गणित पर निर्भर करता है।

वर्चुअलाइवर में ट्रांसमीटर को इस तरह दिखता है:

. . . . .
#include <VirtualWire.h>
. . . . .
void setup() {
  vw_setup(1200); //   VirtualWire
  vw_set_tx_pin(10);   //   VirtualWire D10
. . . . .
}

हम एक विशिष्ट उदाहरण का उपयोग करके डेटा पीढ़ी के सिद्धांतों का विश्लेषण करेंगे। हमारे पास रिमोट टेम्परेचर-ह्यूमिडिटी सेंसर है। यह एक संकेत (फ्लोट) के साथ वास्तविक संख्या के रूप में मान (तापमान और आर्द्रता चर) देता है। प्राप्त करने के अंत में समझने में आसान बनाने के लिए, हम सभी कम से कम 4 स्थानों पर दशमलव स्थानों की संख्या के साथ एक सकारात्मक पूर्णांक को कम कर देंगे, बिट्स को व्यक्तिगत रूप से ASCII वर्णों में अनुवाद करेंगे, परिणामी स्ट्रिंग को स्थानांतरित करेंगे, और प्राप्त अंत में रिवर्स ऑपरेशन करेंगे। बेशक, आप कार्य को सरल कर सकते हैं (उदाहरण के लिए, ASCII में रूपांतरण के बिना करें और संख्याओं को छोटा करें), लेकिन इस रूप में यह लगभग किसी भी तरह के डिजिटल डेटा के लिए समान होता है, जो प्राप्त होने पर डिस्सैम्प को सरल करता है।

व्यवहार में, संदेश लिखने के लिए स्ट्रिंग प्रकार का उपयोग करना सुविधाजनक है, कुछ इस तरह से:

. . . . .
//    
#define ledPin 13 //  (D13,  19 ATmega) 
char msg[13];
volatile int tmpr=0;
volatile int hum=0;
. . . . .
void loop() {
  delay(1000); // 1 c
float temperature;
float humidity;
. . . . .  //   temperature  humidity  
//       4 :
  tmpr = temperature*10+2731; //2731 =     
//    4 :
  hum = humidity*10+1000; 
//  :
  digitalWrite (ledPin,HIGH); //  —  
  String strMsg="DAH"; // - 
  strMsg+=tmpr; //  
  strMsg+=hum; // 
  strMsg.toCharArray(msg,12); //   , 12 –  
//  :
  vw_send((uint8_t *)msg, strlen(msg)); //  
  vw_wait_tx(); //   
  delay(500); // 500 
  digitalWrite (ledPin, LOW); //  —  
}

यदि आपको बड़ी संख्या में अंकों के साथ अधिक सटीक संख्याओं को स्थानांतरित करने की आवश्यकता है, तो आप बस msg सरणी की लंबाई बढ़ाते हैं। यदि आप कई रीडिंग औसत करते हैं, तो वैश्विक "अस्थिर" चर tmpr और hum की आवश्यकता होती है, अन्यथा उन्हें लूप () फ़ंक्शन के भीतर स्थानीय भी घोषित किया जा सकता है। संदेश, जैसा कि आप देखते हैं, परिवर्तित तापमान और आर्द्रता के मूल्यों में, प्रत्येक चार बाइट्स के एएससीआईआई स्ट्रिंग में, तीन पात्रों "डीएएच" (वर्ण एएससीआईआई तालिका से कोई भी हो सकता है) की एक स्ट्रिंग से पहले है। यह एक हस्ताक्षर है जो आपको इस संदेश को समान उपकरणों द्वारा भेजे गए संभावित अन्य लोगों में से अलग करने की अनुमति देगा। हस्ताक्षर की उपेक्षा न करें, भले ही आप मानते हैं कि इस रेंज में पास के अन्य उपकरणों की उम्मीद नहीं है, साथ ही यह प्राप्त आंकड़ों की अखंडता की एक अतिरिक्त गारंटी के रूप में कार्य करता है।

यह भी ध्यान दें कि किसी स्ट्रिंग को सरणी में परिवर्तित करते समय, आपको संदेश की कुल लंबाई (3 + 4 + 4 = 11) से अधिक एक वर्ण निर्दिष्ट करना होगा, यह स्ट्रिंग को बंद करने वाले शून्य वर्ण को ध्यान में रखता है। और संदेश [] सरणी का आकार मार्जिन के साथ निर्दिष्ट किया जाना चाहिए और कोई भी हो सकता है, इस मामले में 13 से 27 बाइट्स तक। स्थानांतरण करते समय, यह अभी भी उतना ही भेजा जाएगा जितना कि स्ट्रलेन (msg) फ़ंक्शन वापस आएगा, यानी 11 बाइट्स + एक अशक्त चरित्र।

प्राप्त भाग में, ASCII कोड के परिणामी सरणी को पार्स करना होगा। लेकिन पहले आपको इसे स्वीकार करने की आवश्यकता है। स्वागत को आरंभ करने के लिए, निम्नलिखित क्रियाएं की जाती हैं:

#include <VirtualWire.h>
char str[5];     ASCII  
  uint8_t buf [VW_MAX_MESSAGE_LEN];  //    
  uint8_t buflen = VW_MAX_MESSAGE_LEN;  // max   
. . . . .

void setup() {
  vw_set_rx_pin(2); //D2   VirtualWire
  vw_setup(1200); //   VirtualWire
. . . . .
} 

दरअसल, एक लाइन को पार्स करने वाली तकनीक यह है:

void loop() {
  vw_rx_start();  //  
  buflen = VW_MAX_MESSAGE_LEN; //    
 if (vw_have_message()) { // 
 if (vw_get_message(buf, &buflen)) //   
  {
    vw_rx_stop(); //   :
        for (byte i=0; i<3; i++)  //    
                str[i]= buf[i]; // 
                str[3]='\0';
      if ((str[0]=='D')&&(str[1]=='A')&&(str[2]=='H')) {
// ,  
       for (byte i=3;i<7;i++)  //    
                str[i-3]= buf[i]; //    
      int tmpr=atoi(str); //   
      tmpr=tmpr-2731; // 2731,     
. . . . .//    10    float,  
. . . . . //    -
// :
      for (byte i=7;i<11;i++)  //    
                str[i-7]= buf[i]; //    
      int hh = atoi(str); //   
      hh=(hh-1000)/10;
      if (hh>99) hh=99; //   %,  
. . . . . // -
   } //end   DAT
  } //end  
 } // 
} // end loop

मुझे उम्मीद है कि अब आपके पास इन सस्ते और उपयोग में आसान उपकरणों का उपयोग करने के बारे में कम सवाल हैं।

All Articles