91
IOT : Internet of Thing (ESP32) / Re: การเรียนรู้ครั้งที่ 5 [Basic ESP32] การใช้งานพอร์ตดิจิทัลอินพุทและอินเตอร์รัพท์
« กระทู้ล่าสุด โดย admin เมื่อ มกราคม 27, 2019, 03:18:22 PM »...

#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();
}
| รูปแบบ | คำอธิบาย |
|---|---|
| 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
/* setting PWM properties */
const int freq = 5000;
const byte ledChannel = 0;
const byte resolution = 8;
void setup(){
ledcSetup(ledChannel, freq, resolution);
ledcAttachPin(LED1, ledChannel);
}
void loop(){
for(int duty = 0; duty <= 255; duty++){
ledcWrite(ledChannel, duty);
delay(15);
}
for(int duty = 255; duty >=0; duty--){
ledcWrite(ledChannel, duty);
delay(15);
}
}


#define LED1 21
#define LED2 19
#define LED3 18
#define LED4 5
byte fade[] = {0,0,0,0,200,255, 200, 150, 100, 50, 10, 0, 0, 0,0};
void setup() {
ledcSetup(0, 5000, 8); /*ledcSetup(Channel,Freq,Resolution) */
ledcSetup(1, 5000, 8);
ledcSetup(2, 5000, 8);
ledcSetup(3, 5000, 8);
ledcAttachPin(LED1, 0); /*ledcAttachPin(Pin,Channel) */
ledcAttachPin(LED2, 1);
ledcAttachPin(LED3, 2);
ledcAttachPin(LED4, 3);
}
void loop() {
for (int i = 0; i < 11; i++) {
ledcWrite(0, fade[i]);
ledcWrite(1, fade[i + 1]);
ledcWrite(2, fade[i + 2]);
ledcWrite(3, fade[i + 3]);
delay(75);
}
}
| รูปแบบ | คำอธิบาย |
|---|---|
| pinMode(pin, mode); | pin: หมายเลขขาที่ต้องการเซตโหมด mode: INPUT, OUTPUT, INPUT_PULLUP |
| digitalWrite(pin,value); | pin: หมายเลข ขาที่ต้องการเขียนลอจิกออกพอร์ต value: ค่าลอจิกที่ต้องการส่งออก HIGH or LOW |
| delay(ms); | ms: ตัวเลขที่หยุดค้างของเวลาหน่วยมิลลิวินาที (unsigned long) |
| รูปแบบ | คำอธิบาย |
|---|---|
| ledcSetup(channel,freq,resolution); | ฟังก์ชั่นกำหนดค่าใน Timer -channel หมายเลขช่องของ Timer ใช้งานได้ 16 ช่องค่า 0-15 -freq ค่าความถี่ที่ใช้สร้างสัญญาณ PWM -resolution ค่าความละเอียดของ Duty cycle 1-16 bit เช่นถ้าใช้ 8 bit ค่า Duty cycle ที่กำหนดจะมีค่า 0-255 หมายถึง 0-100% |
| ledcAttachPin(GPIO, channel); | ฟังก์ชั่นกำหนดขาพอร์ตที่ใช้งานกับช่องของ Timer -GPIO หมายเลขขาพอร์ตที่ใช้งาน -channel หมายเลขช่องของ Timer ที่เลือกใช้งานกับขาพอร์ตที่ระบุ |
| ledcWrite(channel, dutycycle) | ฟังก์ชั่นสั่งการให้ Timer สร้างสัญญาณ PWM -channel หมายเลขช่องของ Timer ที่ต้องการสั่งการ -dutycycle ค่า Duty cycle ที่ต้องการให้ Timer สร้างขึ้น |





| ลำดับที่ | รายการ | จำนวนตัว |
|---|---|---|
| 1 | 0.1uF | 2 |
| 2 | 0.1uF(SMD) | 5 |
| 3 | 1uF | 1 |
| 4 | 470uF | 1 |
| 5 | 1N4002 | 1 |
| 6 | BC547 | 1 |
| 7 | Female Pin Header1x12 | 1 |
| 8 | Female Pin Header1x2 | 7 |
| 9 | Female Pin Header1x3 | 3 |
| 10 | Female Pin Header1x4 | 1 |
| 11 | Female Pin Header1x5 | 2 |
| 12 | Female Pin Header1x8 | 1 |
| 13 | Female Pin Header1x9 | 1 |
| 14 | Pin Header Connector 40 Pins | 1 |
| 15 | LDR | 1 |
| 16 | LED3mm | 9 |
| 17 | RELAY-FTR-F3AA005 | 1 |
| 18 | Tactile Switches | 5 |
| 19 | Terminal Box 2 Pin | 1 |
| ลำดับที่ | รายการ | จำนวนตัว |
|---|---|---|
| 1 | Resistor 220 (ใช้งาน 9 ตัว) | 1 แพค |
| 2 | Resistor 10k(ใช้งาน 3 ตัว) | 1 แพค |
| 3 | Resistor 1k (ใช้งาน 2 ตัว) | 1 แพค |
| 4 | Resistor 4k7 (ใช้งาน 2 ตัว) | 1 แพค |
| 5 | Female Pin Header1x15 | 2 |
| 6 | Female Pin Header 1x4-90 | 1 |
| 7 | Trim POT-3386P | 1 |
| 8 | OLED 128x64 0.96" | 1 |
| 9 | LCD i2c 16x2 | 1 |
| 10 | MAX7219 7-segment 8 digit | 1 |
| 11 | DHT11 | 1 |
| 12 | DS18B20 | 1 |
| 13 | BreadBoard 170 | 1 |
| 14 | ESP32 DOIT DevKit | 1 |