81
IOT : Internet of Thing (ESP32) / Re: การเรียนรู้ครั้งที่ 4 [Basic ESP32] การใช้งาน PWM
« กระทู้ล่าสุด โดย admin เมื่อ มกราคม 27, 2019, 03:18:36 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 สร้างขึ้น |