« ตอบกลับ #2 เมื่อ: มกราคม 20, 2019, 08:50:31 PM »
วงจรที่ใช้ทดลองตัวอย่างโปรแกรม [1] วนตรวจสอบสถานะที่ขาพอร์ต
โปรแกรมอ่านค่าสถานะของขาพอร์ตที่เชื่อมต่อกับสวิตช์กดติดปล่อยดับ แล้วแสดงสถานะที่อ่านได้แสดงผลที่ LED
#define LED1 21
#define LED2 19
#define LED3 18
#define LED4 5
#define SW1 27
#define SW2 14
#define SW3 12
#define SW4 13
void setup(){
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(SW1, INPUT_PULLUP);
pinMode(SW2, INPUT_PULLUP);
pinMode(SW3, INPUT_PULLUP);
pinMode(SW4, INPUT_PULLUP);
}
void loop(){
digitalWrite(LED1, digitalRead(SW1));
digitalWrite(LED2, digitalRead(SW2));
digitalWrite(LED3, digitalRead(SW3));
digitalWrite(LED4, digitalRead(SW4));
delay(50);
}
ตัวอย่างโปรแกรม [2] ใช้การอินเตอร์รัพท์
โปรแกรมทดสอบการใช้งานการอินเตอร์รัพท์ภายนอก โดยรับจากสวิตช์ที่ต่อไว้ที่ขา GPIO27
struct Button {
const uint8_t PIN;
uint32_t numberKeyPresses;
volatile bool pressed;
};
Button SW = {27, 0, false};
void IRAM_ATTR isr() {
SW.pressed = true;
}
void setup() {
pinMode(SW.PIN, INPUT_PULLUP);
attachInterrupt(SW.PIN, isr, FALLING);
Serial.begin(9600);
}
void loop() {
for (byte i = 0; i < 20; i++) {
Serial.print(".");
delay(100);
if (SW.pressed) {
SW.numberKeyPresses += 1;
Serial.printf("\nSwitch has been pressed %u times\n", SW.numberKeyPresses);
SW.pressed = false;
return;
}
}
Serial.println();
}
« แก้ไขครั้งสุดท้าย: มกราคม 25, 2019, 02:15:31 PM โดย admin »
บันทึกการเข้า