รูปแบบ | คำอธิบาย |
---|---|
pinMode(pin, mode); | pin: หมายเลขขาที่ต้องการเซตโหมด mode: INPUT, OUTPUT, INPUT_PULLUP |
digitalWrite(pin,value); | pin: หมายเลข ขาที่ต้องการเขียนลอจิกออกพอร์ต value: ค่าลอจิกที่ต้องการส่งออก HIGH or LOW |
digitalRead(pin); | pin: หมายเลขขาที่ต้องการอ่านค่าสถานะลอจิก |
delay(ms); | ms: ตัวเลขที่หยุดค้างของเวลาหน่วยมิลลิวินาที (unsigned long) |
รูปแบบ | คำอธิบาย |
---|---|
attachInterrupt(pin, ISR, mode); | ฟังก์ชั่นเปิดการใช้งานอินเตอร์รัพท์ภายนอก pin: หมายเลขขาพอร์ตที่ต้องการรับสัญญาณอินเตอรรัพท์ ISR: ชื่อฟังก์ชั่นรองที่ใช้ตอบสนองการอินเตอร์รัพท์ mode: เป็นการกำหนดลักษณะของสัญญาณที่ใช้กระตุ้นการอินเตอร์รัพท์ ->LOW เมื่อขาเป็นลอจิกศูนย์ ->CHANGE เมื่อขามีการเปลี่ยนระดับลอจิก 1->0, 0->1 ->RISING เมื่อขามีการเปลี่ยนระดับลอจิกจาก 0 ไปเป็น 1 ->FALLING เมื่อขามีการเปลี่ยนระดับลอจิกจาก 1 ไปเป็น 0 |
#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);
}
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();
}