इसलिए, मैं प्रोग्रामिंग में एक पूर्ण और पूर्ण नौसिखिया हूं। मैंने Arduinos पर कुछ बुनियादी सामान किया है (शाब्दिक एलईडी एलईडी और एक एलसीडी पर कुछ प्रदर्शित करना) और मैं स्वयं को सिखाने की कोशिश कर रहा हूं कि कैसे सी में प्रोग्राम करना है। मैं व्यापार द्वारा एक हार्डवेयर इंजीनियर हूं, लेकिन यह मुझे परेशान करता है कि मैं नहीं कर सकता फर्मवेयर / सॉफ्टवेयर साइड में से कोई भी करें और इसे पढ़ाने के लिए शाम के पाठ्यक्रम नहीं हैं, और मैं अपने करियर के विकल्पों को आगे बढ़ाना चाहता हूं। मैं यह समझने के लिए संघर्ष कर रहा हूं कि इनमें से कुछ कमांड एक साथ कैसे चलते हैं और इस मुद्दे पर चले गए हैं कि मैं अपना सिर इधर-उधर नहीं कर सकता कि यह काम क्यों नहीं कर रहा है।
इसलिए, मेरे पास एक इनपुट और एक आउटपुट है। मेरा आउटपुट एक FET के गेट को टॉगल करता है जो एक एलईडी चालू करता है। इनपुट एक AND गेट से आ रहा है। तो, मेरी एलईडी हमेशा चालू रहती है, और जब मुझे AND गेट से इनपुट सिग्नल मिलता है (2 स्थितियां पूरी हो गई हैं) मैं चाहता हूं कि आउटपुट (एलईडी टॉगल) LOW पर जाए (LED को बंद करें। चूंकि आउटपुट भी जुड़ा हुआ है) AND इनपुट्स में से एक, यह इनपुट सिग्नल LOW को भी चालू कर देगा।
मैं क्या करना चाहता हूं: मैं सिर्फ इनपुट को 'शर्तों के अनुसार' के रूप में पढ़ना चाहता हूं और एलईडी बंद कर देता हूं। फिर इसे 1 सेकंड के लिए बंद होना चाहिए, और वापस चालू करना चाहिए। यदि इनपुट उच्च फिर से जाता है, तो प्रक्रिया दोहराती है। मैं दूसरे और गेट इनपुट के रूप में स्विच करने के लिए एक साधारण पुश का उपयोग कर रहा हूं और मापा है कि बटन दबाए जाने पर आउटपुट (MCU इनपुट) उच्च हो जाता है, फिर भी एलईडी टॉगल (आउटपुट) बंद नहीं होगा। मेरा कोड है (मुझे लगता है) बहुत लानत है, लेकिन स्पष्ट रूप से मुझे कुछ ठीक से समझ नहीं आ रहा है क्योंकि यह अभी काम नहीं कर रहा है।
तो यह वह कोड है जिसका मैं उपयोग कर रहा हूं:
#include "mbed.h"
DigitalIn ip(D7);
DigitalOut op(D8);
int main() {
if (ip == 1){
op = 0;
wait (1.0);
op = 1;
}else{
op = 1;
}
}
और मेरे लिए, यह तर्कसंगत लगता है। सामान्य स्थिति में, आउटपुट उच्च है। यदि इनपुट को AND गेट से सिग्नल मिलता है, तो LED 1 सेकंड के लिए बंद हो जाएगी, फिर से चालू करें।
ऐसा क्या है जो मैंने गलत किया है क्योंकि ऐसा करने के लिए तार्किक तरीका दिखता है और मैं बस यह नहीं समझ सकता कि यह काम क्यों नहीं करता है?
यदि यह मदद करता है, तो मैं Nucleo F103RB का उपयोग कर रहा हूं। जब मैं 'ब्लिंक' कोड का उपयोग करता हूं और इस तरह एलईडी को चालू और बंद करता हूं, तो यह ठीक काम करता है, यह सिर्फ तब होता है जब मैं 'इफ' स्टेटमेंट जोड़ता हूं कि यह गलत हो जाता है।
यह सरलीकृत सर्किट है:
इस सर्किट का अनुकरण करें - सर्किटलैब का उपयोग करके बनाई गई योजनाबद्ध
पीएस मुझे पता है कि मैंने उन्हें योजनाबद्ध में नहीं जोड़ा था, लेकिन इनपुट और आउटपुट पर AND गेट्स में पुलडाउन रेसिस्टर्स होते हैं।
DigitalIn
पहले से ही परिभाषा शामिल है volatile
।