บทเรียน 14/31-4: ตัวอย่างการเขียนโค้ด Arduino ด้วยฟังก์ชัน map() 1
บทเรียนนี้เป็นส่วนหนึ่งของชุดบทเรียนการเขียนโปรแกรม Arduino และเน้นการใช้งานจริงของฟังก์ชัน map() ในบทเรียนนี้ คุณจะได้เรียนรู้วิธีการแปลงค่าเปอร์เซ็นต์ (0–100) เป็นค่า PWM (Pulse Width Modulation) (0–255) เพื่อควบคุมความสว่างของหลอด LED แทนที่จะต้องคำนวณด้วยตนเองว่า 60% เท่ากับ 153 ฟังก์ชัน map() จะจัดการการแปลงเชิงเส้นให้คุณ ทำให้โค้ดของคุณสะอาดและเข้าใจง่ายขึ้น
เทคนิคนี้จำเป็นสำหรับการใช้งานจริงหลายอย่างที่คุณต้องแปลงค่าจากเซนเซอร์หรืออินพุตของผู้ใช้ให้เป็นช่วงค่าที่แตกต่างกัน ตัวอย่างเช่น คุณสามารถใช้มันเพื่อ:
- ควบคุมความเร็วของมอเตอร์ DC ตามค่าจากโพเทนชิโอมิเตอร์
- แสดงค่าดิบจากเซนเซอร์อุณหภูมิบนสเกล 0-100%
- แปลงพิกัดจอยสติ๊กเป็นมุมของเซอร์โวมอเตอร์
- ปรับความสว่างของ LED ตามเซนเซอร์วัดแสงโดยรอบ
- แปลงค่าการอ่านแบบแอนะล็อก 0-5V เป็นค่าดิจิทัล 0-1023 หรือในทางกลับกัน
ฮาร์ดแวร์/อุปกรณ์
เพื่อทำตามโปรเจกต์นี้ คุณจะต้องมีอุปกรณ์ดังต่อไปนี้:
- บอร์ด Arduino (Uno, Nano ฯลฯ)
- หลอด LED
- ตัวต้านทาน 220 โอห์ม
- สายจัมเปอร์
- เบรดบอร์ด (ไม่บังคับ แต่แนะนำ)
คู่มือการเดินสายไฟ
ในวิดีโอ ผู้สอนสาธิตโปรเจกต์โดยใช้การเดินสายไฟจากบทเรียนก่อนหน้าเกี่ยวกับการทำให้ LED จางลง วงจรนั้นตรงไปตรงมา: เชื่อมต่อขั้วแอโนด (ขายาว) ของ LED เข้ากับตัวต้านทาน 220 โอห์ม และเชื่อมต่อปลายอีกด้านของตัวต้านทานนั้นเข้ากับขาดิจิทัลหมายเลข 3 บน Arduino เชื่อมต่อขั้วแคโทด (ขาสั้น) ของ LED เข้ากับขากราวด์ (GND) บน Arduino โดยตรง
คำอธิบายโค้ด
โค้ดสำหรับตัวอย่างนี้สั้นมาก โดยตรรกะหลักอยู่ในฟังก์ชัน setup() มาดูส่วนที่ผู้ใช้สามารถกำหนดค่าได้ทีละส่วน
int LEDpin = 3; //กำหนดพินสำหรับ LED
บรรทัดนี้กำหนดพิน Arduino ที่เชื่อมต่อกับ LED ของคุณ ในตัวอย่างนี้ ตั้งค่าเป็นพิน 3 ซึ่งเป็นพินที่รองรับ PWM ซึ่งจำเป็นสำหรับเอาต์พุตแบบแอนะล็อก คุณสามารถเปลี่ยนตัวเลขนี้ได้หากคุณเชื่อมต่อ LED เข้ากับพิน PWM อื่น
int b=8;//ความสว่าง 60%
นี่คือตัวแปรสำคัญที่คุณจะแก้ไขเพื่อทดสอบระดับความสว่างที่แตกต่างกัน มันแสดงถึงความสว่างที่ต้องการเป็นเปอร์เซ็นต์ ความคิดเห็นในโค้ดระบุว่า "60%" แต่ค่าถูกตั้งเป็น 8 เพื่อการสาธิตในวิดีโอ คุณสามารถเปลี่ยนเป็นจำนวนเต็มใดก็ได้ระหว่าง 0 ถึง 100 ตัวอย่างเช่น การตั้งค่า b = 60 จะหมายถึงระดับความสว่าง 60%
int brightness = map(b, 0, 100, 0,255);
นี่คือหัวใจของบทเรียน ฟังก์ชัน map() รับค่าเปอร์เซ็นต์ของคุณ (b) และแปลงจากช่วงเดิม (0 ถึง 100) เป็นช่วงเป้าหมายใหม่ (0 ถึง 255) ผลลัพธ์จะถูกเก็บไว้ในตัวแปร brightness ซึ่งจะถูกใช้เพื่อเขียนค่าแอนะล็อกไปยังพิน LED
analogWrite(LEDpin, brightness);// เปิด LED ด้วยความสว่าง 60%
สุดท้าย บรรทัดนี้ส่งค่าที่แปลงแล้วไปยังพิน LED โดยใช้ analogWrite() ซึ่งจะตั้งค่ารอบการทำงาน (duty cycle) ของ LED ซึ่งควบคุมความสว่างได้อย่างมีประสิทธิภาพ ความสวยงามของวิธีนี้คือคุณเพียงแค่เปลี่ยนตัวแปร b เพื่อควบคุม LED และฟังก์ชัน map() จะจัดการการคำนวณที่จำเป็นทั้งหมดให้
โปรเจกต์สด/การสาธิต
ในวิดีโอ ผู้สอนอัปโหลดโค้ดและสาธิตผลของการเปลี่ยนตัวแปร b เมื่อตั้งค่า b เป็น 8 จอภาพอนุกรมจะพิมพ์ค่าที่แปลงแล้วคือ 20 และ LED จะสลัวอย่างเห็นได้ชัด การเปลี่ยน b เป็น 90 จะให้ค่าที่แปลงแล้วเป็น 229 ทำให้ LED สว่างขึ้นมาก การตั้งค่า b เป็น 100 จะแปลงเป็น 255 ซึ่งเป็นความสว่างเต็มที่ การสาธิตเชิงปฏิบัตินี้แสดงให้เห็นชัดเจนว่าฟังก์ชัน map() ช่วยลดความซับซ้อนของกระบวนการควบคุมเอาต์พุตแอนะล็อกด้วยค่าเปอร์เซ็นต์ที่ใช้งานง่าย
โปรเจกต์ที่เกี่ยวข้องจากวิดีโอนี้
- บทเรียนที่ 14/31-1: Arduino Millis (no delay) และฟังก์ชัน map | SunFounder Robojax
- บทเรียนที่ 14/31-2: การเขียนโค้ด Arduino millis() ตัวอย่างที่ 2 พร้อมอีเวนต์
- บทเรียนที่ 14/31-3: การเขียนโค้ด Arduino millis() ตัวอย่างที่ 3 พร้อมปุ่มกด
- บทเรียนที่ 14/31-5: การเขียนโค้ด Arduino map() ตัวอย่างที่ 2
บทตอน
- [00:00] แนะนำหลักสูตร Arduino โดย Robojax
- [01:19] millis() คืออะไรและทำไมต้องใช้
- [05:46] ตัวอย่างที่ 1: การใช้ millis() สำหรับอีเวนต์ตามเวลา
- [08:29] ตัวอย่างที่ 2: การใช้ millis() กับปุ่มกด
- [12:14] ตัวอย่างที่ 3: การตรวจจับการกดปุ่มครั้งที่สองหลังจากการหน่วงเวลา
- [17:20] แนะนำฟังก์ชัน map()
- [19:47] อธิบายโค้ดสำหรับตัวอย่าง map()
- [20:41] การสาธิตสดของฟังก์ชัน map()
/*
Lesson 14/31: Arduino coding map( ) example-1
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
int LEDpin = 3; //defind pin for LED
void setup() {
Serial.begin(9600);//initialize serial monitor with 9600 baud
pinMode(LEDpin, OUTPUT);//set pin as output
int b=8;//60% brightness
int brightness = map(b, 0, 100, 0,255);
Serial.println(brightness);//print it on serial monitor
analogWrite(LEDpin, brightness);// turn the LED on with 60% brightness
}
void loop() {
}
สิ่งที่คุณอาจต้องการ
-
อเมซอนSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
อเมซอน
-
อเมซอน
-
อเมซอน
-
อเมซอน
แหล่งข้อมูลและเอกสารอ้างอิง
-
เอกสารDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
ภายนอกPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
ไฟล์📁
คู่มือผู้ใช้
-
คู่มือการประกอบรถอัจฉริยะ SunFounder 3-in-1 Arduino Smart Carเอกสารนี้แสดงการประกอบ SunFounder 3-in-1 Arduino Smart Car ทีละขั้นตอน
SunFounder_car_assembly_manual.pdf1.20 MB