ดังนั้นฉันสมบูรณ์และเป็นมือใหม่ในการเขียนโปรแกรม ฉันได้ทำสิ่งพื้นฐานบางอย่างเกี่ยวกับ Arduinos (แท้จริงแล้วเปลี่ยนเป็น LED และแสดงบางอย่างบนจอ LCD) และฉันพยายามสอนตัวเองเกี่ยวกับวิธีการโปรแกรมใน C. ฉันเป็นวิศวกรฮาร์ดแวร์โดยการค้า แต่มันรบกวนจิตใจฉันว่าฉันไม่สามารถ ทำด้านใดด้านหนึ่งของเฟิร์มแวร์ / ซอฟต์แวร์และไม่มีหลักสูตรภาคค่ำที่จะสอนมันและฉันต้องการที่จะเลือกอาชีพของฉันต่อไป ฉันพยายามที่จะเข้าใจว่าคำสั่งเหล่านี้ทำงานร่วมกันได้อย่างไรและพบปัญหาที่ฉันไม่สามารถเข้าใจได้ว่าทำไมมันถึงไม่ทำงาน
ดังนั้นฉันมีอินพุตและเอาต์พุต เอาท์พุทของฉันคือการสลับประตูของ FET ซึ่งเปิดไฟ LED อินพุตมาจากประตู AND ดังนั้นไฟ LED ของฉันจะเปิดอยู่เสมอและเมื่อฉันได้รับสัญญาณอินพุตจากประตูเกต (พบเงื่อนไข 2 ข้อ) ฉันต้องการเอาท์พุท (LED สลับ) ไปที่ LOW (ปิดไฟ LED ขณะที่เอาต์พุตยังเชื่อมต่อกับ หนึ่งในช่องสัญญาณ AND จะทำให้สัญญาณอินพุตต่ำ
สิ่งที่ฉันต้องการจะทำ: ฉันแค่ต้องการอ่านอินพุตเป็น 'เงื่อนไขตรงตาม' และปิดไฟ LED ควรปิดเป็นเวลา 1 วินาทีแล้วเปิดใหม่ หากอินพุตไปที่ HIGH อีกครั้งกระบวนการจะทำซ้ำ ฉันใช้การกดอย่างง่ายเพื่อให้สวิตช์เป็นอินพุต AND gate อื่นและวัดว่าเอาต์พุต (อินพุต MCU) สูงขึ้นเมื่อกดปุ่ม แต่สลับ LED (เอาท์พุท) จะไม่ปิด รหัสของฉันคือ (ฉันคิดว่า) เป็นเรื่องง่ายมาก แต่ชัดเจนฉันไม่เข้าใจบางสิ่งบางอย่างอย่างถูกต้อง
นี่คือรหัสที่ฉันใช้:
#include "mbed.h"
DigitalIn ip(D7);
DigitalOut op(D8);
int main() {
if (ip == 1){
op = 0;
wait (1.0);
op = 1;
}else{
op = 1;
}
}
และสำหรับฉันดูเหมือนว่ามีเหตุผล ในสถานะปกติผลลัพธ์คือ HIGH หากอินพุตได้รับสัญญาณจากประตู AND ไฟ LED จะดับลง 1 วินาทีจากนั้นเปิดอีกครั้ง
ฉันทำอะไรผิดเพราะดูเหมือนเป็นวิธีที่สมเหตุสมผลและฉันก็ไม่เข้าใจว่าทำไมมันถึงไม่ทำงาน
ถ้ามันช่วยได้ฉันกำลังใช้ Nucleo F103RB เมื่อฉันใช้รหัส 'กะพริบ' และเพียงแค่สลับ LED เปิดและปิดเช่นนั้นมันทำงานได้ดีมันก็แค่เมื่อฉันเพิ่มคำสั่ง 'ถ้า' ว่ามันผิดไป
นี่คือวงจรที่ง่ายขึ้น:
จำลองวงจรนี้ - แผนผังที่สร้างโดยใช้CircuitLab
PS ฉันรู้ว่าฉันไม่ได้เพิ่มพวกเขาในแผนผัง แต่และประตูจะมีตัวต้านทานแบบเลื่อนลงบนอินพุตและเอาต์พุต
DigitalIn
volatile