เลือกอ่าน คู่มือ ADC และ PWM เพื่อแยกค่าดิบ แรงดันและเวลาพัลส์ พร้อมโจทย์บนกระดาษ
วัตถุประสงค์และสิ่งที่ต้องเตรียม
บทนี้ฝึกให้โปรแกรมรับข้อมูลและทำงานตามเวลา โดยยังไม่ต่อชุดขับมอเตอร์ เมื่อจบควรอ่านปุ่มได้ กระพริบ LED พร้อมส่งข้อมูล serial และอธิบายว่าการรอค้างทำให้ข้อมูลบางอย่างมาช้าได้อย่างไร
เริ่มตรวจโค้ดบนคอมพิวเตอร์ได้โดยยังไม่ต่อบอร์ด มีชุดสำหรับ Arduino UNO R3 และ ESP32 Dev Module รุ่นดั้งเดิม ให้เลือก เมื่อมีอุปกรณ์จึงเตรียมสาย USB ที่ส่งข้อมูลได้ ปุ่มกด และ LED ตามชุดที่เลือก ตรวจชื่อรุ่น pinout ระดับแรงดัน และคู่มือก่อนต่อสาย ขา USB power กับขาสัญญาณมีหน้าที่ต่างกัน อย่าสรุปว่าขาทุกชนิดรับแรงดันเท่ากัน
เลือกบอร์ดจากงาน ไม่ใช่จากจำนวนบิตอย่างเดียว
Arduino UNO R3 รุ่นดั้งเดิมใช้ ATmega328P และ clock 16 MHz เหมาะกับการเริ่ม I/O และ serial ข้อมูลนี้เฉพาะ UNO R3; UNO รุ่นอื่นอาจใช้ MCU ต่างกัน ดู เอกสาร UNO R3
ESP32 มีหลายตระกูลและบอร์ด หลายงานใช้ประโยชน์จากวิทยุและ peripheral ของรุ่นที่เลือกได้ แต่ต้องตรวจว่าชิปนั้นมี ADC, PWM และขาที่ต้องการหรือไม่ เริ่มด้วย Arduino core สำหรับ ESP32 ได้ แล้วค่อยศึกษา ESP-IDF เมื่อจำเป็นต้องจัดการระบบละเอียดขึ้น ตัวอย่าง API ดู Arduino-ESP32 ADC
ความกว้าง 8-bit หรือ 32-bit บอกลักษณะการประมวลผลบางส่วน ความเร็วจริงยังขึ้นกับ clock, คำสั่ง, FPU, หน่วยความจำ และงานอื่นที่ทำร่วมกัน จึงควรวัดเวลาของงานที่ต้องใช้ แทนการตีความว่า 32-bit เร็วกว่า 8-bit สี่เท่าเสมอ
สัญญาณที่ใช้ในระบบโดรน
| ชื่อ | ความหมายเบื้องต้น | ใช้เรียนรู้อะไร |
|---|---|---|
| GPIO | ขาสัญญาณดิจิทัลรับหรือส่งระดับลอจิก | อ่านปุ่มและเปิด/ปิด LED |
| ADC | แปลงสัญญาณแอนะล็อกเป็นค่าดิจิทัล | อ่านค่าทดลอง แล้วตรวจช่วงและการแปลงหน่วย |
| PWM | สลับสัญญาณตามคาบและ duty cycle | ปรับความสว่าง LED; โปรโตคอล ESC ต้องศึกษาแยก |
| UART | ส่งข้อมูล serial ระหว่างอุปกรณ์ | บันทึกข้อความหรือเชื่อมโมดูลที่รองรับ |
| I2C / SPI | บัสรับส่งข้อมูลกับอุปกรณ์ | อ่าน IMU ตาม interface และ datasheet ของโมดูล |
| Timer | วงจรหรือกลไกอ้างอิงเวลา | กำหนดช่วงอ่านและตรวจการมาช้า |
PWM ปรับความสว่าง LED กับสัญญาณที่ ESC ต้องการอาจต่างทั้งความถี่ ความกว้างพัลส์ และโปรโตคอล ห้ามนำค่าตัวอย่าง LED ไปใช้กับ ESC โดยตรง สำหรับ ESP32 ให้ใช้ API ตามรุ่น core ที่ติดตั้ง เช่น ledcAttach(pin, frequency, resolution) และ ledcWrite(pin, duty) ในเอกสารปัจจุบัน ตรวจค่าคืนเพื่อทราบว่าตั้งค่าได้หรือไม่ ดู LEDC API
ก่อนเพิ่มเซนเซอร์ อ่าน เปรียบเทียบ I2C, SPI และ UART พร้อมใบวางแผนและการคำนวณเวลา UART
อ่าน ADC และ PWM โดยแยกหน่วยให้ถูก
วัตถุประสงค์: อธิบายค่าดิบ ADC และคำนวณคาบ/duty/เวลาพัลส์ของ PWM ก่อนเลือกเซนเซอร์หรือ output พื้นฐาน: รู้จัก GPIO แรงดันและกราวด์จากต้นบท เริ่มทำ: อ่านแบบจำลองด้านล่าง แล้วทำใบงานบน PC หรือกระดาษ ยังไม่ต้องต่อบอร์ด

ภาพเสมือนจริงสร้างด้วย AI สำหรับบริบทการเรียน ไม่ใช่วงจรต่อสาย pinout หรือผลวัดอุปกรณ์จริง
แยกตัวเลขที่กำลังอ่านหรือกำหนด
| ปริมาณ | ความหมาย | ต้องบันทึกอะไรคู่กัน |
|---|---|---|
| ADC raw | รหัสดิจิทัล ยังไม่มีหน่วย V | รุ่น ADC, resolution และการตั้งค่าช่วงรับ |
| แรงดัน | ค่าเป็น V หรือ mV หลังแปลงหรืออ่าน API | สูตร/วิธี calibration และจุดที่วัด |
| PWM frequency | จำนวนคาบต่อวินาที หน่วย Hz | timer/clock และค่าที่ตั้งกับค่าที่ตรวจได้ |
| PWM duty | สัดส่วนเวลาสูงต่อหนึ่งคาบ | เป็น % หรือสัดส่วน 0–1; อย่าสับสนกับ integer ของ API |
ADC เป็นทางรับข้อมูล ส่วน PWM เป็นสัญญาณออกที่สลับ HIGH/LOW ไม่ใช่ DAC ที่สร้างแรงดันคงที่ และจำนวนบิตมากขึ้นไม่ได้รับรองความแม่นยำของแรงดัน
ADC · ค่าดิบ บิต และการแปลงแรงดัน
ADC 10-bit มี 1,024 รหัส คือ 0–1,023; 12-bit มี 4,096 รหัส คือ 0–4,095 เอกสาร Arduino analogRead อธิบายช่วงของ UNO ตัวอย่างนี้ไม่กำหนดช่วงให้ทุกบอร์ด
โจทย์แบบจำลอง: ประกาศ ADC อุดมคติ 10-bit แบ่งช่วง 0 ≤ Vin < 5 V เป็นช่องเท่ากัน 1,024 ช่อง ใช้ขอบล่างเป็นตัวแทนแต่ละรหัส จึงมีขนาดช่อง 5 / 1024 = 0.0048828125 V หรือประมาณ 4.883 mV รหัส 512 อยู่ในช่วง 2.5 ≤ Vin < 2.5048828125 V เป็นการคำนวณจากสมมติฐาน ไม่ใช่ช่วง error หรือผล calibration ของ UNO จริง ตัวหาร 1,024 ใช้นับช่องในแบบจำลองนี้; สูตรที่ map endpoint ด้วย 1,023 เป็นคนละนิยาม ต้องระบุสูตรที่ใช้
สำหรับ ESP32 เอกสารแยก analogRead() ที่ให้ raw จาก analogReadMilliVolts() ที่แปลงเป็น mV โดยใช้ calibration ตรวจ resolution, attenuation, ชิปและ GPIO ที่ใช้ได้จาก Espressif ADC ไม่แทนช่วงด้วย 3.3 V เพียงเพราะบอร์ดใช้ logic 3.3 V การเรียกสอง API ต่อกันเป็นคนละการอ่าน จึงไม่ควรอ้างว่า raw กับ mV เป็น sample เดียวกัน
เมื่อเตรียมอุปกรณ์จริง ต้องตรวจช่วง input และขีดจำกัดทางไฟฟ้าจาก datasheet ก่อน เลือกวิธี calibration/เครื่องมืออ้างอิงตามงาน บันทึกกราวด์ สัญญาณรบกวนและช่วงที่อ่านได้ การเพิ่มบิตหรือเฉลี่ยค่าช่วยบางปัญหา แต่ไม่แก้สูตรหรือ reference ที่ผิด
PWM · คาบ duty และความกว้างพัลส์
ให้ f เป็นความถี่ Hz, T = 1 / f เป็นคาบวินาที และ D = tHigh / T เป็น duty แบบสัดส่วน เช่น 25% คือ D = 0.25 จึงคำนวณ tHigh = D × T ได้
| ตัวอย่างที่ประกาศ | คาบ T | tHigh เมื่อ duty 25% |
|---|---|---|
| 1,000 Hz | 1 ms | 250 µs |
| 2,000 Hz | 0.5 ms | 125 µs |
duty เท่ากันแต่พัลส์ยาวไม่เท่ากัน ถ้าประกาศสัญญาณอุดมคติ HIGH = 3.3 V และ LOW = 0 V ค่าเฉลี่ยในหนึ่งคาบที่ duty 25% คือ 0.825 V แต่ขาสัญญาณยังสลับสองระดับ ไม่ได้ยืนยันว่ามี DC 0.825 V บนขาหรือ LED สว่าง 25% การตอบสนองขึ้นกับวงจรและอุปกรณ์
ใน ESP32 ต้องเลือกขา frequency/resolution ที่ชิปและ clock รองรับ แล้วตรวจค่าคืนของ ledcAttach() และ ledcWrite() ตาม Espressif LEDC ความถี่กับ resolution มีข้อจำกัดร่วมกัน ค่า integer duty ของ API ต้องอ่านตาม SDK; โจทย์นี้ไม่ได้แปลง duty เป็นคำสั่งของบอร์ด ไม่ใช้ตัวอย่าง LED เป็นสัญญาณ ESC หรือคำสั่งมอเตอร์
แบบจำลองสัญญาณตามสมมติฐานในบท ความกว้างบนภาพ PWM ใช้มาตราเวลาเดียวกัน ไม่ใช่ trace จากออสซิลโลสโคป เปิดไดอะแกรม ADC/PWM ขนาดเต็ม
ขั้นตอนฝึกและคำแนะนำเบื้องต้น
- กรอกบอร์ด/ชิป/SDK ขา input/output และที่มาใน ใบวางแผน ADC/PWM ว่าง ค่าที่ยังไม่ทราบให้ระบุ unknown
- แยกสิ่งที่ตั้ง สิ่งที่อ่านและสิ่งที่คำนวณ เขียนหน่วยทุกช่อง อย่าเปลี่ยน raw เป็น V โดยไม่มีสูตรหรือ API ที่ระบุ
- ทำ โจทย์ ADC/PWM บนกระดาษ แล้วตรวจวิธีคิดกับ เฉลยพร้อมขอบเขต โจทย์ไม่เพิ่มคะแนนในแบบประเมินเดิม
- หาก raw แกว่ง ให้ตรวจขาลอย/กราวด์/ช่วงรับก่อนสรุปว่าเซนเซอร์เสีย หากตั้ง PWM ไม่สำเร็จ ให้ตรวจขา frequency/resolution/ค่าคืนก่อนเพิ่ม duty
- เมื่อมีอุปกรณ์จึงตรวจจริงตามคู่มือและจดผลแยกจากค่าตั้ง หากจะส่งข้อมูลต่อ อ่าน คู่มือ I2C, SPI และ UART และเตรียม ที่มาและขอบเขต Log ก่อนสรุปผล
ดาวน์โหลดเพิ่ม: คู่มือเริ่มใช้ชุด ADC/PWM · ที่มาและสมมติฐาน ADC/PWM · รายการแฮชไฟล์ ADC/PWM
ตัวอย่าง: กระพริบ LED พร้อมบันทึกเวลา
แผนภาพหน้าที่ของ I/O และเวลา ใช้แทนวงจรต่อสายไม่ได้ ภาพเสมือนจริงต้นบทเป็นภาพแนวคิด ไม่ใช่ pinout
โค้ดนี้เป็นตัวอย่างสำหรับ Arduino UNO R3 และ LED_BUILTIN ผ่านการคอมไพล์ด้วย Arduino CLI 1.5.1 และ Arduino AVR Boards 1.8.8 วันที่ 1 ตุลาคม 2026 ใช้พื้นที่โปรแกรม 2,078 ไบต์ และ RAM 197 ไบต์ ยังไม่ได้ upload หรือทดสอบกับบอร์ดจริง ใช้หลักการตรวจเวลาจาก Blink Without Delay โดยเขียนตัวอย่างให้มีงานบันทึกข้อมูลอีกหนึ่งงาน
unsigned long lastBlink = 0;
unsigned long lastReport = 0;
bool ledOn = false;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
}
void loop() {
const unsigned long now = millis();
if (now - lastBlink >= 500UL) {
lastBlink = now;
ledOn = !ledOn;
digitalWrite(LED_BUILTIN, ledOn ? HIGH : LOW);
}
if (now - lastReport >= 200UL) {
lastReport = now;
Serial.println(now);
}
// เพิ่มการอ่านปุ่มที่นี่ โดยไม่รอค้างด้วย delay()
}
การลบเวลาแบบ unsigned ช่วยให้เปรียบเทียบช่วงสั้นได้ข้ามการวนกลับของตัวนับ แต่โปรแกรมยังมีเวลาที่ใช้พิมพ์ serial และงานอื่น ตัวอย่างนี้จึงไม่รับประกันการทำงานตรงทุก 200 ms ชุด ESP32 ด้านล่างใช้ LED ภายนอกและกำหนดขาชัดเจน เพราะ LED บนบอร์ดแต่ละรุ่นอาจต่างกัน
อ่านปุ่มและ debounce พร้อมทำงานตามเวลา
ดาวน์โหลดชุด UNO R3 input/debounce (ZIP) · ผลคอมไพล์ · รายการไฟล์และ SHA-256
วัตถุประสงค์: แยกสัญญาณดิบจากสถานะปุ่มที่นิ่ง แล้วอ่าน input พร้อม LED และ serial โดยไม่รอค้าง ชุดนี้มี sketch, header, tests และใบงานครบใน ZIP ต่อจากตัวอย่าง LED ด้านบน ใช้ UNO R3 เท่านั้น ผ่าน host tests และคอมไพล์วันที่ 1 ตุลาคม 2026 ด้วย CLI 1.5.1/AVR core 1.8.8 ใช้โปรแกรม 2,626 ไบต์และ RAM 203 ไบต์ มี warning 4 รายการจาก arduino/new.cpp ไม่พบ warning จากตัวอย่าง ยังไม่ได้ทดสอบบอร์ดจริง สำหรับ ESP32 ใช้ชุดเฉพาะด้านล่าง
แผนภาพอ้างอิงของตัวอย่าง ตรวจ pinout UNO R3 และคู่หน้าสัมผัสปุ่มก่อนต่อจริง เส้นเวลาเป็นคำอธิบายแนวคิด ไม่ใช่ผลวัดบนบอร์ด เปิดแผนภาพขนาดเต็ม
- ตรวจบน PC: แตก ZIP แล้วคอมไพล์
input_led_serialตามREADME.mdถ้ามี C++ compiler รันg++ -std=c++11 -Wall -Wextra -Werror test_input.cpp -o test_inputตามด้วย./test_inputหรือ executable ของ Windows tests ตรวจการเด้งตอนกด/ปล่อย ขอบ 30 ms การเกิด event ครั้งเดียว และตัวนับเวลา rollover - อ่านการต่อสาย: ตัวอย่างตั้ง D2 เป็น
INPUT_PULLUPปุ่มชั่วขณะต่อ D2 กับ GND จึงอ่าน LOW เมื่อกด ดู InputPullupSerial และอย่านำวงจรนี้ไปสั่ง ESC - อ่าน state machine: เมื่อ raw input เปลี่ยน เริ่มจับเวลาของ candidate ใหม่ หากนิ่งต่อเนื่องอย่างน้อย 30 ms จึงเปลี่ยน stable และส่ง event ครั้งเดียว การเด้งก่อนครบเวลาจะเริ่มจับเวลาใหม่ ดูหลักการ Debounce
- เมื่อมีบอร์ด: upload แล้วเปิด serial 115200 baud บันทึก
millis,raw_pressed,stable_pressed,eventลงใบงานจาก ZIP LED เปลี่ยนทุกประมาณ 500 ms และ serial รายงานทุกประมาณ 200 ms หรือเมื่อเกิด event ทดลองกด/ปล่อยและกดสั้นกว่า 30 ms เทียบเวลาที่ได้รับจริง
เกณฑ์ตรวจ: input ที่เด้งไม่เปลี่ยน stable ก่อนครบเวลา และการเปลี่ยน stable ทำให้ event=1 เพียงครั้งเดียว ค่าคาบที่ตั้งในโค้ดเป็นเป้าหมาย การผ่าน host tests/compile ยังไม่ยืนยันการต่อสาย แรงดันหรือ timing บน MCU จริง
ต่อจาก UNO ไป ESP32 Dev Module
ดาวน์โหลดชุด ESP32 input/debounce (ZIP) · ผลคอมไพล์ ESP32 · รายการไฟล์ ESP32 และ SHA-256
วัตถุประสงค์: ฝึกย้ายโปรแกรมรับ input และจัดเวลาจาก UNO ไปยัง MCU อีกตระกูล โดยตรวจขา แรงดันและ SDK ให้ตรง ชุดนี้ใช้ classic ESP32 Dev Module เป้าหมาย esp32:esp32:esp32 และ Arduino-ESP32 3.3.12 (ESP-IDF 5.5.5) ผ่านคอมไพล์บน Windows วันที่ 1 ตุลาคม 2026 ด้วย CLI 1.5.1 เปิดคำเตือนทั้งหมด ไม่พบคำเตือน ใช้โปรแกรม 272,436 / 1,310,720 ไบต์ และ RAM 22,132 / 327,680 ไบต์ ตาม compiler ขนาดโปรแกรมไม่ใช่ผลความเร็วหรือ RAM ขณะรันจริง
หมายเลขเป็น GPIO ของชิป ไม่ใช่ตำแหน่งขาบนบอร์ด ตรวจ pinout ผู้ผลิตก่อนต่อจริง ภาพนี้อธิบายวงจร ไม่มีผลวัดฮาร์ดแวร์ เปิดแผนภาพ ESP32 ขนาดเต็ม
| รายการ | ค่าของชุดอ้างอิง |
|---|---|
| บอร์ดและ SDK | ESP32 Dev Module รุ่นดั้งเดิม, Arduino-ESP32 3.3.12 |
| ปุ่ม | GPIO27 → ปุ่มกดชั่วขณะ → GND, INPUT_PULLUP, LOW เมื่อกด |
| LED ภายนอก | GPIO25 → ตัวต้านทาน 330 Ω → anode LED, cathode → GND |
| Serial และเวลา | 115200 baud; debounce 30 ms; LED สลับทุก 500 ms; รายงานทุก 200 ms หรือเมื่อเกิด event |
| ค่า build ที่ตรวจ | CPU 240 MHz, flash 4 MB, QIO/80 MHz, default partition, PSRAM disabled; ค่าอื่นดูผล JSON |
- ตรวจบน PC ก่อน: แตก ZIP เปิด
esp32_input_serial.inoพร้อมinput_state.hในโฟลเดอร์เดียวกัน เพิ่ม stable index และติดตั้ง esp32 by Espressif Systems 3.3.12 ตาม คู่มือติดตั้ง ใน IDE เลือก ESP32 Dev Module แล้วกด Verify ยังไม่ต้องต่อ USB - ถ้าใช้ CLI: อ่านคำสั่งติดตั้งใน
README.mdแล้วรันarduino-cli compile --fqbn esp32:esp32:esp32 --warnings all --clean esp32_input_serialบันทึกผลของตนและเทียบ core/board options กับ JSON ค่า default ที่คอมไพล์ผ่านไม่ได้ยืนยันว่าตรงกับบอร์ดจริงทุกตัว - ตรวจแนวคิด debounce: header ใช้ bytes เดียวกับชุด UNO tests บน PC ตรวจ bounce ตอนกด/ปล่อย ขอบ 30 ms event ครั้งเดียวและการวนกลับของเวลา คำสั่ง C++ อยู่ในคู่มือ จึงตรวจแนวคิดนี้ได้โดยยังไม่มี MCU
- เมื่อมีบอร์ดจริง: ตรวจว่าบอร์ดเป็น classic ESP32 และมี GPIO25/27 เริ่มต่อโดยไม่จ่ายไฟ ตรวจทิศ LED/คู่หน้าสัมผัสปุ่ม/กราวด์ร่วม แล้ว upload ตามรุ่นและเปิด serial monitor 115200 baud กรอก
millis,raw_pressed,stable_pressed,eventลงใบงานเปล่า ทดลองกด/ปล่อย กดสั้นกว่า 30 ms และเพิ่มงานพิมพ์ข้อความเพื่อเปรียบเทียบช่วงเวลาจริง
คำแนะนำ: GPIO ใช้ logic 3.3 V อย่าต่อสัญญาณ 5 V จาก UNO เข้า ESP32 ชุดนี้ใช้ LED ภายนอกเพื่อไม่สมมติ LED_BUILTIN และขาบนบอร์ด ค่าการต่ออ้างอิงตรวจจาก GPIO API และ ESP32 datasheet ถ้าใช้ ESP32-C3/S3 หรือรุ่นอื่น ต้องเลือก target/pinout และตรวจคอมไพล์ใหม่ตามรุ่น
ขอบเขตผล: ผ่าน compile และ host tests เท่านั้น ยังไม่มี upload หรือผล LED/input/serial/timing บน ESP32 จริง ไม่เปิด Wi-Fi/Bluetooth และไม่ใช้ชุดนี้สั่ง ESC คาบ 500/200 ms เป็นเป้าหมายในโค้ด ไม่ใช่การรับประกัน timing ของระบบโดรน
ขั้นตอนลงมือทำ
- ตรวจบนคอมพิวเตอร์: ดาวน์โหลดชุดฝึกด้านล่าง เปิด
led_serial.inoเลือก Arduino UNO และ core ให้ตรง แล้วกด Verify เพื่อคอมไพล์ ขั้นนี้ทำได้โดยยังไม่ต่อบอร์ด บันทึกรุ่นเครื่องมือและผลของตนเอง - เตรียมบอร์ด: เมื่อมี UNO R3 ตรวจชื่อรุ่น สาย USB และพอร์ตของบอร์ดใน IDE แล้ว upload ตามคู่มือ หากเริ่มจากบอร์ดรุ่นอื่นให้ใช้ตัวอย่าง Blink เฉพาะรุ่นก่อน
- เพิ่มการบันทึก: เปิด serial monitor ที่ 115200 baud ตรวจว่าค่าเวลาต่อเนื่องและ LED ยังเปลี่ยนสถานะ กรอกเวลาที่อ่านจริงในใบงาน แล้วหาช่วงห่างจากสองบรรทัดติดกัน
- เพิ่ม input: เปลี่ยนจากตัวอย่าง LED แรกเป็นชุด input/debounce ด้านบน ตรวจการต่อ D2 กับปุ่มตามคู่มือ แล้วบันทึก raw/stable/event เมื่อสถานะเปลี่ยน ค่าที่กระเด้งหลายครั้งควรถูกกรองก่อนเปลี่ยน stable
- เปรียบเทียบเวลา: ทดลองเพิ่มงานพิมพ์ข้อความ แล้วสังเกตช่วงระหว่างรายงาน บันทึกสิ่งที่เปลี่ยนและเหตุผล หยุดที่ LED และ input ในบทนี้
ดาวน์โหลดชุดฝึกและตรวจผลคอมไพล์
ดาวน์โหลดชุดฝึก UNO R3: โค้ด คู่มือ ใบงาน และผลคอมไพล์ (ZIP)
ในชุดมี led_serial/led_serial.ino ที่ตรงกับตัวอย่างนี้ คู่มือเปิดด้วย IDE/CLI และตารางเปล่าสำหรับบันทึกผล หากต้องการเฉพาะใบงาน ใช้ ตารางบันทึกการทดลอง (CSV) หรืออ่าน คู่มือชุดฝึก (Markdown)
การตรวจใช้บอร์ดเป้าหมาย arduino:avr:uno พร้อมเปิดคำเตือนทั้งหมด พบ 4 คำเตือน unused parameter จาก Arduino core และไม่มีคำเตือนจาก sketch ตามผล compiler ดู ผลคอมไพล์และ SHA-256 ของโค้ด (JSON) กับ รายการไฟล์และแฮช (JSON) ผลนี้ยืนยันการสร้างโปรแกรมเท่านั้น ส่วน LED, serial, input และช่วงเวลาจริงยังรอทดสอบบนบอร์ด สำหรับ classic ESP32 ใช้ชุดเฉพาะที่ตรวจคอมไพล์ด้านบน รุ่นอื่นต้องตรวจแยก
เกณฑ์ตรวจผลและคำแนะนำ
ควรได้ LED ที่ทำงานพร้อมรายงาน serial ตารางชื่อขาและหน้าที่ และบันทึกว่า input ยังอ่านได้ระหว่างกระพริบ LED หรือไม่ หากโปรแกรมไม่ทำงาน ตรวจสาย USB พอร์ต ชื่อบอร์ด baud rate และการต่อขาทีละจุด อย่าเปลี่ยนทุกอย่างพร้อมกัน
ก่อนต่อบทถัดไป ให้ตอบได้ว่า delay() หยุดงานใดบ้าง ค่า ADC ต้องแปลงเป็นหน่วยอะไร และทำไมขาสัญญาณต่างรุ่นจึงต่อเข้าหากันโดยไม่ตรวจแรงดันไม่ได้ จากนั้นไป ขั้นประยุกต์: IMU และการสื่อสาร
ตรวจความเข้าใจด้วยตนเอง
เปิดแบบประเมินสามระดับพร้อมเหตุผล ระดับละ 4 ข้อ บันทึกรอบก่อนอ่าน/หลังทบทวนเฉพาะในเบราว์เซอร์ ใช้คำถามเดิม ไม่ใช่การวัดผลผู้เรียนจริงหรือใบรับรอง
เตรียมเก็บหลักฐานจากบอร์ดจริง
คู่มือเตรียมทดลอง UNO/ESP32/STM32 พร้อมใบงาน ตรวจรุ่น wiring source/core clock และไฟล์ดิบก่อนสรุปผล คู่มือพร้อมใช้ แต่การ upload/วัดจริงยังรออุปกรณ์
แยกปัญหา Verify พอร์ต upload Serial และไฟล์ Log พร้อมแบบบันทึกปัญหาว่าง เริ่มตรวจโค้ดในเครื่องได้ ส่วนที่ใช้บอร์ดยังรออุปกรณ์จริง
ฝึกอ่านปุ่ม debounce และเวลาแบบไม่รอค้าง
วัตถุประสงค์: แยก raw, candidate, stable และ event พร้อมคำนวณเวลา unsigned ก่อนย้ายจาก UNO ไป ESP32 พื้นฐาน: boolean, if, หน่วย ms และ C/C++ เบื้องต้น เวลาเสนอ: 45–60 นาที ยังไม่ได้วัดกับผู้เรียน ใช้ CSV/JSON หรือกระดาษได้โดยยังไม่ต้องมีบอร์ด
ลำดับ update 15 calls และ due สี่ตัวอย่างอ่านจาก host test เดิมแล้วคำนวณ เป็นโจทย์ที่ประกาศ ไม่ใช่ Log วัดบอร์ดหรือผลรันใหม่ คงภาพเสมือนจริงและแผนผังวงจรเดิม
ดาวน์โหลด วิธีฝึกปุ่มและเวลา, ใบงานพื้นฐาน 8 ข้อ, ลำดับ calls ที่ประกาศ, ตารางสถานะว่าง, ตาราง due ว่าง และ แบบรายงานว่าง ก่อนอ่าน เฉลยพร้อมเหตุผล, เฉลยสถานะ และ เฉลย due ตรวจที่มา/SHA-256 จาก manifest
1. เลือกชุดและไล่สถานะ · B1–B2
อ่านขาปุ่มและ LED ของแต่ละ sketch แล้วกรอก raw → candidate → stable → event แยก initial ใหม่ของแต่ละ sequence คำแนะนำ: LOW ถูกแปลงเป็น raw_pressed=true ในชุด INPUT_PULLUP นี้ Header ของ UNO/ESP32 มีไบต์เดียวกัน แต่ขา SDK และแรงดันต้องตรวจตามบอร์ด ไม่ย้ายวงจรตามตัวเลขขาอย่างเดียว
2. ขอบ 30 ms และ event ครั้งเดียว · B3–B5
ไล่ช่วงกดเด้ง 100/105/110 ms แล้วเทียบ elapsed ที่ 139/140 พร้อมช่วงปล่อยและ wrap คำแนะนำ: raw เปลี่ยนจะเริ่ม candidate ใหม่ event หมายถึง stable เปลี่ยนได้ทั้งกดและปล่อย ใช้ elapsed unsigned กับขอบ >=30 แต่ไม่ใช้โจทย์รับรองสัญญาณจริงระหว่าง calls หรือปุ่มทุกชนิด
3. แยกคาบตั้งกับรายงาน · B6–B7
คำนวณ due สี่กรณี แล้วอ่านเงื่อนไข event หรือครบคาบรายงาน คำแนะนำ: LED 500 ms/รายงาน 200 ms เป็นค่าตั้ง sketch ทำครั้งเดียวแล้วตั้ง last=now ไม่ catch-up ทุกคาบที่ผ่าน และตารางทุก update ไม่ใช่ serial capture การไม่มี delay() ยังต้องวัดเวลาของ Serial และงานอื่น
4. เขียนข้อสรุปจากโจทย์ · B8
เลือกช่วงหนึ่งอ้าง call หน่วย และขอบ แล้วแยก สิ่งที่คำนวณได้ → สิ่งที่ยังไม่ทราบ → หลักฐานเพิ่ม คำแนะนำ: observations.csv เดิมทั้งสองชุดยังว่าง ผล compile เดิมยืนยัน build target ส่วน wiring/LED/Serial/timing บนบอร์ดต้องเก็บจริง อย่ากรอกค่าคำนวณเหล่านี้เป็นผลทดลอง
ตรวจตนเอง: เสนอข้อละ 2 (คำตอบ 1 + เหตุผล/หน่วย/ขอบ 1) รวม 16 เพื่อเลือกทบทวน ไม่แทนใบงานเดิมหรือผลผู้เรียน รอบนี้ตรวจ source ไบต์ ตัวเลข และคำอธิบาย ไม่มีรัน host tests/compile/upload ใหม่ เมื่ออธิบายได้ให้ต่อ เซนเซอร์และการสื่อสาร
เลือกชุดฝึกหรือทบทวนต่อ
กลับสารบัญชุดฝึก MCU 10 ชุด เพื่อเลือกโจทย์ตามเป้าหมายและพื้นฐานที่ควรรู้ หรือ ทำแบบประเมินความเข้าใจ 12 ข้อ เพื่อหาหัวข้อที่ควรทบทวน
หลังตรวจเฉลย ให้บันทึกคำตอบที่แก้ เหตุผล และสิ่งที่หลักฐานยังไม่ยืนยัน แล้วเลือกชุดถัดไปที่ช่วยตอบคำถามนั้น คะแนนใบงานกับแบบประเมินเป็นคนละส่วน ใช้เลือกทบทวนด้วยตนเอง